this repo has no description
1pub mod api;
2pub mod auth;
3pub mod config;
4pub mod notifications;
5pub mod oauth;
6pub mod repo;
7pub mod state;
8pub mod storage;
9pub mod sync;
10
11use axum::{
12 Router,
13 routing::{any, get, post},
14};
15use state::AppState;
16
17pub fn app(state: AppState) -> Router {
18 Router::new()
19 .route("/health", get(api::server::health))
20 .route("/xrpc/_health", get(api::server::health))
21 .route(
22 "/xrpc/com.atproto.server.describeServer",
23 get(api::server::describe_server),
24 )
25 .route(
26 "/xrpc/com.atproto.server.createAccount",
27 post(api::identity::create_account),
28 )
29 .route(
30 "/xrpc/com.atproto.server.createSession",
31 post(api::server::create_session),
32 )
33 .route(
34 "/xrpc/com.atproto.server.getSession",
35 get(api::server::get_session),
36 )
37 .route(
38 "/xrpc/com.atproto.server.deleteSession",
39 post(api::server::delete_session),
40 )
41 .route(
42 "/xrpc/com.atproto.server.refreshSession",
43 post(api::server::refresh_session),
44 )
45 .route(
46 "/xrpc/com.atproto.server.getServiceAuth",
47 get(api::server::get_service_auth),
48 )
49 .route(
50 "/xrpc/com.atproto.identity.resolveHandle",
51 get(api::identity::resolve_handle),
52 )
53 .route(
54 "/xrpc/com.atproto.repo.createRecord",
55 post(api::repo::create_record),
56 )
57 .route(
58 "/xrpc/com.atproto.repo.putRecord",
59 post(api::repo::put_record),
60 )
61 .route(
62 "/xrpc/com.atproto.repo.getRecord",
63 get(api::repo::get_record),
64 )
65 .route(
66 "/xrpc/com.atproto.repo.deleteRecord",
67 post(api::repo::delete_record),
68 )
69 .route(
70 "/xrpc/com.atproto.repo.listRecords",
71 get(api::repo::list_records),
72 )
73 .route(
74 "/xrpc/com.atproto.repo.describeRepo",
75 get(api::repo::describe_repo),
76 )
77 .route(
78 "/xrpc/com.atproto.repo.uploadBlob",
79 post(api::repo::upload_blob),
80 )
81 .route(
82 "/xrpc/com.atproto.repo.applyWrites",
83 post(api::repo::apply_writes),
84 )
85 .route(
86 "/xrpc/com.atproto.sync.getLatestCommit",
87 get(sync::get_latest_commit),
88 )
89 .route(
90 "/xrpc/com.atproto.sync.listRepos",
91 get(sync::list_repos),
92 )
93 .route(
94 "/xrpc/com.atproto.sync.getBlob",
95 get(sync::get_blob),
96 )
97 .route(
98 "/xrpc/com.atproto.sync.listBlobs",
99 get(sync::list_blobs),
100 )
101 .route(
102 "/xrpc/com.atproto.sync.getRepoStatus",
103 get(sync::get_repo_status),
104 )
105 .route(
106 "/xrpc/com.atproto.server.checkAccountStatus",
107 get(api::server::check_account_status),
108 )
109 .route(
110 "/xrpc/com.atproto.identity.getRecommendedDidCredentials",
111 get(api::identity::get_recommended_did_credentials),
112 )
113 .route(
114 "/xrpc/com.atproto.repo.listMissingBlobs",
115 get(api::repo::list_missing_blobs),
116 )
117 .route(
118 "/xrpc/com.atproto.sync.notifyOfUpdate",
119 post(sync::notify_of_update),
120 )
121 .route(
122 "/xrpc/com.atproto.sync.requestCrawl",
123 post(sync::request_crawl),
124 )
125 .route(
126 "/xrpc/com.atproto.sync.getBlocks",
127 get(sync::get_blocks),
128 )
129 .route(
130 "/xrpc/com.atproto.sync.getRepo",
131 get(sync::get_repo),
132 )
133 .route(
134 "/xrpc/com.atproto.sync.getRecord",
135 get(sync::get_record),
136 )
137 .route(
138 "/xrpc/com.atproto.sync.subscribeRepos",
139 get(sync::subscribe_repos),
140 )
141 .route(
142 "/xrpc/com.atproto.moderation.createReport",
143 post(api::moderation::create_report),
144 )
145 .route(
146 "/xrpc/com.atproto.admin.getAccountInfo",
147 get(api::admin::get_account_info),
148 )
149 .route(
150 "/xrpc/com.atproto.admin.getAccountInfos",
151 get(api::admin::get_account_infos),
152 )
153 .route(
154 "/xrpc/com.atproto.server.activateAccount",
155 post(api::server::activate_account),
156 )
157 .route(
158 "/xrpc/com.atproto.server.deactivateAccount",
159 post(api::server::deactivate_account),
160 )
161 .route(
162 "/xrpc/com.atproto.server.requestAccountDelete",
163 post(api::server::request_account_delete),
164 )
165 .route(
166 "/xrpc/com.atproto.server.deleteAccount",
167 post(api::server::delete_account),
168 )
169 .route(
170 "/xrpc/com.atproto.server.requestPasswordReset",
171 post(api::server::request_password_reset),
172 )
173 .route(
174 "/xrpc/com.atproto.server.resetPassword",
175 post(api::server::reset_password),
176 )
177 .route(
178 "/xrpc/com.atproto.server.requestEmailUpdate",
179 post(api::server::request_email_update),
180 )
181 .route(
182 "/xrpc/com.atproto.server.confirmEmail",
183 post(api::server::confirm_email),
184 )
185 .route(
186 "/xrpc/com.atproto.server.updateEmail",
187 post(api::server::update_email),
188 )
189 .route(
190 "/xrpc/com.atproto.server.reserveSigningKey",
191 post(api::server::reserve_signing_key),
192 )
193 .route(
194 "/xrpc/com.atproto.identity.updateHandle",
195 post(api::identity::update_handle),
196 )
197 .route(
198 "/xrpc/com.atproto.admin.deleteAccount",
199 post(api::admin::delete_account),
200 )
201 .route(
202 "/xrpc/com.atproto.admin.updateAccountEmail",
203 post(api::admin::update_account_email),
204 )
205 .route(
206 "/xrpc/com.atproto.admin.updateAccountHandle",
207 post(api::admin::update_account_handle),
208 )
209 .route(
210 "/xrpc/com.atproto.admin.updateAccountPassword",
211 post(api::admin::update_account_password),
212 )
213 .route(
214 "/xrpc/com.atproto.server.listAppPasswords",
215 get(api::server::list_app_passwords),
216 )
217 .route(
218 "/xrpc/com.atproto.server.createAppPassword",
219 post(api::server::create_app_password),
220 )
221 .route(
222 "/xrpc/com.atproto.server.revokeAppPassword",
223 post(api::server::revoke_app_password),
224 )
225 .route(
226 "/xrpc/com.atproto.server.createInviteCode",
227 post(api::server::create_invite_code),
228 )
229 .route(
230 "/xrpc/com.atproto.server.createInviteCodes",
231 post(api::server::create_invite_codes),
232 )
233 .route(
234 "/xrpc/com.atproto.server.getAccountInviteCodes",
235 get(api::server::get_account_invite_codes),
236 )
237 .route(
238 "/xrpc/com.atproto.admin.getInviteCodes",
239 get(api::admin::get_invite_codes),
240 )
241 .route(
242 "/xrpc/com.atproto.admin.disableAccountInvites",
243 post(api::admin::disable_account_invites),
244 )
245 .route(
246 "/xrpc/com.atproto.admin.enableAccountInvites",
247 post(api::admin::enable_account_invites),
248 )
249 .route(
250 "/xrpc/com.atproto.admin.disableInviteCodes",
251 post(api::admin::disable_invite_codes),
252 )
253 .route(
254 "/xrpc/com.atproto.admin.getSubjectStatus",
255 get(api::admin::get_subject_status),
256 )
257 .route(
258 "/xrpc/com.atproto.admin.updateSubjectStatus",
259 post(api::admin::update_subject_status),
260 )
261 .route(
262 "/xrpc/com.atproto.admin.sendEmail",
263 post(api::admin::send_email),
264 )
265 .route(
266 "/xrpc/app.bsky.actor.getPreferences",
267 get(api::actor::get_preferences),
268 )
269 .route(
270 "/xrpc/app.bsky.actor.putPreferences",
271 post(api::actor::put_preferences),
272 )
273 .route(
274 "/xrpc/app.bsky.actor.getProfile",
275 get(api::actor::get_profile),
276 )
277 .route(
278 "/xrpc/app.bsky.actor.getProfiles",
279 get(api::actor::get_profiles),
280 )
281 // I know I know, I'm not supposed to implement appview endpoints. Leave me be
282 .route(
283 "/xrpc/app.bsky.feed.getTimeline",
284 get(api::feed::get_timeline),
285 )
286 .route("/.well-known/did.json", get(api::identity::well_known_did))
287 .route("/u/{handle}/did.json", get(api::identity::user_did_doc))
288 // OAuth 2.1 endpoints
289 .route(
290 "/.well-known/oauth-protected-resource",
291 get(oauth::endpoints::oauth_protected_resource),
292 )
293 .route(
294 "/.well-known/oauth-authorization-server",
295 get(oauth::endpoints::oauth_authorization_server),
296 )
297 .route("/oauth/jwks", get(oauth::endpoints::oauth_jwks))
298 .route(
299 "/oauth/par",
300 post(oauth::endpoints::pushed_authorization_request),
301 )
302 .route("/oauth/authorize", get(oauth::endpoints::authorize_get))
303 .route("/oauth/authorize", post(oauth::endpoints::authorize_post))
304 .route("/oauth/token", post(oauth::endpoints::token_endpoint))
305 .route("/oauth/revoke", post(oauth::endpoints::revoke_token))
306 .route("/oauth/introspect", post(oauth::endpoints::introspect_token))
307 .route("/xrpc/{*method}", any(api::proxy::proxy_handler))
308 .with_state(state)
309}