@@ -15,6 +15,8 @@ use api::r0::{
1515 DeactivateAccount ,
1616 DeleteRoomAlias ,
1717 DeleteTag ,
18+ Download ,
19+ DownloadFile ,
1820 GetAvatarUrl ,
1921 GetDisplayName ,
2022 GetFilter ,
@@ -32,6 +34,7 @@ use api::r0::{
3234 Members ,
3335 PostFilter ,
3436 PostPresenceList ,
37+ PreviewUrl ,
3538 Profile ,
3639 PutAccountData ,
3740 PutAvatarUrl ,
@@ -45,6 +48,8 @@ use api::r0::{
4548 SendMessageEvent ,
4649 StateMessageEvent ,
4750 Sync ,
51+ Thumbnail ,
52+ Upload ,
4853 Versions ,
4954} ;
5055use config:: Config ;
@@ -74,101 +79,122 @@ impl<'a> Server<'a> {
7479 r2d2_config : R2D2Config < PgConnection , R2D2DieselError > ,
7580 set_up_db : bool ,
7681 ) -> Result < Server , CliError > {
77- let mut r0_router = Router :: new ( ) ;
82+ debug ! ( "Connecting to PostgreSQL." ) ;
83+ let connection_pool = DB :: create_connection_pool ( r2d2_config, & ruma_config. postgres_url ) ?;
84+ let connection = connection_pool. get ( ) ?;
85+
86+ if set_up_db {
87+ debug ! ( "Setting up database." ) ;
88+ setup_database ( & * connection) . map_err ( CliError :: from) ?;
89+
90+ debug ! ( "Running pending database migrations." ) ;
91+ run_pending_migrations ( & * connection) . map_err ( CliError :: from) ?;
92+ }
93+
94+ let mut mount = Mount :: new ( ) ;
95+
96+
97+ /// Add version endpoint
98+ let mut versions_router = Router :: new ( ) ;
99+
100+ versions_router. get ( "/versions" , Versions :: supported ( ) , "versions" ) ;
101+
102+ let mut versions = Chain :: new ( versions_router) ;
103+ versions. link_after ( ResponseHeaders ) ;
104+
105+ mount. mount ( "/_matrix/client/" , versions) ;
106+
107+
108+ /// Add client endpoint
109+ let mut r0_client_router = Router :: new ( ) ;
78110
79- r0_router . post ( "/account/password" , AccountPassword :: chain ( ) , "account_password" ) ;
80- r0_router . post ( "/account/deactivate" , DeactivateAccount :: chain ( ) , "deactivate_account" ) ;
81- r0_router . post ( "/createRoom" , CreateRoom :: chain ( ) , "create_room" ) ;
82- r0_router . get ( "/directory/room/:room_alias" , GetRoomAlias :: chain ( ) , "get_room_alias" ) ;
83- r0_router . delete (
111+ r0_client_router . post ( "/account/password" , AccountPassword :: chain ( ) , "account_password" ) ;
112+ r0_client_router . post ( "/account/deactivate" , DeactivateAccount :: chain ( ) , "deactivate_account" ) ;
113+ r0_client_router . post ( "/createRoom" , CreateRoom :: chain ( ) , "create_room" ) ;
114+ r0_client_router . get ( "/directory/room/:room_alias" , GetRoomAlias :: chain ( ) , "get_room_alias" ) ;
115+ r0_client_router . delete (
84116 "/directory/room/:room_alias" ,
85117 DeleteRoomAlias :: chain ( ) ,
86118 "delete_room_alias" ,
87119 ) ;
88- r0_router . put ( "/directory/room/:room_alias" , PutRoomAlias :: chain ( ) , "put_room_alias" ) ;
89- r0_router . post ( "/login" , Login :: chain ( ) , "login" ) ;
90- r0_router . post ( "/logout" , Logout :: chain ( ) , "logout" ) ;
91- r0_router . post ( "/register" , Register :: chain ( ) , "register" ) ;
92- r0_router . post ( "/tokenrefresh" , deprecated, "token_refresh" ) ;
93- r0_router . put (
120+ r0_client_router . put ( "/directory/room/:room_alias" , PutRoomAlias :: chain ( ) , "put_room_alias" ) ;
121+ r0_client_router . post ( "/login" , Login :: chain ( ) , "login" ) ;
122+ r0_client_router . post ( "/logout" , Logout :: chain ( ) , "logout" ) ;
123+ r0_client_router . post ( "/register" , Register :: chain ( ) , "register" ) ;
124+ r0_client_router . post ( "/tokenrefresh" , deprecated, "token_refresh" ) ;
125+ r0_client_router . put (
94126 "/user/:user_id/account_data/:type" ,
95127 PutAccountData :: chain ( ) ,
96128 "put_account_data" ,
97129 ) ;
98- r0_router . put (
130+ r0_client_router . put (
99131 "/user/:user_id/rooms/:room_id/account_data/:type" ,
100132 PutRoomAccountData :: chain ( ) ,
101133 "put_room_account_data" ,
102134 ) ;
103- r0_router . put (
135+ r0_client_router . put (
104136 "/rooms/:room_id/send/:event_type/:transaction_id" ,
105137 SendMessageEvent :: chain ( ) ,
106138 "send_message_event" ,
107139 ) ;
108- r0_router . put (
140+ r0_client_router . put (
109141 "/rooms/:room_id/state/:event_type" ,
110142 StateMessageEvent :: chain ( ) ,
111143 "state_message_event" ,
112144 ) ;
113- r0_router . put (
145+ r0_client_router . put (
114146 "/rooms/:room_id/state/:event_type/:state_key" ,
115147 StateMessageEvent :: chain ( ) ,
116148 "state_message_event_with_key" ,
117149 ) ;
118-
119- /// Joining rooms
120- r0_router. post ( "/rooms/:room_id/join" , JoinRoom :: chain ( ) , "join_room" ) ;
121- r0_router. post ( "/rooms/:room_id/invite" , InviteToRoom :: chain ( ) , "invite_to_room" ) ;
122- r0_router. post ( "/join/:room_id_or_alias" , JoinRoomWithIdOrAlias :: chain ( ) , "join_room_with_alias" ) ;
123- r0_router. post ( "rooms/:room_id/kick" , KickFromRoom :: chain ( ) , "kick_from_room" ) ;
124- r0_router. post ( "rooms/:room_id/leave" , LeaveRoom :: chain ( ) , "leave_room" ) ;
125- r0_router. get ( "/rooms/:room_id/members" , Members :: chain ( ) , "members" ) ;
126- r0_router. get ( "/rooms/:room_id/state" , RoomState :: chain ( ) , "get_room_state" ) ;
127- r0_router. get ( "/profile/:user_id" , Profile :: chain ( ) , "profile" ) ;
128- r0_router. get ( "/profile/:user_id/avatar_url" , GetAvatarUrl :: chain ( ) , "get_avatar_url" ) ;
129- r0_router. get ( "/profile/:user_id/displayname" , GetDisplayName :: chain ( ) , "get_display_name" ) ;
130- r0_router. put ( "/profile/:user_id/avatar_url" , PutAvatarUrl :: chain ( ) , "put_avatar_url" ) ;
131- r0_router. put ( "/profile/:user_id/displayname" , PutDisplayName :: chain ( ) , "put_display_name" ) ;
132- r0_router. get ( "/user/:user_id/rooms/:room_id/tags" , GetTags :: chain ( ) , "get_tags" ) ;
133- r0_router. put ( "/user/:user_id/rooms/:room_id/tags/:tag" , PutTag :: chain ( ) , "add_tag" ) ;
134- r0_router. delete ( "/user/:user_id/rooms/:room_id/tags/:tag" , DeleteTag :: chain ( ) , "delete_tag" ) ;
135- r0_router. get ( "/user/:user_id/filter/:filter_id" , GetFilter :: chain ( ) , "get_filter" ) ;
136- r0_router. post ( "/user/:user_id/filter" , PostFilter :: chain ( ) , "post_filter" ) ;
137- r0_router. get ( "/sync" , Sync :: chain ( ) , "sync" ) ;
138- r0_router. get ( "/presence/:user_id/status" , GetPresenceStatus :: chain ( ) , "get_presence_status" ) ;
139- r0_router. put ( "/presence/:user_id/status" , PutPresenceStatus :: chain ( ) , "put_presence_status" ) ;
140- r0_router. get ( "/presence/list/:user_id" , GetPresenceList :: chain ( ) , "get_presence_list" ) ;
141- r0_router. post ( "/presence/list/:user_id" , PostPresenceList :: chain ( ) , "post_presence_list" ) ;
142-
143- let mut r0 = Chain :: new ( r0_router) ;
144-
145- debug ! ( "Connecting to PostgreSQL." ) ;
146- let connection_pool = DB :: create_connection_pool ( r2d2_config, & ruma_config. postgres_url ) ?;
147- let connection = connection_pool. get ( ) ?;
148-
149- if set_up_db {
150- debug ! ( "Setting up database." ) ;
151- setup_database ( & * connection) . map_err ( CliError :: from) ?;
152-
153- debug ! ( "Running pending database migrations." ) ;
154- run_pending_migrations ( & * connection) . map_err ( CliError :: from) ?;
155- }
156-
157- r0. link_before ( Read :: < Config > :: one ( ruma_config. clone ( ) ) ) ;
158- r0. link_before ( Write :: < DB > :: one ( connection_pool) ) ;
159- r0. link_after ( ResponseHeaders ) ;
160-
161- let mut versions_router = Router :: new ( ) ;
162-
163- versions_router. get ( "/versions" , Versions :: supported ( ) , "versions" ) ;
164-
165- let mut versions = Chain :: new ( versions_router) ;
166- versions. link_after ( ResponseHeaders ) ;
167-
168- let mut mount = Mount :: new ( ) ;
169-
170- mount. mount ( "/_matrix/client/" , versions) ;
171- mount. mount ( "/_matrix/client/r0/" , r0) ;
150+ r0_client_router. post ( "/rooms/:room_id/join" , JoinRoom :: chain ( ) , "join_room" ) ;
151+ r0_client_router. post ( "/rooms/:room_id/invite" , InviteToRoom :: chain ( ) , "invite_to_room" ) ;
152+ r0_client_router. post ( "/join/:room_id_or_alias" , JoinRoomWithIdOrAlias :: chain ( ) , "join_room_with_alias" ) ;
153+ r0_client_router. post ( "rooms/:room_id/kick" , KickFromRoom :: chain ( ) , "kick_from_room" ) ;
154+ r0_client_router. post ( "rooms/:room_id/leave" , LeaveRoom :: chain ( ) , "leave_room" ) ;
155+ r0_client_router. get ( "/rooms/:room_id/members" , Members :: chain ( ) , "members" ) ;
156+ r0_client_router. get ( "/rooms/:room_id/state" , RoomState :: chain ( ) , "get_room_state" ) ;
157+ r0_client_router. get ( "/profile/:user_id" , Profile :: chain ( ) , "profile" ) ;
158+ r0_client_router. get ( "/profile/:user_id/avatar_url" , GetAvatarUrl :: chain ( ) , "get_avatar_url" ) ;
159+ r0_client_router. get ( "/profile/:user_id/displayname" , GetDisplayName :: chain ( ) , "get_display_name" ) ;
160+ r0_client_router. put ( "/profile/:user_id/avatar_url" , PutAvatarUrl :: chain ( ) , "put_avatar_url" ) ;
161+ r0_client_router. put ( "/profile/:user_id/displayname" , PutDisplayName :: chain ( ) , "put_display_name" ) ;
162+ r0_client_router. get ( "/user/:user_id/rooms/:room_id/tags" , GetTags :: chain ( ) , "get_tags" ) ;
163+ r0_client_router. put ( "/user/:user_id/rooms/:room_id/tags/:tag" , PutTag :: chain ( ) , "add_tag" ) ;
164+ r0_client_router. delete ( "/user/:user_id/rooms/:room_id/tags/:tag" , DeleteTag :: chain ( ) , "delete_tag" ) ;
165+ r0_client_router. get ( "/user/:user_id/filter/:filter_id" , GetFilter :: chain ( ) , "get_filter" ) ;
166+ r0_client_router. post ( "/user/:user_id/filter" , PostFilter :: chain ( ) , "post_filter" ) ;
167+ r0_client_router. get ( "/sync" , Sync :: chain ( ) , "sync" ) ;
168+ r0_client_router. get ( "/presence/:user_id/status" , GetPresenceStatus :: chain ( ) , "get_presence_status" ) ;
169+ r0_client_router. put ( "/presence/:user_id/status" , PutPresenceStatus :: chain ( ) , "put_presence_status" ) ;
170+ r0_client_router. get ( "/presence/list/:user_id" , GetPresenceList :: chain ( ) , "get_presence_list" ) ;
171+ r0_client_router. post ( "/presence/list/:user_id" , PostPresenceList :: chain ( ) , "post_presence_list" ) ;
172+
173+ let mut r0_client = Chain :: new ( r0_client_router) ;
174+
175+ r0_client. link_before ( Read :: < Config > :: one ( ruma_config. clone ( ) ) ) ;
176+ r0_client. link_before ( Write :: < DB > :: one ( connection_pool. clone ( ) ) ) ;
177+ r0_client. link_after ( ResponseHeaders ) ;
178+
179+ mount. mount ( "/_matrix/client/r0/" , r0_client) ;
180+
181+
182+ /// Add media endpoint
183+ let mut r0_media_router = Router :: new ( ) ;
184+
185+ r0_media_router. get ( "/download/:server_name/:media_id" , Download :: chain ( ) , "download" ) ;
186+ r0_media_router. get ( "/download/:server_name/:media_id/:file_name" , DownloadFile :: chain ( ) , "download_file_name" ) ;
187+ r0_media_router. get ( "/thumbnail/:server_name/:media_id" , Thumbnail :: chain ( ) , "thumbnail" ) ;
188+ r0_media_router. post ( "/upload" , Upload :: chain ( ) , "upload" ) ;
189+ r0_media_router. post ( "/preview_url" , PreviewUrl :: chain ( ) , "preview_url" ) ;
190+
191+ let mut r0_media = Chain :: new ( r0_media_router) ;
192+
193+ r0_media. link_before ( Read :: < Config > :: one ( ruma_config. clone ( ) ) ) ;
194+ r0_media. link_before ( Write :: < DB > :: one ( connection_pool) ) ;
195+ r0_media. link_after ( ResponseHeaders ) ;
196+
197+ mount. mount ( "/_matrix/media/r0/" , r0_media) ;
172198
173199 mount_swagger ( & mut mount) ;
174200
0 commit comments