Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

672 lines
23KB

  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.Router do
  5. use Pleroma.Web, :router
  6. pipeline :browser do
  7. plug(:accepts, ["html"])
  8. plug(:fetch_session)
  9. end
  10. pipeline :oauth do
  11. plug(:fetch_session)
  12. plug(Pleroma.Plugs.OAuthPlug)
  13. plug(Pleroma.Plugs.UserEnabledPlug)
  14. end
  15. pipeline :api do
  16. plug(:accepts, ["json"])
  17. plug(:fetch_session)
  18. plug(Pleroma.Plugs.OAuthPlug)
  19. plug(Pleroma.Plugs.BasicAuthDecoderPlug)
  20. plug(Pleroma.Plugs.UserFetcherPlug)
  21. plug(Pleroma.Plugs.SessionAuthenticationPlug)
  22. plug(Pleroma.Plugs.LegacyAuthenticationPlug)
  23. plug(Pleroma.Plugs.AuthenticationPlug)
  24. plug(Pleroma.Plugs.UserEnabledPlug)
  25. plug(Pleroma.Plugs.SetUserSessionIdPlug)
  26. plug(Pleroma.Plugs.EnsureUserKeyPlug)
  27. plug(Pleroma.Plugs.IdempotencyPlug)
  28. end
  29. pipeline :authenticated_api do
  30. plug(:accepts, ["json"])
  31. plug(:fetch_session)
  32. plug(Pleroma.Plugs.OAuthPlug)
  33. plug(Pleroma.Plugs.BasicAuthDecoderPlug)
  34. plug(Pleroma.Plugs.UserFetcherPlug)
  35. plug(Pleroma.Plugs.SessionAuthenticationPlug)
  36. plug(Pleroma.Plugs.LegacyAuthenticationPlug)
  37. plug(Pleroma.Plugs.AuthenticationPlug)
  38. plug(Pleroma.Plugs.UserEnabledPlug)
  39. plug(Pleroma.Plugs.SetUserSessionIdPlug)
  40. plug(Pleroma.Plugs.EnsureAuthenticatedPlug)
  41. plug(Pleroma.Plugs.IdempotencyPlug)
  42. end
  43. pipeline :admin_api do
  44. plug(:accepts, ["json"])
  45. plug(:fetch_session)
  46. plug(Pleroma.Plugs.OAuthPlug)
  47. plug(Pleroma.Plugs.BasicAuthDecoderPlug)
  48. plug(Pleroma.Plugs.UserFetcherPlug)
  49. plug(Pleroma.Plugs.SessionAuthenticationPlug)
  50. plug(Pleroma.Plugs.LegacyAuthenticationPlug)
  51. plug(Pleroma.Plugs.AuthenticationPlug)
  52. plug(Pleroma.Plugs.AdminSecretAuthenticationPlug)
  53. plug(Pleroma.Plugs.UserEnabledPlug)
  54. plug(Pleroma.Plugs.SetUserSessionIdPlug)
  55. plug(Pleroma.Plugs.EnsureAuthenticatedPlug)
  56. plug(Pleroma.Plugs.UserIsAdminPlug)
  57. plug(Pleroma.Plugs.IdempotencyPlug)
  58. end
  59. pipeline :mastodon_html do
  60. plug(:accepts, ["html"])
  61. plug(:fetch_session)
  62. plug(Pleroma.Plugs.OAuthPlug)
  63. plug(Pleroma.Plugs.BasicAuthDecoderPlug)
  64. plug(Pleroma.Plugs.UserFetcherPlug)
  65. plug(Pleroma.Plugs.SessionAuthenticationPlug)
  66. plug(Pleroma.Plugs.LegacyAuthenticationPlug)
  67. plug(Pleroma.Plugs.AuthenticationPlug)
  68. plug(Pleroma.Plugs.UserEnabledPlug)
  69. plug(Pleroma.Plugs.SetUserSessionIdPlug)
  70. plug(Pleroma.Plugs.EnsureUserKeyPlug)
  71. end
  72. pipeline :pleroma_html do
  73. plug(:accepts, ["html"])
  74. plug(:fetch_session)
  75. plug(Pleroma.Plugs.OAuthPlug)
  76. plug(Pleroma.Plugs.BasicAuthDecoderPlug)
  77. plug(Pleroma.Plugs.UserFetcherPlug)
  78. plug(Pleroma.Plugs.SessionAuthenticationPlug)
  79. plug(Pleroma.Plugs.AuthenticationPlug)
  80. plug(Pleroma.Plugs.EnsureUserKeyPlug)
  81. end
  82. pipeline :well_known do
  83. plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"])
  84. end
  85. pipeline :config do
  86. plug(:accepts, ["json", "xml"])
  87. end
  88. pipeline :pleroma_api do
  89. plug(:accepts, ["html", "json"])
  90. end
  91. pipeline :mailbox_preview do
  92. plug(:accepts, ["html"])
  93. plug(:put_secure_browser_headers, %{
  94. "content-security-policy" =>
  95. "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' 'unsafe-eval'"
  96. })
  97. end
  98. pipeline :http_signature do
  99. plug(Pleroma.Web.Plugs.HTTPSignaturePlug)
  100. plug(Pleroma.Web.Plugs.MappedSignatureToIdentityPlug)
  101. end
  102. scope "/api/pleroma", Pleroma.Web.TwitterAPI do
  103. pipe_through(:pleroma_api)
  104. get("/password_reset/:token", PasswordController, :reset, as: :reset_password)
  105. post("/password_reset", PasswordController, :do_reset, as: :reset_password)
  106. get("/emoji", UtilController, :emoji)
  107. get("/captcha", UtilController, :captcha)
  108. get("/healthcheck", UtilController, :healthcheck)
  109. end
  110. scope "/api/pleroma", Pleroma.Web do
  111. pipe_through(:pleroma_api)
  112. post("/uploader_callback/:upload_path", UploaderController, :callback)
  113. end
  114. scope "/api/pleroma/admin", Pleroma.Web.AdminAPI do
  115. pipe_through(:admin_api)
  116. post("/users/follow", AdminAPIController, :user_follow)
  117. post("/users/unfollow", AdminAPIController, :user_unfollow)
  118. delete("/users", AdminAPIController, :user_delete)
  119. post("/users", AdminAPIController, :users_create)
  120. patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation)
  121. patch("/users/activate", AdminAPIController, :user_activate)
  122. patch("/users/deactivate", AdminAPIController, :user_deactivate)
  123. put("/users/tag", AdminAPIController, :tag_users)
  124. delete("/users/tag", AdminAPIController, :untag_users)
  125. get("/users/:nickname/permission_group", AdminAPIController, :right_get)
  126. get("/users/:nickname/permission_group/:permission_group", AdminAPIController, :right_get)
  127. post("/users/:nickname/permission_group/:permission_group", AdminAPIController, :right_add)
  128. delete(
  129. "/users/:nickname/permission_group/:permission_group",
  130. AdminAPIController,
  131. :right_delete
  132. )
  133. post("/users/permission_group/:permission_group", AdminAPIController, :right_add_multiple)
  134. delete(
  135. "/users/permission_group/:permission_group",
  136. AdminAPIController,
  137. :right_delete_multiple
  138. )
  139. get("/relay", AdminAPIController, :relay_list)
  140. post("/relay", AdminAPIController, :relay_follow)
  141. delete("/relay", AdminAPIController, :relay_unfollow)
  142. post("/users/invite_token", AdminAPIController, :create_invite_token)
  143. get("/users/invites", AdminAPIController, :invites)
  144. post("/users/revoke_invite", AdminAPIController, :revoke_invite)
  145. post("/users/email_invite", AdminAPIController, :email_invite)
  146. get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset)
  147. patch("/users/force_password_reset", AdminAPIController, :force_password_reset)
  148. get("/users", AdminAPIController, :list_users)
  149. get("/users/:nickname", AdminAPIController, :user_show)
  150. get("/users/:nickname/statuses", AdminAPIController, :list_user_statuses)
  151. get("/instances/:instance/statuses", AdminAPIController, :list_instance_statuses)
  152. patch("/users/confirm_email", AdminAPIController, :confirm_email)
  153. patch("/users/resend_confirmation_email", AdminAPIController, :resend_confirmation_email)
  154. get("/reports", AdminAPIController, :list_reports)
  155. get("/grouped_reports", AdminAPIController, :list_grouped_reports)
  156. get("/reports/:id", AdminAPIController, :report_show)
  157. patch("/reports", AdminAPIController, :reports_update)
  158. post("/reports/:id/notes", AdminAPIController, :report_notes_create)
  159. delete("/reports/:report_id/notes/:id", AdminAPIController, :report_notes_delete)
  160. put("/statuses/:id", AdminAPIController, :status_update)
  161. delete("/statuses/:id", AdminAPIController, :status_delete)
  162. get("/statuses", AdminAPIController, :list_statuses)
  163. get("/config", AdminAPIController, :config_show)
  164. post("/config", AdminAPIController, :config_update)
  165. get("/config/descriptions", AdminAPIController, :config_descriptions)
  166. get("/restart", AdminAPIController, :restart)
  167. get("/moderation_log", AdminAPIController, :list_log)
  168. post("/reload_emoji", AdminAPIController, :reload_emoji)
  169. get("/stats", AdminAPIController, :stats)
  170. end
  171. scope "/api/pleroma/emoji", Pleroma.Web.PleromaAPI do
  172. scope "/packs" do
  173. # Modifying packs
  174. pipe_through(:admin_api)
  175. post("/import_from_fs", EmojiAPIController, :import_from_fs)
  176. post("/:pack_name/update_file", EmojiAPIController, :update_file)
  177. post("/:pack_name/update_metadata", EmojiAPIController, :update_metadata)
  178. put("/:name", EmojiAPIController, :create)
  179. delete("/:name", EmojiAPIController, :delete)
  180. post("/download_from", EmojiAPIController, :download_from)
  181. post("/list_from", EmojiAPIController, :list_from)
  182. end
  183. scope "/packs" do
  184. # Pack info / downloading
  185. get("/", EmojiAPIController, :list_packs)
  186. get("/:name/download_shared/", EmojiAPIController, :download_shared)
  187. end
  188. end
  189. scope "/", Pleroma.Web.TwitterAPI do
  190. pipe_through(:pleroma_html)
  191. post("/main/ostatus", UtilController, :remote_subscribe)
  192. get("/ostatus_subscribe", RemoteFollowController, :follow)
  193. post("/ostatus_subscribe", RemoteFollowController, :do_follow)
  194. end
  195. scope "/api/pleroma", Pleroma.Web.TwitterAPI do
  196. pipe_through(:authenticated_api)
  197. post("/change_email", UtilController, :change_email)
  198. post("/change_password", UtilController, :change_password)
  199. post("/delete_account", UtilController, :delete_account)
  200. put("/notification_settings", UtilController, :update_notificaton_settings)
  201. post("/disable_account", UtilController, :disable_account)
  202. post("/blocks_import", UtilController, :blocks_import)
  203. post("/follow_import", UtilController, :follow_import)
  204. end
  205. scope "/oauth", Pleroma.Web.OAuth do
  206. scope [] do
  207. pipe_through(:oauth)
  208. get("/authorize", OAuthController, :authorize)
  209. end
  210. post("/authorize", OAuthController, :create_authorization)
  211. post("/token", OAuthController, :token_exchange)
  212. post("/revoke", OAuthController, :token_revoke)
  213. get("/registration_details", OAuthController, :registration_details)
  214. scope [] do
  215. pipe_through(:browser)
  216. get("/prepare_request", OAuthController, :prepare_request)
  217. get("/:provider", OAuthController, :request)
  218. get("/:provider/callback", OAuthController, :callback)
  219. post("/register", OAuthController, :register)
  220. end
  221. end
  222. scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do
  223. pipe_through(:api)
  224. get("/statuses/:id/reactions/:emoji", PleromaAPIController, :emoji_reactions_by)
  225. get("/statuses/:id/reactions", PleromaAPIController, :emoji_reactions_by)
  226. end
  227. scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do
  228. scope [] do
  229. pipe_through(:authenticated_api)
  230. get("/conversations/:id/statuses", PleromaAPIController, :conversation_statuses)
  231. get("/conversations/:id", PleromaAPIController, :conversation)
  232. post("/conversations/read", PleromaAPIController, :read_conversations)
  233. end
  234. scope [] do
  235. pipe_through(:authenticated_api)
  236. patch("/conversations/:id", PleromaAPIController, :update_conversation)
  237. put("/statuses/:id/reactions/:emoji", PleromaAPIController, :react_with_emoji)
  238. delete("/statuses/:id/reactions/:emoji", PleromaAPIController, :unreact_with_emoji)
  239. post("/notifications/read", PleromaAPIController, :read_notification)
  240. patch("/accounts/update_avatar", AccountController, :update_avatar)
  241. patch("/accounts/update_banner", AccountController, :update_banner)
  242. patch("/accounts/update_background", AccountController, :update_background)
  243. get("/mascot", MascotController, :show)
  244. put("/mascot", MascotController, :update)
  245. post("/scrobble", ScrobbleController, :new_scrobble)
  246. end
  247. scope [] do
  248. pipe_through(:api)
  249. get("/accounts/:id/favourites", AccountController, :favourites)
  250. end
  251. scope [] do
  252. pipe_through(:authenticated_api)
  253. post("/accounts/:id/subscribe", AccountController, :subscribe)
  254. post("/accounts/:id/unsubscribe", AccountController, :unsubscribe)
  255. end
  256. post("/accounts/confirmation_resend", AccountController, :confirmation_resend)
  257. end
  258. scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do
  259. pipe_through(:api)
  260. get("/accounts/:id/scrobbles", ScrobbleController, :user_scrobbles)
  261. end
  262. scope "/api/v1", Pleroma.Web.MastodonAPI do
  263. pipe_through(:authenticated_api)
  264. get("/accounts/verify_credentials", AccountController, :verify_credentials)
  265. get("/accounts/relationships", AccountController, :relationships)
  266. get("/accounts/:id/lists", AccountController, :lists)
  267. get("/accounts/:id/identity_proofs", MastodonAPIController, :empty_array)
  268. get("/follow_requests", FollowRequestController, :index)
  269. get("/blocks", AccountController, :blocks)
  270. get("/mutes", AccountController, :mutes)
  271. get("/timelines/home", TimelineController, :home)
  272. get("/timelines/direct", TimelineController, :direct)
  273. get("/favourites", StatusController, :favourites)
  274. get("/bookmarks", StatusController, :bookmarks)
  275. get("/notifications", NotificationController, :index)
  276. get("/notifications/:id", NotificationController, :show)
  277. post("/notifications/clear", NotificationController, :clear)
  278. post("/notifications/dismiss", NotificationController, :dismiss)
  279. delete("/notifications/destroy_multiple", NotificationController, :destroy_multiple)
  280. get("/scheduled_statuses", ScheduledActivityController, :index)
  281. get("/scheduled_statuses/:id", ScheduledActivityController, :show)
  282. get("/lists", ListController, :index)
  283. get("/lists/:id", ListController, :show)
  284. get("/lists/:id/accounts", ListController, :list_accounts)
  285. get("/domain_blocks", DomainBlockController, :index)
  286. get("/filters", FilterController, :index)
  287. get("/suggestions", SuggestionController, :index)
  288. get("/conversations", ConversationController, :index)
  289. post("/conversations/:id/read", ConversationController, :read)
  290. get("/endorsements", AccountController, :endorsements)
  291. patch("/accounts/update_credentials", AccountController, :update_credentials)
  292. post("/statuses", StatusController, :create)
  293. delete("/statuses/:id", StatusController, :delete)
  294. post("/statuses/:id/reblog", StatusController, :reblog)
  295. post("/statuses/:id/unreblog", StatusController, :unreblog)
  296. post("/statuses/:id/favourite", StatusController, :favourite)
  297. post("/statuses/:id/unfavourite", StatusController, :unfavourite)
  298. post("/statuses/:id/pin", StatusController, :pin)
  299. post("/statuses/:id/unpin", StatusController, :unpin)
  300. post("/statuses/:id/bookmark", StatusController, :bookmark)
  301. post("/statuses/:id/unbookmark", StatusController, :unbookmark)
  302. post("/statuses/:id/mute", StatusController, :mute_conversation)
  303. post("/statuses/:id/unmute", StatusController, :unmute_conversation)
  304. put("/scheduled_statuses/:id", ScheduledActivityController, :update)
  305. delete("/scheduled_statuses/:id", ScheduledActivityController, :delete)
  306. post("/polls/:id/votes", PollController, :vote)
  307. post("/media", MediaController, :create)
  308. put("/media/:id", MediaController, :update)
  309. delete("/lists/:id", ListController, :delete)
  310. post("/lists", ListController, :create)
  311. put("/lists/:id", ListController, :update)
  312. post("/lists/:id/accounts", ListController, :add_to_list)
  313. delete("/lists/:id/accounts", ListController, :remove_from_list)
  314. post("/filters", FilterController, :create)
  315. get("/filters/:id", FilterController, :show)
  316. put("/filters/:id", FilterController, :update)
  317. delete("/filters/:id", FilterController, :delete)
  318. post("/reports", ReportController, :create)
  319. post("/follows", AccountController, :follows)
  320. post("/accounts/:id/follow", AccountController, :follow)
  321. post("/accounts/:id/unfollow", AccountController, :unfollow)
  322. post("/accounts/:id/block", AccountController, :block)
  323. post("/accounts/:id/unblock", AccountController, :unblock)
  324. post("/accounts/:id/mute", AccountController, :mute)
  325. post("/accounts/:id/unmute", AccountController, :unmute)
  326. post("/follow_requests/:id/authorize", FollowRequestController, :authorize)
  327. post("/follow_requests/:id/reject", FollowRequestController, :reject)
  328. post("/domain_blocks", DomainBlockController, :create)
  329. delete("/domain_blocks", DomainBlockController, :delete)
  330. post("/push/subscription", SubscriptionController, :create)
  331. get("/push/subscription", SubscriptionController, :get)
  332. put("/push/subscription", SubscriptionController, :update)
  333. delete("/push/subscription", SubscriptionController, :delete)
  334. get("/markers", MarkerController, :index)
  335. post("/markers", MarkerController, :upsert)
  336. end
  337. scope "/api/web", Pleroma.Web do
  338. pipe_through(:authenticated_api)
  339. put("/settings", MastoFEController, :put_settings)
  340. end
  341. scope "/api/v1", Pleroma.Web.MastodonAPI do
  342. pipe_through(:api)
  343. post("/accounts", AccountController, :create)
  344. get("/accounts/search", SearchController, :account_search)
  345. get("/instance", InstanceController, :show)
  346. get("/instance/peers", InstanceController, :peers)
  347. post("/apps", AppController, :create)
  348. get("/apps/verify_credentials", AppController, :verify_credentials)
  349. get("/statuses/:id/card", StatusController, :card)
  350. get("/statuses/:id/favourited_by", StatusController, :favourited_by)
  351. get("/statuses/:id/reblogged_by", StatusController, :reblogged_by)
  352. get("/custom_emojis", CustomEmojiController, :index)
  353. get("/trends", MastodonAPIController, :empty_array)
  354. get("/timelines/public", TimelineController, :public)
  355. get("/timelines/tag/:tag", TimelineController, :hashtag)
  356. get("/timelines/list/:list_id", TimelineController, :list)
  357. get("/statuses", StatusController, :index)
  358. get("/statuses/:id", StatusController, :show)
  359. get("/statuses/:id/context", StatusController, :context)
  360. get("/polls/:id", PollController, :show)
  361. get("/accounts/:id/statuses", AccountController, :statuses)
  362. get("/accounts/:id/followers", AccountController, :followers)
  363. get("/accounts/:id/following", AccountController, :following)
  364. get("/accounts/:id", AccountController, :show)
  365. get("/search", SearchController, :search)
  366. end
  367. scope "/api/v2", Pleroma.Web.MastodonAPI do
  368. pipe_through(:api)
  369. get("/search", SearchController, :search2)
  370. end
  371. scope "/api", Pleroma.Web do
  372. pipe_through(:config)
  373. get("/help/test", TwitterAPI.UtilController, :help_test)
  374. post("/help/test", TwitterAPI.UtilController, :help_test)
  375. get("/statusnet/config", TwitterAPI.UtilController, :config)
  376. get("/statusnet/version", TwitterAPI.UtilController, :version)
  377. get("/pleroma/frontend_configurations", TwitterAPI.UtilController, :frontend_configurations)
  378. end
  379. scope "/api", Pleroma.Web do
  380. pipe_through(:api)
  381. get(
  382. "/account/confirm_email/:user_id/:token",
  383. TwitterAPI.Controller,
  384. :confirm_email,
  385. as: :confirm_email
  386. )
  387. end
  388. scope "/api", Pleroma.Web, as: :authenticated_twitter_api do
  389. pipe_through(:authenticated_api)
  390. get("/oauth_tokens", TwitterAPI.Controller, :oauth_tokens)
  391. delete("/oauth_tokens/:id", TwitterAPI.Controller, :revoke_token)
  392. post("/qvitter/statuses/notifications/read", TwitterAPI.Controller, :notifications_read)
  393. end
  394. pipeline :ap_service_actor do
  395. plug(:accepts, ["activity+json", "json"])
  396. end
  397. pipeline :ostatus do
  398. plug(:accepts, ["html", "xml", "atom", "activity+json", "json"])
  399. plug(Pleroma.Plugs.StaticFEPlug)
  400. end
  401. pipeline :oembed do
  402. plug(:accepts, ["json", "xml"])
  403. end
  404. scope "/", Pleroma.Web do
  405. pipe_through(:ostatus)
  406. pipe_through(:http_signature)
  407. get("/objects/:uuid", OStatus.OStatusController, :object)
  408. get("/activities/:uuid", OStatus.OStatusController, :activity)
  409. get("/notice/:id", OStatus.OStatusController, :notice)
  410. get("/notice/:id/embed_player", OStatus.OStatusController, :notice_player)
  411. get("/users/:nickname/feed", Feed.UserController, :feed, as: :user_feed)
  412. get("/users/:nickname", Feed.UserController, :feed_redirect, as: :user_feed)
  413. get("/tags/:tag", Feed.TagController, :feed, as: :tag_feed)
  414. end
  415. scope "/", Pleroma.Web do
  416. pipe_through(:browser)
  417. get("/mailer/unsubscribe/:token", Mailer.SubscriptionController, :unsubscribe)
  418. end
  419. pipeline :activitypub do
  420. plug(:accepts, ["activity+json", "json"])
  421. plug(Pleroma.Web.Plugs.HTTPSignaturePlug)
  422. plug(Pleroma.Web.Plugs.MappedSignatureToIdentityPlug)
  423. end
  424. scope "/", Pleroma.Web.ActivityPub do
  425. # XXX: not really ostatus
  426. pipe_through(:ostatus)
  427. get("/users/:nickname/outbox", ActivityPubController, :outbox)
  428. end
  429. pipeline :activitypub_client do
  430. plug(:accepts, ["activity+json", "json"])
  431. plug(:fetch_session)
  432. plug(Pleroma.Plugs.OAuthPlug)
  433. plug(Pleroma.Plugs.BasicAuthDecoderPlug)
  434. plug(Pleroma.Plugs.UserFetcherPlug)
  435. plug(Pleroma.Plugs.SessionAuthenticationPlug)
  436. plug(Pleroma.Plugs.LegacyAuthenticationPlug)
  437. plug(Pleroma.Plugs.AuthenticationPlug)
  438. plug(Pleroma.Plugs.UserEnabledPlug)
  439. plug(Pleroma.Plugs.SetUserSessionIdPlug)
  440. plug(Pleroma.Plugs.EnsureUserKeyPlug)
  441. end
  442. scope "/", Pleroma.Web.ActivityPub do
  443. pipe_through([:activitypub_client])
  444. get("/api/ap/whoami", ActivityPubController, :whoami)
  445. get("/users/:nickname/inbox", ActivityPubController, :read_inbox)
  446. post("/users/:nickname/outbox", ActivityPubController, :update_outbox)
  447. post("/api/ap/upload_media", ActivityPubController, :upload_media)
  448. get("/users/:nickname/followers", ActivityPubController, :followers)
  449. get("/users/:nickname/following", ActivityPubController, :following)
  450. end
  451. scope "/", Pleroma.Web.ActivityPub do
  452. pipe_through(:activitypub)
  453. post("/inbox", ActivityPubController, :inbox)
  454. post("/users/:nickname/inbox", ActivityPubController, :inbox)
  455. end
  456. scope "/relay", Pleroma.Web.ActivityPub do
  457. pipe_through(:ap_service_actor)
  458. get("/", ActivityPubController, :relay)
  459. scope [] do
  460. pipe_through(:http_signature)
  461. post("/inbox", ActivityPubController, :inbox)
  462. end
  463. get("/following", ActivityPubController, :following, assigns: %{relay: true})
  464. get("/followers", ActivityPubController, :followers, assigns: %{relay: true})
  465. end
  466. scope "/internal/fetch", Pleroma.Web.ActivityPub do
  467. pipe_through(:ap_service_actor)
  468. get("/", ActivityPubController, :internal_fetch)
  469. post("/inbox", ActivityPubController, :inbox)
  470. end
  471. scope "/.well-known", Pleroma.Web do
  472. pipe_through(:well_known)
  473. get("/host-meta", WebFinger.WebFingerController, :host_meta)
  474. get("/webfinger", WebFinger.WebFingerController, :webfinger)
  475. get("/nodeinfo", Nodeinfo.NodeinfoController, :schemas)
  476. end
  477. scope "/nodeinfo", Pleroma.Web do
  478. get("/:version", Nodeinfo.NodeinfoController, :nodeinfo)
  479. end
  480. scope "/", Pleroma.Web do
  481. pipe_through(:api)
  482. get("/web/manifest.json", MastoFEController, :manifest)
  483. end
  484. scope "/", Pleroma.Web do
  485. pipe_through(:mastodon_html)
  486. get("/web/login", MastodonAPI.AuthController, :login)
  487. delete("/auth/sign_out", MastodonAPI.AuthController, :logout)
  488. post("/auth/password", MastodonAPI.AuthController, :password_reset)
  489. get("/web/*path", MastoFEController, :index)
  490. end
  491. pipeline :remote_media do
  492. end
  493. scope "/proxy/", Pleroma.Web.MediaProxy do
  494. pipe_through(:remote_media)
  495. get("/:sig/:url", MediaProxyController, :remote)
  496. get("/:sig/:url/:filename", MediaProxyController, :remote)
  497. end
  498. if Pleroma.Config.get(:env) == :dev do
  499. scope "/dev" do
  500. pipe_through([:mailbox_preview])
  501. forward("/mailbox", Plug.Swoosh.MailboxPreview, base_path: "/dev/mailbox")
  502. end
  503. end
  504. scope "/", Pleroma.Web.MongooseIM do
  505. get("/user_exists", MongooseIMController, :user_exists)
  506. get("/check_password", MongooseIMController, :check_password)
  507. end
  508. scope "/", Fallback do
  509. get("/registration/:token", RedirectController, :registration_page)
  510. get("/:maybe_nickname_or_id", RedirectController, :redirector_with_meta)
  511. get("/api*path", RedirectController, :api_not_implemented)
  512. get("/*path", RedirectController, :redirector)
  513. options("/*path", RedirectController, :empty)
  514. end
  515. end