pleroma/lib/pleroma/web/router.ex

677 lines
23 KiB
Elixir
Raw Normal View History

# Pleroma: A lightweight social networking server
2018-12-31 16:41:47 +01:00
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
2017-03-17 17:09:58 +01:00
defmodule Pleroma.Web.Router do
use Pleroma.Web, :router
pipeline :api do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["json"])
plug(:fetch_session)
plug(Pleroma.Plugs.OAuthPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.BasicAuthDecoderPlug)
plug(Pleroma.Plugs.UserFetcherPlug)
plug(Pleroma.Plugs.SessionAuthenticationPlug)
plug(Pleroma.Plugs.LegacyAuthenticationPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.AuthenticationPlug)
2018-09-05 21:57:56 +02:00
plug(Pleroma.Plugs.UserEnabledPlug)
plug(Pleroma.Plugs.SetUserSessionIdPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.EnsureUserKeyPlug)
2017-03-17 17:09:58 +01:00
end
pipeline :authenticated_api do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["json"])
plug(:fetch_session)
plug(Pleroma.Plugs.OAuthPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.BasicAuthDecoderPlug)
plug(Pleroma.Plugs.UserFetcherPlug)
plug(Pleroma.Plugs.SessionAuthenticationPlug)
plug(Pleroma.Plugs.LegacyAuthenticationPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.AuthenticationPlug)
2018-09-05 21:57:56 +02:00
plug(Pleroma.Plugs.UserEnabledPlug)
plug(Pleroma.Plugs.SetUserSessionIdPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.EnsureAuthenticatedPlug)
2017-03-21 21:09:20 +01:00
end
2018-10-02 18:38:16 +02:00
pipeline :admin_api do
plug(:accepts, ["json"])
plug(:fetch_session)
plug(Pleroma.Plugs.OAuthPlug)
plug(Pleroma.Plugs.BasicAuthDecoderPlug)
plug(Pleroma.Plugs.UserFetcherPlug)
plug(Pleroma.Plugs.SessionAuthenticationPlug)
plug(Pleroma.Plugs.LegacyAuthenticationPlug)
plug(Pleroma.Plugs.AuthenticationPlug)
plug(Pleroma.Plugs.AdminSecretAuthenticationPlug)
2018-10-02 18:38:16 +02:00
plug(Pleroma.Plugs.UserEnabledPlug)
plug(Pleroma.Plugs.SetUserSessionIdPlug)
plug(Pleroma.Plugs.EnsureAuthenticatedPlug)
plug(Pleroma.Plugs.UserIsAdminPlug)
end
2017-11-12 14:23:05 +01:00
pipeline :mastodon_html do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["html"])
plug(:fetch_session)
plug(Pleroma.Plugs.OAuthPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.BasicAuthDecoderPlug)
plug(Pleroma.Plugs.UserFetcherPlug)
plug(Pleroma.Plugs.SessionAuthenticationPlug)
plug(Pleroma.Plugs.LegacyAuthenticationPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.AuthenticationPlug)
2018-09-05 21:57:56 +02:00
plug(Pleroma.Plugs.UserEnabledPlug)
plug(Pleroma.Plugs.SetUserSessionIdPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.EnsureUserKeyPlug)
2017-11-12 14:23:05 +01:00
end
pipeline :pleroma_html do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["html"])
plug(:fetch_session)
plug(Pleroma.Plugs.OAuthPlug)
2018-09-05 19:13:53 +02:00
plug(Pleroma.Plugs.BasicAuthDecoderPlug)
plug(Pleroma.Plugs.UserFetcherPlug)
plug(Pleroma.Plugs.SessionAuthenticationPlug)
plug(Pleroma.Plugs.AuthenticationPlug)
plug(Pleroma.Plugs.EnsureUserKeyPlug)
end
pipeline :oauth_read_or_unauthenticated do
plug(Pleroma.Plugs.OAuthScopesPlug, %{
scopes: ["read"],
fallback: :proceed_unauthenticated
})
end
pipeline :oauth_read do
plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["read"]})
end
pipeline :oauth_write do
plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["write"]})
end
pipeline :oauth_follow do
plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["follow"]})
end
pipeline :oauth_push do
plug(Pleroma.Plugs.OAuthScopesPlug, %{scopes: ["push"]})
end
2017-04-17 13:44:41 +02:00
pipeline :well_known do
2018-06-15 22:01:17 +02:00
plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"])
2017-04-17 13:44:41 +02:00
end
2017-08-24 14:07:05 +02:00
pipeline :config do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["json", "xml"])
2017-08-24 14:07:05 +02:00
end
pipeline :oauth do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["html", "json"])
end
2017-10-19 21:51:56 +02:00
pipeline :pleroma_api do
2018-03-30 15:01:53 +02:00
plug(:accepts, ["html", "json"])
2017-10-19 17:37:24 +02:00
end
pipeline :mailbox_preview do
plug(:accepts, ["html"])
plug(:put_secure_browser_headers, %{
"content-security-policy" =>
"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' 'unsafe-eval'"
})
end
2017-10-19 17:37:24 +02:00
scope "/api/pleroma", Pleroma.Web.TwitterAPI do
2018-03-30 15:01:53 +02:00
pipe_through(:pleroma_api)
2018-03-30 15:01:53 +02:00
get("/password_reset/:token", UtilController, :show_password_reset)
post("/password_reset", UtilController, :password_reset)
get("/emoji", UtilController, :emoji)
get("/captcha", UtilController, :captcha)
2017-10-19 17:37:24 +02:00
end
2019-01-21 22:44:14 +01:00
scope "/api/pleroma", Pleroma.Web do
pipe_through(:pleroma_api)
post("/uploader_callback/:upload_path", UploaderController, :callback)
end
2018-10-02 18:38:16 +02:00
scope "/api/pleroma/admin", Pleroma.Web.AdminAPI do
pipe_through([:admin_api, :oauth_write])
2019-02-26 22:13:38 +01:00
get("/users", AdminAPIController, :list_users)
2018-10-02 18:38:16 +02:00
delete("/user", AdminAPIController, :user_delete)
2019-02-26 22:13:38 +01:00
patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation)
2018-10-02 18:38:16 +02:00
post("/user", AdminAPIController, :user_create)
put("/users/tag", AdminAPIController, :tag_users)
delete("/users/tag", AdminAPIController, :untag_users)
2018-10-02 18:38:16 +02:00
get("/permission_group/:nickname", AdminAPIController, :right_get)
get("/permission_group/:nickname/:permission_group", AdminAPIController, :right_get)
post("/permission_group/:nickname/:permission_group", AdminAPIController, :right_add)
delete("/permission_group/:nickname/:permission_group", AdminAPIController, :right_delete)
2018-10-02 18:38:16 +02:00
put("/activation_status/:nickname", AdminAPIController, :set_activation_status)
2018-10-02 18:38:16 +02:00
post("/relay", AdminAPIController, :relay_follow)
delete("/relay", AdminAPIController, :relay_unfollow)
get("/invite_token", AdminAPIController, :get_invite_token)
post("/email_invite", AdminAPIController, :email_invite)
2018-10-02 18:38:16 +02:00
get("/password_reset", AdminAPIController, :get_password_reset)
end
scope "/", Pleroma.Web.TwitterAPI do
2018-03-30 15:01:53 +02:00
pipe_through(:pleroma_html)
2018-03-30 15:01:53 +02:00
post("/main/ostatus", UtilController, :remote_subscribe)
get("/ostatus_subscribe", UtilController, :remote_follow)
scope [] do
pipe_through(:oauth_follow)
post("/ostatus_subscribe", UtilController, :do_remote_follow)
end
end
2017-12-12 17:35:23 +01:00
scope "/api/pleroma", Pleroma.Web.TwitterAPI do
2018-03-30 15:01:53 +02:00
pipe_through(:authenticated_api)
scope [] do
pipe_through(:oauth_write)
post("/change_password", UtilController, :change_password)
post("/delete_account", UtilController, :delete_account)
end
scope [] do
pipe_through(:oauth_follow)
post("/blocks_import", UtilController, :blocks_import)
post("/follow_import", UtilController, :follow_import)
end
2017-12-12 17:35:23 +01:00
end
scope "/oauth", Pleroma.Web.OAuth do
2018-03-30 15:01:53 +02:00
get("/authorize", OAuthController, :authorize)
post("/authorize", OAuthController, :create_authorization)
post("/token", OAuthController, :token_exchange)
post("/revoke", OAuthController, :token_revoke)
end
scope "/api/v1", Pleroma.Web.MastodonAPI do
2018-03-30 15:01:53 +02:00
pipe_through(:authenticated_api)
scope [] do
pipe_through(:oauth_read)
2018-05-26 18:03:32 +02:00
get("/accounts/verify_credentials", MastodonAPIController, :verify_credentials)
get("/accounts/relationships", MastodonAPIController, :relationships)
get("/accounts/search", MastodonAPIController, :account_search)
2017-10-25 20:02:42 +02:00
get("/accounts/:id/lists", MastodonAPIController, :account_lists)
2017-11-03 08:51:17 +01:00
get("/follow_requests", MastodonAPIController, :follow_requests)
get("/blocks", MastodonAPIController, :blocks)
2019-02-20 14:48:59 +01:00
get("/mutes", MastodonAPIController, :mutes)
2017-09-13 15:55:10 +02:00
get("/timelines/home", MastodonAPIController, :home_timeline)
get("/timelines/direct", MastodonAPIController, :dm_timeline)
2017-09-09 13:15:01 +02:00
get("/favourites", MastodonAPIController, :favourites)
get("/bookmarks", MastodonAPIController, :bookmarks)
2018-05-11 04:17:33 +02:00
post("/notifications/clear", MastodonAPIController, :clear_notifications)
post("/notifications/dismiss", MastodonAPIController, :dismiss_notification)
get("/notifications", MastodonAPIController, :notifications)
get("/notifications/:id", MastodonAPIController, :get_notification)
get("/lists", MastodonAPIController, :get_lists)
get("/lists/:id", MastodonAPIController, :get_list)
get("/lists/:id/accounts", MastodonAPIController, :list_accounts)
2017-09-09 17:48:57 +02:00
get("/domain_blocks", MastodonAPIController, :domain_blocks)
get("/filters", MastodonAPIController, :get_filters)
2017-09-14 08:08:32 +02:00
get("/suggestions", MastodonAPIController, :suggestions)
2018-04-29 15:02:46 +02:00
get("/endorsements", MastodonAPIController, :empty_array)
2018-05-11 04:17:33 +02:00
2019-02-19 17:10:55 +01:00
get("/pleroma/flavour", MastodonAPIController, :get_flavour)
end
2017-09-14 18:30:05 +02:00
scope [] do
pipe_through(:oauth_write)
2018-05-26 18:03:32 +02:00
patch("/accounts/update_credentials", MastodonAPIController, :update_credentials)
2017-10-25 20:02:42 +02:00
post("/statuses", MastodonAPIController, :post_status)
delete("/statuses/:id", MastodonAPIController, :delete_status)
2017-11-03 08:51:17 +01:00
2019-02-17 12:07:35 +01:00
post("/statuses/:id/reblog", MastodonAPIController, :reblog_status)
post("/statuses/:id/unreblog", MastodonAPIController, :unreblog_status)
post("/statuses/:id/favourite", MastodonAPIController, :fav_status)
post("/statuses/:id/unfavourite", MastodonAPIController, :unfav_status)
post("/statuses/:id/pin", MastodonAPIController, :pin_status)
post("/statuses/:id/unpin", MastodonAPIController, :unpin_status)
post("/statuses/:id/bookmark", MastodonAPIController, :bookmark_status)
post("/statuses/:id/unbookmark", MastodonAPIController, :unbookmark_status)
post("/statuses/:id/mute", MastodonAPIController, :mute_conversation)
post("/statuses/:id/unmute", MastodonAPIController, :unmute_conversation)
2017-09-13 15:55:10 +02:00
post("/media", MastodonAPIController, :upload)
put("/media/:id", MastodonAPIController, :update_media)
2017-09-09 13:15:01 +02:00
delete("/lists/:id", MastodonAPIController, :delete_list)
post("/lists", MastodonAPIController, :create_list)
put("/lists/:id", MastodonAPIController, :rename_list)
2018-05-11 04:17:33 +02:00
post("/lists/:id/accounts", MastodonAPIController, :add_to_list)
delete("/lists/:id/accounts", MastodonAPIController, :remove_from_list)
post("/filters", MastodonAPIController, :create_filter)
get("/filters/:id", MastodonAPIController, :get_filter)
put("/filters/:id", MastodonAPIController, :update_filter)
delete("/filters/:id", MastodonAPIController, :delete_filter)
2017-09-09 17:48:57 +02:00
2019-02-19 17:10:55 +01:00
post("/pleroma/flavour/:flavour", MastodonAPIController, :set_flavour)
2019-02-20 17:51:25 +01:00
post("/reports", MastodonAPIController, :reports)
end
2017-09-14 08:08:32 +02:00
scope [] do
pipe_through(:oauth_follow)
2018-04-29 15:02:46 +02:00
post("/follows", MastodonAPIController, :follow)
post("/accounts/:id/follow", MastodonAPIController, :follow)
2018-06-03 21:21:23 +02:00
post("/accounts/:id/unfollow", MastodonAPIController, :unfollow)
post("/accounts/:id/block", MastodonAPIController, :block)
post("/accounts/:id/unblock", MastodonAPIController, :unblock)
2019-02-20 14:48:59 +01:00
post("/accounts/:id/mute", MastodonAPIController, :mute)
post("/accounts/:id/unmute", MastodonAPIController, :unmute)
2018-07-13 17:21:38 +02:00
post("/follow_requests/:id/authorize", MastodonAPIController, :authorize_follow_request)
post("/follow_requests/:id/reject", MastodonAPIController, :reject_follow_request)
2018-08-14 04:27:28 +02:00
post("/domain_blocks", MastodonAPIController, :block_domain)
delete("/domain_blocks", MastodonAPIController, :unblock_domain)
end
scope [] do
pipe_through(:oauth_push)
2019-03-06 14:20:12 +01:00
post("/push/subscription", SubscriptionController, :create)
get("/push/subscription", SubscriptionController, :get)
put("/push/subscription", SubscriptionController, :update)
delete("/push/subscription", SubscriptionController, :delete)
end
2017-08-24 14:15:16 +02:00
end
scope "/api/web", Pleroma.Web.MastodonAPI do
pipe_through([:authenticated_api, :oauth_write])
put("/settings", MastodonAPIController, :put_settings)
end
2017-09-13 17:36:02 +02:00
scope "/api/v1", Pleroma.Web.MastodonAPI do
2018-03-30 15:01:53 +02:00
pipe_through(:api)
2018-03-30 15:01:53 +02:00
get("/instance", MastodonAPIController, :masto_instance)
get("/instance/peers", MastodonAPIController, :peers)
post("/apps", MastodonAPIController, :create_app)
get("/custom_emojis", MastodonAPIController, :custom_emojis)
get("/statuses/:id/card", MastodonAPIController, :status_card)
2018-03-30 15:01:53 +02:00
get("/statuses/:id/favourited_by", MastodonAPIController, :favourited_by)
get("/statuses/:id/reblogged_by", MastodonAPIController, :reblogged_by)
2018-06-04 17:44:08 +02:00
get("/trends", MastodonAPIController, :empty_array)
scope [] do
pipe_through(:oauth_read_or_unauthenticated)
get("/timelines/public", MastodonAPIController, :public_timeline)
get("/timelines/tag/:tag", MastodonAPIController, :hashtag_timeline)
get("/timelines/list/:list_id", MastodonAPIController, :list_timeline)
get("/statuses/:id", MastodonAPIController, :get_status)
get("/statuses/:id/context", MastodonAPIController, :get_context)
get("/accounts/:id/statuses", MastodonAPIController, :user_statuses)
get("/accounts/:id/followers", MastodonAPIController, :followers)
get("/accounts/:id/following", MastodonAPIController, :following)
get("/accounts/:id", MastodonAPIController, :user)
get("/search", MastodonAPIController, :search)
end
2017-09-13 17:36:02 +02:00
end
scope "/api/v2", Pleroma.Web.MastodonAPI do
pipe_through([:api, :oauth_read_or_unauthenticated])
get("/search", MastodonAPIController, :search2)
end
2017-03-21 21:09:20 +01:00
scope "/api", Pleroma.Web do
2018-03-30 15:01:53 +02:00
pipe_through(:config)
2017-04-10 15:00:57 +02:00
2018-03-30 15:01:53 +02:00
get("/help/test", TwitterAPI.UtilController, :help_test)
post("/help/test", TwitterAPI.UtilController, :help_test)
get("/statusnet/config", TwitterAPI.UtilController, :config)
get("/statusnet/version", TwitterAPI.UtilController, :version)
2019-01-23 12:40:57 +01:00
get("/pleroma/frontend_configurations", TwitterAPI.UtilController, :frontend_configurations)
2017-08-24 14:07:05 +02:00
end
scope "/api", Pleroma.Web do
2018-03-30 15:01:53 +02:00
pipe_through(:api)
2017-04-20 12:53:53 +02:00
2018-06-12 13:52:54 +02:00
post("/account/register", TwitterAPI.Controller, :register)
post("/account/password_reset", TwitterAPI.Controller, :password_reset)
2017-05-10 18:44:57 +02:00
post("/account/resend_confirmation_email", TwitterAPI.Controller, :resend_confirmation_email)
get(
"/account/confirm_email/:user_id/:token",
TwitterAPI.Controller,
:confirm_email,
as: :confirm_email
)
2017-05-10 18:44:57 +02:00
scope [] do
pipe_through(:oauth_read_or_unauthenticated)
get("/statuses/user_timeline", TwitterAPI.Controller, :user_timeline)
get("/qvitter/statuses/user_timeline", TwitterAPI.Controller, :user_timeline)
get("/users/show", TwitterAPI.Controller, :show_user)
get("/statuses/followers", TwitterAPI.Controller, :followers)
get("/statuses/friends", TwitterAPI.Controller, :friends)
get("/statuses/blocks", TwitterAPI.Controller, :blocks)
get("/statuses/show/:id", TwitterAPI.Controller, :fetch_status)
get("/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation)
get("/search", TwitterAPI.Controller, :search)
get("/statusnet/tags/timeline/:tag", TwitterAPI.Controller, :public_and_external_timeline)
end
end
scope "/api", Pleroma.Web do
pipe_through([:api, :oauth_read_or_unauthenticated])
get("/statuses/public_timeline", TwitterAPI.Controller, :public_timeline)
get(
"/statuses/public_and_external_timeline",
TwitterAPI.Controller,
:public_and_external_timeline
)
get("/statuses/networkpublic_timeline", TwitterAPI.Controller, :public_and_external_timeline)
end
scope "/api", Pleroma.Web, as: :twitter_api_search do
pipe_through([:api, :oauth_read_or_unauthenticated])
get("/pleroma/search_user", TwitterAPI.Controller, :search_user)
end
scope "/api", Pleroma.Web, as: :authenticated_twitter_api do
2018-03-30 15:01:53 +02:00
pipe_through(:authenticated_api)
2019-02-19 17:10:55 +01:00
get("/oauth_tokens", TwitterAPI.Controller, :oauth_tokens)
delete("/oauth_tokens/:id", TwitterAPI.Controller, :revoke_token)
2017-04-20 12:53:53 +02:00
scope [] do
pipe_through(:oauth_read)
2017-04-20 12:53:53 +02:00
get("/account/verify_credentials", TwitterAPI.Controller, :verify_credentials)
post("/account/verify_credentials", TwitterAPI.Controller, :verify_credentials)
2017-08-29 15:14:00 +02:00
get("/statuses/home_timeline", TwitterAPI.Controller, :friends_timeline)
get("/statuses/friends_timeline", TwitterAPI.Controller, :friends_timeline)
get("/statuses/mentions", TwitterAPI.Controller, :mentions_timeline)
get("/statuses/mentions_timeline", TwitterAPI.Controller, :mentions_timeline)
get("/statuses/dm_timeline", TwitterAPI.Controller, :dm_timeline)
get("/qvitter/statuses/notifications", TwitterAPI.Controller, :notifications)
2017-04-20 12:53:53 +02:00
get("/pleroma/friend_requests", TwitterAPI.Controller, :friend_requests)
get("/friends/ids", TwitterAPI.Controller, :friends_ids)
get("/friendships/no_retweets/ids", TwitterAPI.Controller, :empty_array)
2017-04-20 12:53:53 +02:00
get("/mutes/users/ids", TwitterAPI.Controller, :empty_array)
get("/qvitter/mutes", TwitterAPI.Controller, :raw_empty_array)
get("/externalprofile/show", TwitterAPI.Controller, :external_profile)
post("/qvitter/statuses/notifications/read", TwitterAPI.Controller, :notifications_read)
end
2017-04-20 12:53:53 +02:00
scope [] do
pipe_through(:oauth_write)
post("/account/update_profile", TwitterAPI.Controller, :update_profile)
post("/account/update_profile_banner", TwitterAPI.Controller, :update_banner)
post("/qvitter/update_background_image", TwitterAPI.Controller, :update_background)
2017-04-20 12:53:53 +02:00
post("/statuses/update", TwitterAPI.Controller, :status_update)
post("/statuses/retweet/:id", TwitterAPI.Controller, :retweet)
post("/statuses/unretweet/:id", TwitterAPI.Controller, :unretweet)
post("/statuses/destroy/:id", TwitterAPI.Controller, :delete_post)
2017-04-20 12:53:53 +02:00
post("/statuses/pin/:id", TwitterAPI.Controller, :pin)
post("/statuses/unpin/:id", TwitterAPI.Controller, :unpin)
2017-04-20 12:53:53 +02:00
post("/statusnet/media/upload", TwitterAPI.Controller, :upload)
post("/media/upload", TwitterAPI.Controller, :upload_json)
post("/media/metadata/create", TwitterAPI.Controller, :update_media)
2017-07-20 20:29:15 +02:00
post("/favorites/create/:id", TwitterAPI.Controller, :favorite)
post("/favorites/create", TwitterAPI.Controller, :favorite)
post("/favorites/destroy/:id", TwitterAPI.Controller, :unfavorite)
2017-04-20 12:53:53 +02:00
post("/qvitter/update_avatar", TwitterAPI.Controller, :update_avatar)
end
scope [] do
pipe_through(:oauth_follow)
post("/pleroma/friendships/approve", TwitterAPI.Controller, :approve_friend_request)
post("/pleroma/friendships/deny", TwitterAPI.Controller, :deny_friend_request)
post("/friendships/create", TwitterAPI.Controller, :follow)
post("/friendships/destroy", TwitterAPI.Controller, :unfollow)
post("/blocks/create", TwitterAPI.Controller, :block)
post("/blocks/destroy", TwitterAPI.Controller, :unblock)
end
2017-03-17 17:09:58 +01:00
end
2017-04-17 13:44:41 +02:00
pipeline :ap_relay do
plug(:accepts, ["activity+json", "json"])
end
2017-04-18 18:41:51 +02:00
pipeline :ostatus do
plug(:accepts, ["html", "xml", "atom", "activity+json", "json"])
2017-04-18 18:41:51 +02:00
end
pipeline :oembed do
plug(:accepts, ["json", "xml"])
2017-04-18 18:41:51 +02:00
end
2017-04-20 10:16:06 +02:00
scope "/", Pleroma.Web do
2018-03-30 15:01:53 +02:00
pipe_through(:ostatus)
2017-04-18 18:41:51 +02:00
2018-03-30 15:01:53 +02:00
get("/objects/:uuid", OStatus.OStatusController, :object)
get("/activities/:uuid", OStatus.OStatusController, :activity)
get("/notice/:id", OStatus.OStatusController, :notice)
get("/notice/:id/embed_player", OStatus.OStatusController, :notice_player)
2018-03-30 15:01:53 +02:00
get("/users/:nickname/feed", OStatus.OStatusController, :feed)
get("/users/:nickname", OStatus.OStatusController, :feed_redirect)
2018-03-05 09:26:24 +01:00
2018-11-05 15:19:03 +01:00
post("/users/:nickname/salmon", OStatus.OStatusController, :salmon_incoming)
post("/push/hub/:nickname", Websub.WebsubController, :websub_subscription_request)
get("/push/subscriptions/:id", Websub.WebsubController, :websub_subscription_confirmation)
post("/push/subscriptions/:id", Websub.WebsubController, :websub_incoming)
2017-04-18 18:41:51 +02:00
end
scope "/", Pleroma.Web do
pipe_through(:oembed)
get("/oembed", OEmbed.OEmbedController, :url)
end
2017-12-11 10:37:22 +01:00
pipeline :activitypub do
plug(:accepts, ["activity+json", "json"])
2018-03-30 15:01:53 +02:00
plug(Pleroma.Web.Plugs.HTTPSignaturePlug)
2017-12-11 10:37:22 +01:00
end
scope "/", Pleroma.Web.ActivityPub do
# XXX: not really ostatus
2018-03-30 15:01:53 +02:00
pipe_through(:ostatus)
2018-03-30 15:01:53 +02:00
get("/users/:nickname/followers", ActivityPubController, :followers)
get("/users/:nickname/following", ActivityPubController, :following)
Refactor pinned posts to use objects instead of activities. Despacito lyrics in the description don't open Ay Fonsi DY Oh Oh no, oh no Oh yeah Diridiri, dirididi Daddy Go Sí, sabes que ya llevo un rato mirándote Tengo que bailar contigo hoy (DY) Vi que tu mirada ya estaba llamándome Muéstrame el camino que yo voy (Oh) Tú, tú eres el imán y yo soy el metal Me voy acercando y voy armando el plan Solo con pensarlo se acelera el pulso (Oh yeah) Ya, ya me está gustando más de lo normal Todos mis sentidos van pidiendo más Esto hay que tomarlo sin ningún apuro Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido (Diridiri, dirididi Daddy) Si te pido un beso ven dámelo Yo sé que estás pensándolo Llevo tiempo intentándolo Mami, esto es dando y dándolo Sabes que tu corazón conmigo te hace bom, bom Sabes que esa beba está buscando de mi bom, bom Ven prueba de mi boca para ver cómo te sabe Quiero, quiero, quiero ver cuánto amor a ti te cabe Yo no tengo prisa, yo me quiero dar el viaje Empecemos lento, después salvaje Pasito a pasito, suave suavecito Nos vamos pegando poquito a poquito Cuando tú me besas con esa destreza Veo que eres malicia con delicadeza Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Y es que esa belleza es un rompecabezas Pero pa montarlo aquí tengo la pieza Despacito Quiero respirar tu cuello despacito Deja que te diga cosas al oído Para que te acuerdes si no estás conmigo Despacito Quiero desnudarte a besos despacito Firmo en las paredes de tu laberinto Y hacer de tu cuerpo todo un manuscrito (sube, sube, sube) (Sube, sube) Quiero ver bailar tu pelo Quiero ser tu ritmo Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Déjame sobrepasar tus zonas de peligro Hasta provocar tus gritos Y que olvides tu apellido Despacito Vamos a hacerlo en una playa en Puerto Rico Hasta que las olas griten "¡ay, bendito!" Para que mi sello se quede contigo Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Que le enseñes a mi boca Tus lugares favoritos (favoritos, favoritos baby) Pasito a pasito, suave suavecito Nos vamos pegando, poquito a poquito Hasta provocar tus gritos Y que olvides tu apellido (DY) Despacito
2019-01-26 16:29:43 +01:00
get("/users/:nickname/collections/featured", ActivityPubController, :pinned)
2018-03-30 15:01:53 +02:00
get("/users/:nickname/outbox", ActivityPubController, :outbox)
get("/objects/:uuid/likes", ActivityPubController, :object_likes)
end
pipeline :activitypub_client do
plug(:accepts, ["activity+json", "json"])
plug(:fetch_session)
plug(Pleroma.Plugs.OAuthPlug)
plug(Pleroma.Plugs.BasicAuthDecoderPlug)
plug(Pleroma.Plugs.UserFetcherPlug)
plug(Pleroma.Plugs.SessionAuthenticationPlug)
plug(Pleroma.Plugs.LegacyAuthenticationPlug)
plug(Pleroma.Plugs.AuthenticationPlug)
plug(Pleroma.Plugs.UserEnabledPlug)
plug(Pleroma.Plugs.SetUserSessionIdPlug)
plug(Pleroma.Plugs.EnsureUserKeyPlug)
end
scope "/", Pleroma.Web.ActivityPub do
pipe_through([:activitypub_client])
scope [] do
pipe_through(:oauth_read)
get("/api/ap/whoami", ActivityPubController, :whoami)
get("/users/:nickname/inbox", ActivityPubController, :read_inbox)
end
scope [] do
pipe_through(:oauth_write)
post("/users/:nickname/outbox", ActivityPubController, :update_outbox)
end
end
2018-11-05 15:19:03 +01:00
scope "/relay", Pleroma.Web.ActivityPub do
pipe_through(:ap_relay)
get("/", ActivityPubController, :relay)
end
2018-11-05 15:19:03 +01:00
scope "/", Pleroma.Web.ActivityPub do
pipe_through(:activitypub)
post("/inbox", ActivityPubController, :inbox)
post("/users/:nickname/inbox", ActivityPubController, :inbox)
2018-11-05 15:19:03 +01:00
end
2017-12-11 10:37:22 +01:00
2018-11-05 15:19:03 +01:00
scope "/.well-known", Pleroma.Web do
pipe_through(:well_known)
2017-04-17 13:44:41 +02:00
2018-11-05 15:19:03 +01:00
get("/host-meta", WebFinger.WebFingerController, :host_meta)
get("/webfinger", WebFinger.WebFingerController, :webfinger)
get("/nodeinfo", Nodeinfo.NodeinfoController, :schemas)
end
2018-05-02 21:31:42 +02:00
2018-11-05 15:19:03 +01:00
scope "/nodeinfo", Pleroma.Web do
get("/:version", Nodeinfo.NodeinfoController, :nodeinfo)
2017-04-17 13:44:41 +02:00
end
2017-04-19 15:25:18 +02:00
2017-11-19 13:23:16 +01:00
scope "/", Pleroma.Web.MastodonAPI do
2018-03-30 15:01:53 +02:00
pipe_through(:mastodon_html)
2017-11-12 14:23:05 +01:00
2018-03-30 15:01:53 +02:00
get("/web/login", MastodonAPIController, :login)
delete("/auth/sign_out", MastodonAPIController, :logout)
scope [] do
pipe_through(:oauth_read_or_unauthenticated)
get("/web/*path", MastodonAPIController, :index)
end
2017-11-12 14:23:05 +01:00
end
2017-11-22 19:06:07 +01:00
pipeline :remote_media do
end
2018-03-30 15:01:53 +02:00
2017-11-22 19:06:07 +01:00
scope "/proxy/", Pleroma.Web.MediaProxy do
2018-03-30 15:01:53 +02:00
pipe_through(:remote_media)
2018-03-30 15:01:53 +02:00
get("/:sig/:url", MediaProxyController, :remote)
get("/:sig/:url/:filename", MediaProxyController, :remote)
2017-11-22 19:06:07 +01:00
end
if Mix.env() == :dev do
scope "/dev" do
pipe_through([:mailbox_preview])
forward("/mailbox", Plug.Swoosh.MailboxPreview, base_path: "/dev/mailbox")
end
end
2017-04-19 15:25:18 +02:00
scope "/", Fallback do
2018-06-17 13:30:07 +02:00
get("/registration/:token", RedirectController, :registration_page)
get("/:maybe_nickname_or_id", RedirectController, :redirector_with_meta)
2018-03-30 15:01:53 +02:00
get("/*path", RedirectController, :redirector)
2018-09-17 12:21:01 +02:00
options("/*path", RedirectController, :empty)
2017-04-19 15:25:18 +02:00
end
end
defmodule Fallback.RedirectController do
use Pleroma.Web, :controller
alias Pleroma.Web.Metadata
alias Pleroma.User
2018-03-30 15:01:53 +02:00
def redirector(conn, _params, code \\ 200) do
2018-11-16 21:35:08 +01:00
conn
|> put_resp_content_type("text/html")
|> send_file(code, index_file_path())
2017-08-22 14:22:36 +02:00
end
2018-06-17 13:30:07 +02:00
def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id} = params) do
with %User{} = user <- User.get_cached_by_nickname_or_id(maybe_nickname_or_id) do
redirector_with_meta(conn, %{user: user})
else
nil ->
redirector(conn, params)
end
end
def redirector_with_meta(conn, params) do
{:ok, index_content} = File.read(index_file_path())
tags = Metadata.build_tags(params)
response = String.replace(index_content, "<!--server-generated-meta-->", tags)
conn
|> put_resp_content_type("text/html")
|> send_resp(200, response)
end
def index_file_path do
2018-12-19 20:06:10 +01:00
Pleroma.Plugs.InstanceStatic.file_path("index.html")
2017-08-22 14:22:36 +02:00
end
2018-06-17 13:30:07 +02:00
def registration_page(conn, params) do
redirector(conn, params)
end
2018-09-17 12:21:01 +02:00
def empty(conn, _params) do
conn
|> put_status(204)
|> text("")
end
2017-03-17 17:09:58 +01:00
end