aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/router.ex
blob: ab849aef56ebc59924cd97766ade360bb340d8f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
defmodule Pleroma.Web.Router do
  use Pleroma.Web, :router

  alias Pleroma.{Repo, User, Web.Router}

  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.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1, optional: true}
  end

  pipeline :authenticated_api do
    plug :accepts, ["json"]
    plug :fetch_session
    plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Router.user_fetcher/1}
  end

  pipeline :well_known do
    plug :accepts, ["xml", "xrd+xml"]
  end

  pipeline :config do
    plug :accepts, ["json", "xml"]
  end

  pipeline :masto_config do
    plug :accepts, ["json"]
  end

  scope "/api/v1", Pleroma.Web do
    pipe_through :masto_config
    # TODO: Move this
    get "/instance", TwitterAPI.UtilController, :masto_instance
  end

  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

    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 "/statuses/show/:id", TwitterAPI.Controller, :fetch_status
    get "/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation

    post "/account/register", TwitterAPI.Controller, :register

    get "/externalprofile/show", TwitterAPI.Controller, :external_profile
  end

  scope "/api", Pleroma.Web 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/most_recent_notification", TwitterAPI.Controller, :update_most_recent_notification

    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 "/friendships/create", TwitterAPI.Controller, :follow
    post "/friendships/destroy", TwitterAPI.Controller, :unfollow

    post "/statusnet/media/upload", TwitterAPI.Controller, :upload
    post "/media/upload", TwitterAPI.Controller, :upload_json

    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

    get "/statuses/followers", TwitterAPI.Controller, :followers
    get "/statuses/friends", TwitterAPI.Controller, :friends
  end

  pipeline :ostatus do
    plug :accepts, ["xml", "atom", "html"]
  end

  scope "/", Pleroma.Web do
    pipe_through :ostatus

    get "/objects/:uuid", OStatus.OStatusController, :object
    get "/activities/:uuid", OStatus.OStatusController, :activity

    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

  scope "/.well-known", Pleroma.Web do
    pipe_through :well_known

    get "/host-meta", WebFinger.WebFingerController, :host_meta
    get "/webfinger", WebFinger.WebFingerController, :webfinger
  end

  scope "/", Fallback do
    get "/*path", RedirectController, :redirector
  end
end

defmodule Fallback.RedirectController do
  use Pleroma.Web, :controller
  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
  end
end