2020-01-26 21:36:50 +01:00
|
|
|
defmodule Mobilizon.Web.Router do
|
2018-01-14 17:56:50 +01:00
|
|
|
@moduledoc """
|
2018-10-11 17:37:39 +02:00
|
|
|
Router for mobilizon app
|
2018-01-14 17:56:50 +01:00
|
|
|
"""
|
2020-01-26 21:36:50 +01:00
|
|
|
use Mobilizon.Web, :router
|
2017-12-08 09:58:14 +01:00
|
|
|
|
2018-11-06 10:30:27 +01:00
|
|
|
pipeline :graphql do
|
2019-05-22 14:12:11 +02:00
|
|
|
# plug(:accepts, ["json"])
|
2020-01-26 21:36:50 +01:00
|
|
|
plug(Mobilizon.Web.Auth.Pipeline)
|
2017-12-08 09:58:14 +01:00
|
|
|
end
|
|
|
|
|
2018-05-17 11:32:23 +02:00
|
|
|
pipeline :well_known do
|
2018-11-07 16:45:11 +01:00
|
|
|
plug(:accepts, ["json", "jrd-json"])
|
2018-05-17 11:32:23 +02:00
|
|
|
end
|
|
|
|
|
2018-11-12 18:17:53 +01:00
|
|
|
pipeline :activity_pub_signature do
|
2020-01-26 21:36:50 +01:00
|
|
|
plug(Mobilizon.Web.Plugs.HTTPSignatures)
|
|
|
|
plug(Mobilizon.Web.Plugs.MappedSignatureToIdentity)
|
2018-05-17 11:32:23 +02:00
|
|
|
end
|
|
|
|
|
2019-07-30 16:40:59 +02:00
|
|
|
pipeline :relay do
|
2020-01-26 21:36:50 +01:00
|
|
|
plug(Mobilizon.Web.Plugs.HTTPSignatures)
|
|
|
|
plug(Mobilizon.Web.Plugs.MappedSignatureToIdentity)
|
2019-07-30 16:40:59 +02:00
|
|
|
plug(:accepts, ["activity-json", "json"])
|
|
|
|
end
|
|
|
|
|
2018-11-12 18:17:53 +01:00
|
|
|
pipeline :activity_pub do
|
2019-03-04 17:20:18 +01:00
|
|
|
plug(:accepts, ["activity-json"])
|
|
|
|
end
|
|
|
|
|
|
|
|
pipeline :activity_pub_and_html do
|
2019-03-05 12:24:29 +01:00
|
|
|
plug(:accepts, ["html", "activity-json"])
|
2020-02-18 08:57:00 +01:00
|
|
|
|
|
|
|
plug(Cldr.Plug.AcceptLanguage,
|
|
|
|
cldr_backend: Mobilizon.Cldr
|
|
|
|
)
|
2018-11-12 18:17:53 +01:00
|
|
|
end
|
|
|
|
|
2019-03-06 17:07:42 +01:00
|
|
|
pipeline :atom_and_ical do
|
|
|
|
plug(:accepts, ["atom", "ics", "html"])
|
2019-02-27 16:28:09 +01:00
|
|
|
end
|
|
|
|
|
2018-01-09 17:52:26 +01:00
|
|
|
pipeline :browser do
|
2019-07-05 16:59:25 +02:00
|
|
|
plug(Plug.Static, at: "/", from: "priv/static")
|
2020-02-18 08:57:00 +01:00
|
|
|
|
|
|
|
plug(Cldr.Plug.AcceptLanguage,
|
|
|
|
cldr_backend: Mobilizon.Cldr
|
|
|
|
)
|
|
|
|
|
2018-07-27 10:45:35 +02:00
|
|
|
plug(:accepts, ["html"])
|
|
|
|
plug(:fetch_session)
|
|
|
|
plug(:fetch_flash)
|
|
|
|
plug(:protect_from_forgery)
|
|
|
|
plug(:put_secure_browser_headers)
|
2018-01-09 17:52:26 +01:00
|
|
|
end
|
|
|
|
|
2019-05-28 10:51:02 +02:00
|
|
|
pipeline :remote_media do
|
|
|
|
end
|
|
|
|
|
2018-11-06 10:30:27 +01:00
|
|
|
scope "/api" do
|
|
|
|
pipe_through(:graphql)
|
2018-07-27 10:45:35 +02:00
|
|
|
|
2019-11-15 18:36:47 +01:00
|
|
|
forward("/", Absinthe.Plug,
|
2020-01-26 20:34:25 +01:00
|
|
|
schema: Mobilizon.GraphQL.Schema,
|
2019-11-15 18:36:47 +01:00
|
|
|
analyze_complexity: true,
|
|
|
|
max_complexity: 200
|
|
|
|
)
|
2017-12-08 09:58:14 +01:00
|
|
|
end
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/.well-known", Mobilizon.Web do
|
2018-07-27 10:45:35 +02:00
|
|
|
pipe_through(:well_known)
|
2018-05-17 11:32:23 +02:00
|
|
|
|
2018-07-27 10:45:35 +02:00
|
|
|
get("/host-meta", WebFingerController, :host_meta)
|
|
|
|
get("/webfinger", WebFingerController, :webfinger)
|
2018-11-06 10:30:27 +01:00
|
|
|
get("/nodeinfo", NodeInfoController, :schemas)
|
|
|
|
get("/nodeinfo/:version", NodeInfoController, :nodeinfo)
|
2018-05-17 11:32:23 +02:00
|
|
|
end
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/", Mobilizon.Web do
|
2019-03-04 17:20:18 +01:00
|
|
|
pipe_through(:activity_pub_and_html)
|
2019-12-03 11:29:51 +01:00
|
|
|
pipe_through(:activity_pub_signature)
|
|
|
|
|
2019-03-04 17:20:18 +01:00
|
|
|
get("/@:name", PageController, :actor)
|
2020-02-18 08:57:00 +01:00
|
|
|
get("/events/me", PageController, :index)
|
2019-03-04 17:20:18 +01:00
|
|
|
get("/events/:uuid", PageController, :event)
|
|
|
|
get("/comments/:uuid", PageController, :comment)
|
2020-02-18 08:57:00 +01:00
|
|
|
get("/resource/:uuid", PageController, :resource, as: "resource")
|
|
|
|
get("/todo-list/:uuid", PageController, :todo_list, as: "todo_list")
|
|
|
|
get("/todo/:uuid", PageController, :todo, as: "todo")
|
|
|
|
get("/@:name/resources", PageController, :resources)
|
2019-03-04 17:20:18 +01:00
|
|
|
end
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/", Mobilizon.Web do
|
2019-02-27 16:28:09 +01:00
|
|
|
pipe_through(:activity_pub)
|
|
|
|
|
2018-07-27 10:45:35 +02:00
|
|
|
get("/@:name/outbox", ActivityPubController, :outbox)
|
|
|
|
get("/@:name/following", ActivityPubController, :following)
|
|
|
|
get("/@:name/followers", ActivityPubController, :followers)
|
2020-02-18 08:57:00 +01:00
|
|
|
get("/@:name/members", ActivityPubController, :members)
|
|
|
|
get("/@:name/todo-lists", ActivityPubController, :todo_lists)
|
2018-11-12 18:17:53 +01:00
|
|
|
end
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/", Mobilizon.Web do
|
2018-11-12 18:17:53 +01:00
|
|
|
pipe_through(:activity_pub_signature)
|
2018-07-27 10:45:35 +02:00
|
|
|
post("/@:name/inbox", ActivityPubController, :inbox)
|
|
|
|
post("/inbox", ActivityPubController, :inbox)
|
2017-12-08 09:58:14 +01:00
|
|
|
end
|
2018-01-09 17:52:26 +01:00
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/relay", Mobilizon.Web do
|
2019-07-30 16:40:59 +02:00
|
|
|
pipe_through(:relay)
|
|
|
|
|
|
|
|
get("/", ActivityPubController, :relay)
|
|
|
|
post("/inbox", ActivityPubController, :inbox)
|
|
|
|
end
|
|
|
|
|
2020-01-23 21:59:50 +01:00
|
|
|
## FEED
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/", Mobilizon.Web do
|
2020-01-23 21:59:50 +01:00
|
|
|
pipe_through(:atom_and_ical)
|
|
|
|
|
|
|
|
get("/@:name/feed/:format", FeedController, :actor)
|
|
|
|
get("/events/:uuid/export/:format", FeedController, :event)
|
|
|
|
get("/events/going/:token/:format", FeedController, :going)
|
|
|
|
end
|
|
|
|
|
|
|
|
## MOBILIZON
|
2019-12-20 13:04:34 +01:00
|
|
|
scope "/graphiql" do
|
|
|
|
pipe_through(:graphql)
|
|
|
|
forward("/", Absinthe.Plug.GraphiQL, schema: Mobilizon.GraphQL.Schema)
|
|
|
|
end
|
2020-01-23 21:59:50 +01:00
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/", Mobilizon.Web do
|
2020-01-23 21:59:50 +01:00
|
|
|
pipe_through(:browser)
|
|
|
|
|
|
|
|
# Because the "/events/:uuid" route caches all these, we need to force them
|
|
|
|
get("/events/create", PageController, :index)
|
|
|
|
get("/events/list", PageController, :index)
|
|
|
|
get("/events/me", PageController, :index)
|
|
|
|
get("/events/explore", PageController, :index)
|
|
|
|
get("/events/:uuid/edit", PageController, :index)
|
|
|
|
|
|
|
|
# This is a hack to ease link generation into emails
|
|
|
|
get("/moderation/reports/:id", PageController, :index, as: "moderation_report")
|
2019-12-20 13:04:34 +01:00
|
|
|
|
|
|
|
get("/participation/email/confirm/:token", PageController, :index,
|
|
|
|
as: "participation_email_confirmation"
|
|
|
|
)
|
|
|
|
|
2020-02-13 15:48:12 +01:00
|
|
|
get("/validate/email/:token", PageController, :index, as: "user_email_validation")
|
2020-02-18 08:57:00 +01:00
|
|
|
get("/groups/me", PageController, :index, as: "my_groups")
|
2020-02-13 15:48:12 +01:00
|
|
|
|
2019-12-20 13:04:34 +01:00
|
|
|
get("/interact", PageController, :interact)
|
2020-01-23 21:59:50 +01:00
|
|
|
end
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/proxy/", Mobilizon.Web do
|
2019-05-28 10:51:02 +02:00
|
|
|
pipe_through(:remote_media)
|
|
|
|
|
|
|
|
get("/:sig/:url", MediaProxyController, :remote)
|
|
|
|
get("/:sig/:url/:filename", MediaProxyController, :remote)
|
|
|
|
end
|
|
|
|
|
2019-10-05 19:07:50 +02:00
|
|
|
if Mix.env() in [:dev, :e2e] do
|
2018-07-04 14:29:17 +02:00
|
|
|
# If using Phoenix
|
2018-07-27 10:45:35 +02:00
|
|
|
forward("/sent_emails", Bamboo.SentEmailViewerPlug)
|
2018-07-04 14:29:17 +02:00
|
|
|
end
|
|
|
|
|
2020-01-26 21:36:50 +01:00
|
|
|
scope "/", Mobilizon.Web do
|
2018-07-27 10:45:35 +02:00
|
|
|
pipe_through(:browser)
|
2018-01-09 17:52:26 +01:00
|
|
|
|
2018-07-27 10:45:35 +02:00
|
|
|
get("/*path", PageController, :index)
|
2018-01-09 17:52:26 +01:00
|
|
|
end
|
2017-12-08 09:58:14 +01:00
|
|
|
end
|