defmodule EventosWeb.Router do @moduledoc """ Router for eventos app """ use EventosWeb, :router pipeline :api do plug :accepts, ["json"] end pipeline :well_known do plug :accepts, ["json/application", "jrd-json"] end pipeline :activity_pub do plug :accepts, ["activity-json"] plug(EventosWeb.HTTPSignaturePlug) end pipeline :api_auth do plug :accepts, ["json"] plug EventosWeb.AuthPipeline end pipeline :browser do plug :accepts, ["html"] plug :fetch_session plug :fetch_flash plug :protect_from_forgery plug :put_secure_browser_headers end scope "/api", EventosWeb do pipe_through :api scope "/v1" do post "/users", UserController, :register get "/users/validate/:token", UserController, :validate post "/users/resend", UserController, :resend_confirmation post "/users/password-reset/send", UserController, :send_reset_password post "/users/password-reset/post", UserController, :reset_password post "/login", UserSessionController, :sign_in get "/groups", GroupController, :index get "/events", EventController, :index get "/events/search/:name", EventController, :search get "/events/:uuid/ics", EventController, :export_to_ics get "/events/:uuid/tracks", TrackController, :show_tracks_for_event get "/events/:uuid/sessions", SessionController, :show_sessions_for_event get "/events/:uuid", EventController, :show get "/comments/:uuid", CommentController, :show get "/bots/:id", BotController, :show get "/bots", BotController, :index get "/actors", ActorController, :index get "/actors/search/:name", ActorController, :search get "/actors/:name", ActorController, :show resources "/tags", TagController, only: [:index, :show] resources "/categories", CategoryController, only: [:index, :show] resources "/sessions", SessionController, only: [:index, :show] resources "/tracks", TrackController, only: [:index, :show] resources "/addresses", AddressController, only: [:index, :show] get "/search/:name", SearchController, :search end end # Other scopes may use custom stacks. scope "/api", EventosWeb do pipe_through :api_auth scope "/v1" do get "/user", UserController, :show_current_actor post "/sign-out", UserSessionController, :sign_out resources "/users", UserController, except: [:new, :edit, :show] post "/actors", ActorController, :create patch "/actors/:name", ActorController, :update post "/events", EventController, :create patch "/events/:uuid", EventController, :update put "/events/:uuid", EventController, :update delete "/events/:uuid", EventController, :delete post "/events/:uuid/join", ParticipantController, :join post "/comments", CommentController, :create patch "/comments/:uuid", CommentController, :update put "/comments/:uuid", CommentController, :update delete "/comments/:uuid", CommentController, :delete resources "/bots", BotController, except: [:new, :edit, :show, :index] post "/groups", GroupController, :create post "/groups/:name/join", GroupController, :join resources "/members", MemberController resources "/sessions", SessionController, except: [:index, :show] resources "/tracks", TrackController, except: [:index, :show] get "/tracks/:id/sessions", SessionController, :show_sessions_for_track resources "/categories", CategoryController resources "/tags", TagController resources "/addresses", AddressController, except: [:index, :show] end end scope "/.well-known", EventosWeb do pipe_through :well_known get "/host-meta", WebFingerController, :host_meta get "/webfinger", WebFingerController, :webfinger get "/nodeinfo", NodeinfoController, :schemas end scope "/nodeinfo", EventosWeb do get("/:version", NodeinfoController, :nodeinfo) end scope "/", EventosWeb do pipe_through :activity_pub get "/@:name", ActivityPubController, :actor get "/@:name/outbox", ActivityPubController, :outbox get "/@:name/following", ActivityPubController, :following get "/@:name/followers", ActivityPubController, :followers get "/events/:uuid", ActivityPubController, :event post "/@:name/inbox", ActivityPubController, :inbox post "/inbox", ActivityPubController, :inbox end if Mix.env == :dev do # If using Phoenix forward "/sent_emails", Bamboo.SentEmailViewerPlug end scope "/", EventosWeb do pipe_through :browser get "/*path", PageController, :index end end