X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Frouter.ex;h=2dadf974c74f09a1514fb5380fb6e0f740242bad;hb=b5de7c4c4d90d1049b59381953cbd76e79b77e66;hp=8835239c5f4b229ae5a9b38257f0505f76141e63;hpb=8aa639a450c94fc3fb8ea812b334892324ffd51a;p=akkoma diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 8835239c5..914cd6a6d 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -1,298 +1,474 @@ defmodule Pleroma.Web.Router do use Pleroma.Web, :router - alias Pleroma.{Repo, User, Web.Router} - - @instance Application.get_env(:pleroma, :instance) - @federating Keyword.get(@instance, :federating) - - def user_fetcher(username) do - {:ok, Repo.get_by(User, %{nickname: username})} - end - pipeline :api do - plug :accepts, ["json"] - plug :fetch_session - plug Pleroma.Plugs.OAuthPlug - plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1, optional: true} + 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.UserEnabledPlug) + plug(Pleroma.Plugs.SetUserSessionIdPlug) + plug(Pleroma.Plugs.EnsureUserKeyPlug) end pipeline :authenticated_api do - plug :accepts, ["json"] - plug :fetch_session - plug Pleroma.Plugs.OAuthPlug - plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1} + 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.UserEnabledPlug) + plug(Pleroma.Plugs.SetUserSessionIdPlug) + plug(Pleroma.Plugs.EnsureAuthenticatedPlug) + end + + 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.UserEnabledPlug) + plug(Pleroma.Plugs.SetUserSessionIdPlug) + plug(Pleroma.Plugs.EnsureAuthenticatedPlug) + plug(Pleroma.Plugs.UserIsAdminPlug) end pipeline :mastodon_html do - plug :accepts, ["html"] - plug :fetch_session - plug Pleroma.Plugs.OAuthPlug - plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1, optional: true} + plug(:accepts, ["html"]) + 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 pipeline :pleroma_html do - plug :accepts, ["html"] - plug :fetch_session - plug Pleroma.Plugs.OAuthPlug - plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1, optional: true} + plug(:accepts, ["html"]) + plug(:fetch_session) + plug(Pleroma.Plugs.OAuthPlug) + plug(Pleroma.Plugs.BasicAuthDecoderPlug) + plug(Pleroma.Plugs.UserFetcherPlug) + plug(Pleroma.Plugs.SessionAuthenticationPlug) + plug(Pleroma.Plugs.AuthenticationPlug) + plug(Pleroma.Plugs.EnsureUserKeyPlug) end pipeline :well_known do - plug :accepts, ["xml", "xrd+xml", "json", "jrd+json"] + plug(:accepts, ["json", "jrd+json", "xml", "xrd+xml"]) end pipeline :config do - plug :accepts, ["json", "xml"] + plug(:accepts, ["json", "xml"]) end pipeline :oauth do - plug :accepts, ["html", "json"] + plug(:accepts, ["html", "json"]) end pipeline :pleroma_api do - plug :accepts, ["html", "json"] + plug(:accepts, ["html", "json"]) end scope "/api/pleroma", Pleroma.Web.TwitterAPI do - pipe_through :pleroma_api - get "/password_reset/:token", UtilController, :show_password_reset - post "/password_reset", UtilController, :password_reset - get "/emoji", UtilController, :emoji + pipe_through(:pleroma_api) + get("/password_reset/:token", UtilController, :show_password_reset) + post("/password_reset", UtilController, :password_reset) + get("/emoji", UtilController, :emoji) + end + + scope "/api/pleroma/admin", Pleroma.Web.AdminAPI do + pipe_through(:admin_api) + delete("/user", AdminAPIController, :user_delete) + post("/user", AdminAPIController, :user_create) + put("/users/tag", AdminAPIController, :tag_users) + delete("/users/tag", AdminAPIController, :untag_users) + + 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) + + post("/relay", AdminAPIController, :relay_follow) + delete("/relay", AdminAPIController, :relay_unfollow) + + get("/invite_token", AdminAPIController, :get_invite_token) + get("/password_reset", AdminAPIController, :get_password_reset) end scope "/", Pleroma.Web.TwitterAPI do - pipe_through :pleroma_html - get "/ostatus_subscribe", UtilController, :remote_follow - post "/ostatus_subscribe", UtilController, :do_remote_follow - post "/main/ostatus", UtilController, :remote_subscribe + pipe_through(:pleroma_html) + get("/ostatus_subscribe", UtilController, :remote_follow) + post("/ostatus_subscribe", UtilController, :do_remote_follow) + post("/main/ostatus", UtilController, :remote_subscribe) end scope "/api/pleroma", Pleroma.Web.TwitterAPI do - pipe_through :authenticated_api - post "/follow_import", UtilController, :follow_import + pipe_through(:authenticated_api) + post("/follow_import", UtilController, :follow_import) + post("/change_password", UtilController, :change_password) + post("/delete_account", UtilController, :delete_account) end scope "/oauth", Pleroma.Web.OAuth do - get "/authorize", OAuthController, :authorize - post "/authorize", OAuthController, :create_authorization - post "/token", OAuthController, :token_exchange + 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 - pipe_through :authenticated_api + pipe_through(:authenticated_api) - patch "/accounts/update_credentials", MastodonAPIController, :update_credentials - get "/accounts/verify_credentials", MastodonAPIController, :verify_credentials - get "/accounts/relationships", MastodonAPIController, :relationships - get "/accounts/search", MastodonAPIController, :account_search - post "/accounts/:id/follow", MastodonAPIController, :follow - post "/accounts/:id/unfollow", MastodonAPIController, :unfollow - post "/accounts/:id/block", MastodonAPIController, :block - post "/accounts/:id/unblock", MastodonAPIController, :unblock - post "/accounts/:id/mute", MastodonAPIController, :relationship_noop - post "/accounts/:id/unmute", MastodonAPIController, :relationship_noop + patch("/accounts/update_credentials", MastodonAPIController, :update_credentials) + get("/accounts/verify_credentials", MastodonAPIController, :verify_credentials) + get("/accounts/relationships", MastodonAPIController, :relationships) + get("/accounts/search", MastodonAPIController, :account_search) + post("/accounts/:id/follow", MastodonAPIController, :follow) + post("/accounts/:id/unfollow", MastodonAPIController, :unfollow) + post("/accounts/:id/block", MastodonAPIController, :block) + post("/accounts/:id/unblock", MastodonAPIController, :unblock) + post("/accounts/:id/mute", MastodonAPIController, :relationship_noop) + post("/accounts/:id/unmute", MastodonAPIController, :relationship_noop) + get("/accounts/:id/lists", MastodonAPIController, :account_lists) - post "/follows", MastodonAPIController, :follow + get("/follow_requests", MastodonAPIController, :follow_requests) + post("/follow_requests/:id/authorize", MastodonAPIController, :authorize_follow_request) + post("/follow_requests/:id/reject", MastodonAPIController, :reject_follow_request) - get "/blocks", MastodonAPIController, :blocks + post("/follows", MastodonAPIController, :follow) - get "/domain_blocks", MastodonAPIController, :empty_array - get "/follow_requests", MastodonAPIController, :empty_array - get "/mutes", MastodonAPIController, :empty_array + get("/blocks", MastodonAPIController, :blocks) - get "/timelines/home", MastodonAPIController, :home_timeline + get("/mutes", MastodonAPIController, :empty_array) - get "/favourites", MastodonAPIController, :favourites + get("/timelines/home", MastodonAPIController, :home_timeline) - post "/statuses", MastodonAPIController, :post_status - delete "/statuses/:id", MastodonAPIController, :delete_status + get("/timelines/direct", MastodonAPIController, :dm_timeline) - post "/statuses/:id/reblog", MastodonAPIController, :reblog_status - post "/statuses/:id/favourite", MastodonAPIController, :fav_status - post "/statuses/:id/unfavourite", MastodonAPIController, :unfav_status + get("/favourites", MastodonAPIController, :favourites) - post "/notifications/clear", MastodonAPIController, :clear_notifications - post "/notifications/dismiss", MastodonAPIController, :dismiss_notification - get "/notifications", MastodonAPIController, :notifications - get "/notifications/:id", MastodonAPIController, :get_notification + post("/statuses", MastodonAPIController, :post_status) + delete("/statuses/:id", MastodonAPIController, :delete_status) - post "/media", MastodonAPIController, :upload - end + 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) - scope "/api/v1", Pleroma.Web.MastodonAPI do - pipe_through :api - get "/instance", MastodonAPIController, :masto_instance - get "/instance/peers", MastodonAPIController, :peers - post "/apps", MastodonAPIController, :create_app - get "/custom_emojis", MastodonAPIController, :custom_emojis + post("/notifications/clear", MastodonAPIController, :clear_notifications) + post("/notifications/dismiss", MastodonAPIController, :dismiss_notification) + get("/notifications", MastodonAPIController, :notifications) + get("/notifications/:id", MastodonAPIController, :get_notification) + + post("/media", MastodonAPIController, :upload) + put("/media/:id", MastodonAPIController, :update_media) + + get("/lists", MastodonAPIController, :get_lists) + get("/lists/:id", MastodonAPIController, :get_list) + delete("/lists/:id", MastodonAPIController, :delete_list) + post("/lists", MastodonAPIController, :create_list) + put("/lists/:id", MastodonAPIController, :rename_list) + get("/lists/:id/accounts", MastodonAPIController, :list_accounts) + post("/lists/:id/accounts", MastodonAPIController, :add_to_list) + delete("/lists/:id/accounts", MastodonAPIController, :remove_from_list) - get "/timelines/public", MastodonAPIController, :public_timeline - get "/timelines/tag/:tag", MastodonAPIController, :hashtag_timeline + get("/domain_blocks", MastodonAPIController, :domain_blocks) + post("/domain_blocks", MastodonAPIController, :block_domain) + delete("/domain_blocks", MastodonAPIController, :unblock_domain) - get "/statuses/:id", MastodonAPIController, :get_status - get "/statuses/:id/context", MastodonAPIController, :get_context - get "/statuses/:id/card", MastodonAPIController, :empty_object - get "/statuses/:id/favourited_by", MastodonAPIController, :favourited_by - get "/statuses/:id/reblogged_by", MastodonAPIController, :reblogged_by + get("/filters", MastodonAPIController, :get_filters) + post("/filters", MastodonAPIController, :create_filter) + get("/filters/:id", MastodonAPIController, :get_filter) + put("/filters/:id", MastodonAPIController, :update_filter) + delete("/filters/:id", MastodonAPIController, :delete_filter) - get "/accounts/:id/statuses", MastodonAPIController, :user_statuses - get "/accounts/:id/followers", MastodonAPIController, :followers - get "/accounts/:id/following", MastodonAPIController, :following - get "/accounts/:id", MastodonAPIController, :user + post("/push/subscription", MastodonAPIController, :create_push_subscription) + get("/push/subscription", MastodonAPIController, :get_push_subscription) + put("/push/subscription", MastodonAPIController, :update_push_subscription) + delete("/push/subscription", MastodonAPIController, :delete_push_subscription) - get "/search", MastodonAPIController, :search + get("/suggestions", MastodonAPIController, :suggestions) + + get("/endorsements", MastodonAPIController, :empty_array) end - scope "/api", Pleroma.Web do - pipe_through :config + scope "/api/web", Pleroma.Web.MastodonAPI do + pipe_through(:authenticated_api) + + put("/settings", MastodonAPIController, :put_settings) + end + + scope "/api/v1", Pleroma.Web.MastodonAPI do + pipe_through(:api) + get("/instance", MastodonAPIController, :masto_instance) + get("/instance/peers", MastodonAPIController, :peers) + post("/apps", MastodonAPIController, :create_app) + get("/custom_emojis", MastodonAPIController, :custom_emojis) + + 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("/statuses/:id/card", MastodonAPIController, :empty_object) + get("/statuses/:id/favourited_by", MastodonAPIController, :favourited_by) + get("/statuses/:id/reblogged_by", MastodonAPIController, :reblogged_by) + + 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("/trends", MastodonAPIController, :empty_array) + + get("/search", MastodonAPIController, :search) + end - 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 + scope "/api/v2", Pleroma.Web.MastodonAPI do + pipe_through(:api) + get("/search", MastodonAPIController, :search2) end - @instance Application.get_env(:pleroma, :instance) - @registrations_open Keyword.get(@instance, :registrations_open) + scope "/api", Pleroma.Web do + pipe_through(:config) + + 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) + end scope "/api", Pleroma.Web do - pipe_through :api + pipe_through(:api) - 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 - 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/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/show/:id", TwitterAPI.Controller, :fetch_status - get "/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation + get("/statuses/followers", TwitterAPI.Controller, :followers) + get("/statuses/friends", TwitterAPI.Controller, :friends) + get("/statuses/show/:id", TwitterAPI.Controller, :fetch_status) + get("/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation) - if @registrations_open do - post "/account/register", TwitterAPI.Controller, :register - end + post("/account/register", TwitterAPI.Controller, :register) - get "/search", TwitterAPI.Controller, :search - get "/statusnet/tags/timeline/:tag", TwitterAPI.Controller, :public_and_external_timeline + get("/search", TwitterAPI.Controller, :search) + get("/statusnet/tags/timeline/:tag", TwitterAPI.Controller, :public_and_external_timeline) end scope "/api", Pleroma.Web do - pipe_through :authenticated_api + pipe_through(:api) + + 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 - get "/account/verify_credentials", TwitterAPI.Controller, :verify_credentials - post "/account/verify_credentials", TwitterAPI.Controller, :verify_credentials + scope "/api", Pleroma.Web, as: :twitter_api_search do + pipe_through(:api) + get("/pleroma/search_user", TwitterAPI.Controller, :search_user) + end + + scope "/api", Pleroma.Web, as: :authenticated_twitter_api do + pipe_through(:authenticated_api) + + get("/account/verify_credentials", TwitterAPI.Controller, :verify_credentials) + post("/account/verify_credentials", TwitterAPI.Controller, :verify_credentials) + + 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) - 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 + 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) - post "/account/most_recent_notification", TwitterAPI.Controller, :update_most_recent_notification + # XXX: this is really a pleroma API, but we want to keep the pleroma namespace clean + # for now. + post("/qvitter/statuses/notifications/read", TwitterAPI.Controller, :notifications_read) - 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 + 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) - post "/statuses/update", TwitterAPI.Controller, :status_update - post "/statuses/retweet/:id", TwitterAPI.Controller, :retweet - post "/statuses/destroy/:id", TwitterAPI.Controller, :delete_post + get("/pleroma/friend_requests", TwitterAPI.Controller, :friend_requests) + 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 + post("/friendships/create", TwitterAPI.Controller, :follow) + post("/friendships/destroy", TwitterAPI.Controller, :unfollow) + post("/blocks/create", TwitterAPI.Controller, :block) + post("/blocks/destroy", TwitterAPI.Controller, :unblock) - post "/statusnet/media/upload", TwitterAPI.Controller, :upload - post "/media/upload", TwitterAPI.Controller, :upload_json + post("/statusnet/media/upload", TwitterAPI.Controller, :upload) + post("/media/upload", TwitterAPI.Controller, :upload_json) + post("/media/metadata/create", TwitterAPI.Controller, :update_media) - post "/favorites/create/:id", TwitterAPI.Controller, :favorite - post "/favorites/create", TwitterAPI.Controller, :favorite - post "/favorites/destroy/:id", TwitterAPI.Controller, :unfavorite + post("/favorites/create/:id", TwitterAPI.Controller, :favorite) + post("/favorites/create", TwitterAPI.Controller, :favorite) + post("/favorites/destroy/:id", TwitterAPI.Controller, :unfavorite) - post "/qvitter/update_avatar", TwitterAPI.Controller, :update_avatar + post("/qvitter/update_avatar", TwitterAPI.Controller, :update_avatar) - get "/friends/ids", TwitterAPI.Controller, :friends_ids - get "/friendships/no_retweets/ids", TwitterAPI.Controller, :empty_array + get("/friends/ids", TwitterAPI.Controller, :friends_ids) + get("/friendships/no_retweets/ids", TwitterAPI.Controller, :empty_array) - get "/mutes/users/ids", TwitterAPI.Controller, :empty_array + get("/mutes/users/ids", TwitterAPI.Controller, :empty_array) + get("/qvitter/mutes", TwitterAPI.Controller, :raw_empty_array) - get "/externalprofile/show", TwitterAPI.Controller, :external_profile + get("/externalprofile/show", TwitterAPI.Controller, :external_profile) + end + + pipeline :ap_relay do + plug(:accepts, ["activity+json"]) end pipeline :ostatus do - plug :accepts, ["xml", "atom", "html", "activity+json"] + plug(:accepts, ["html", "xml", "atom", "activity+json"]) end - scope "/", Pleroma.Web do - pipe_through :ostatus + pipeline :oembed do + plug(:accepts, ["json", "xml"]) + end - get "/objects/:uuid", OStatus.OStatusController, :object - get "/activities/:uuid", OStatus.OStatusController, :activity - get "/notice/:id", OStatus.OStatusController, :notice - get "/users/:nickname/feed", OStatus.OStatusController, :feed - get "/users/:nickname", OStatus.OStatusController, :feed_redirect + scope "/", Pleroma.Web do + pipe_through(:ostatus) + + get("/objects/:uuid", OStatus.OStatusController, :object) + get("/activities/:uuid", OStatus.OStatusController, :activity) + get("/notice/:id", OStatus.OStatusController, :notice) + get("/users/:nickname/feed", OStatus.OStatusController, :feed) + get("/users/:nickname", OStatus.OStatusController, :feed_redirect) + + 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) + end - if @federating do - 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 - end + scope "/", Pleroma.Web do + pipe_through(:oembed) + get("/oembed", OEmbed.OEmbedController, :url) end pipeline :activitypub do - plug :accepts, ["activity+json"] - plug Pleroma.Web.Plugs.HTTPSignaturePlug + plug(:accepts, ["activity+json"]) + plug(Pleroma.Web.Plugs.HTTPSignaturePlug) end - if @federating do - scope "/", Pleroma.Web.ActivityPub do - pipe_through :activitypub - post "/users/:nickname/inbox", ActivityPubController, :inbox - post "/inbox", ActivityPubController, :inbox - end + scope "/", Pleroma.Web.ActivityPub do + # XXX: not really ostatus + pipe_through(:ostatus) - scope "/.well-known", Pleroma.Web do - pipe_through :well_known + get("/users/:nickname/followers", ActivityPubController, :followers) + get("/users/:nickname/following", ActivityPubController, :following) + get("/users/:nickname/outbox", ActivityPubController, :outbox) + end - get "/host-meta", WebFinger.WebFingerController, :host_meta - get "/webfinger", WebFinger.WebFingerController, :webfinger - end + scope "/relay", Pleroma.Web.ActivityPub do + pipe_through(:ap_relay) + get("/", ActivityPubController, :relay) + end + + scope "/", Pleroma.Web.ActivityPub do + pipe_through(:activitypub) + post("/users/:nickname/inbox", ActivityPubController, :inbox) + post("/inbox", ActivityPubController, :inbox) + end + + scope "/.well-known", Pleroma.Web do + pipe_through(:well_known) + + get("/host-meta", WebFinger.WebFingerController, :host_meta) + get("/webfinger", WebFinger.WebFingerController, :webfinger) + get("/nodeinfo", Nodeinfo.NodeinfoController, :schemas) + end + + scope "/nodeinfo", Pleroma.Web do + get("/:version", Nodeinfo.NodeinfoController, :nodeinfo) end scope "/", Pleroma.Web.MastodonAPI do - pipe_through :mastodon_html + pipe_through(:mastodon_html) - get "/web/login", MastodonAPIController, :login - post "/web/login", MastodonAPIController, :login_post - get "/web/*path", MastodonAPIController, :index - delete "/auth/sign_out", MastodonAPIController, :logout + get("/web/login", MastodonAPIController, :login) + post("/web/login", MastodonAPIController, :login_post) + get("/web/*path", MastodonAPIController, :index) + delete("/auth/sign_out", MastodonAPIController, :logout) end pipeline :remote_media do - plug :accepts, ["html"] end + scope "/proxy/", Pleroma.Web.MediaProxy do - pipe_through :remote_media - get "/:sig/:url", MediaProxyController, :remote + pipe_through(:remote_media) + get("/:sig/:url", MediaProxyController, :remote) + get("/:sig/:url/:filename", MediaProxyController, :remote) end scope "/", Fallback do - get "/*path", RedirectController, :redirector + get("/registration/:token", RedirectController, :registration_page) + get("/*path", RedirectController, :redirector) + + options("/*path", RedirectController, :empty) end end defmodule Fallback.RedirectController do use Pleroma.Web, :controller + alias Pleroma.Web.Metadata + def redirector(conn, _params) do - if Mix.env != :test do - conn - |> put_resp_content_type("text/html") - |> send_file(200, "priv/static/index.html") - end + conn + |> put_resp_content_type("text/html") + |> send_file(200, Application.app_dir(:pleroma, "priv/static/index.html")) + end + + def redirector_with_meta(conn, params) do + {:ok, index_content} = File.read(Application.app_dir(:pleroma, "priv/static/index.html")) + tags = Metadata.build_tags(params) + response = String.replace(index_content, "", tags) + + conn + |> put_resp_content_type("text/html") + |> send_resp(200, response) + end + + def registration_page(conn, params) do + redirector(conn, params) + end + + def empty(conn, _params) do + conn + |> put_status(204) + |> text("") end end