149 lines
4.7 KiB
Elixir
149 lines
4.7 KiB
Elixir
defmodule BrightWeb.Router do
|
|
use BrightWeb, :router
|
|
|
|
import Oban.Web.Router
|
|
|
|
import BrightWeb.AuthController,
|
|
only: [
|
|
fetch_current_user: 2,
|
|
require_admin_user: 2
|
|
]
|
|
|
|
pipeline :browser do
|
|
plug(:accepts, ["html", "json", "txt"])
|
|
plug(:fetch_session)
|
|
plug(:fetch_live_flash)
|
|
plug(:fetch_current_user)
|
|
plug(:put_root_layout, html: {BrightWeb.Layouts, :root})
|
|
plug(:protect_from_forgery)
|
|
plug(:put_secure_browser_headers)
|
|
end
|
|
|
|
pipeline :api do
|
|
plug(:accepts, ["json"])
|
|
end
|
|
|
|
scope "/auth", BrightWeb do
|
|
pipe_through(:browser)
|
|
|
|
live_session :auth_login, on_mount: {BrightWeb.AuthController, :current_user} do
|
|
live("/login", SignInLive, :index)
|
|
end
|
|
|
|
get("/logout", AuthController, :delete)
|
|
get("/:provider", AuthController, :request)
|
|
get("/:provider/callback", AuthController, :callback)
|
|
post("/:provider/callback", AuthController, :callback)
|
|
end
|
|
|
|
## protected routes
|
|
## this section needs to be above the unprotected routes,
|
|
## so routes like "/streams/new" take precedence.
|
|
scope "/", BrightWeb do
|
|
pipe_through [:browser, :require_admin_user]
|
|
# pipe_through [:browser]
|
|
|
|
resources("/streams", StreamController, only: [:new, :create, :edit, :update, :delete])
|
|
|
|
# I think there is something faulty with how I'm calling these nested routes
|
|
# # get "/vods/new", VodController, :new
|
|
# # post "/vods", VodController, :create
|
|
# # delete "/vods/:id", VodController, :delete
|
|
# # get "/vods/:id/edit", VodController, :edit
|
|
# resources "/vods", StreamController, only: [:new, :create, :edit, :update, :delete]
|
|
|
|
# resources "/vt", VtuberController do
|
|
# get "/vods/new", VodController, :new
|
|
# post "/vods", VodController, :create
|
|
# get "/vtubers/:id/edit", VtuberController, :edit
|
|
# end
|
|
|
|
# resources "/vtubers", VtuberController do
|
|
# get "/new", VtuberController, :new
|
|
# post "/", VtuberController, :create
|
|
# get "/vods/new", VodController, :new
|
|
# post "/vods", VodController, :create
|
|
# get "/vtubers/:id/edit", VtuberController, :edit
|
|
# end
|
|
|
|
resources("/vods", VodController, only: [:create, :new, :edit, :update, :delete])
|
|
resources("/vtubers", VtuberController, only: [:create, :new, :edit, :update, :delete])
|
|
|
|
get("/tags/new", TagController, :new)
|
|
post("/tags", TagController, :create)
|
|
get("/tags/:id/edit", TagController, :edit)
|
|
|
|
resources("/torrents", TorrentController, only: [:create, :new, :edit, :update, :delete])
|
|
|
|
## !!! DANGER, platforms must only be writable by admins, (unless we implement SVG sanitizing)
|
|
## @todo remove SVGs from the database and instead put them in assets
|
|
resources("/platforms", PlatformController, only: [:new, :create, :edit, :update, :delete])
|
|
|
|
oban_dashboard("/oban")
|
|
|
|
live_session :authenticated,
|
|
on_mount: [{BrightWeb.AuthController, :ensure_authenticated}] do
|
|
live("/profile", ProfileLive)
|
|
end
|
|
end
|
|
|
|
scope "/", BrightWeb do
|
|
pipe_through(:browser)
|
|
|
|
get("/", PageController, :home)
|
|
|
|
get("/patrons", PatronController, :index)
|
|
get("/about", PageController, :about)
|
|
get("/goals", PageController, :about)
|
|
get("/api", PageController, :api)
|
|
|
|
resources("/torrents", TorrentController, only: [:index, :show])
|
|
|
|
get("/streams", StreamController, :index)
|
|
get("/streams/:id", StreamController, :show)
|
|
|
|
get("/vods/:id", VodController, :show)
|
|
get("/vods", VodController, :index)
|
|
|
|
get("/tags", TagController, :index)
|
|
get("/tags/:id", TagController, :show)
|
|
|
|
get("/platforms", PlatformController, :index)
|
|
get("/platforms/:id", PlatformController, :show)
|
|
|
|
resources("/vtubers", VtuberController, only: [:index, :show])
|
|
|
|
resources "/vt", VtuberController do
|
|
get("/vods", VodController, :index)
|
|
get("/vods/:id", VodController, :show)
|
|
end
|
|
end
|
|
|
|
scope "/feeds", BrightWeb do
|
|
get("/vods.xml", RssController, :vods)
|
|
end
|
|
|
|
# Other scopes may use custom stacks.
|
|
scope "/api", BrightWeb do
|
|
pipe_through(:api)
|
|
resources("/urls", UrlController, except: [:new, :edit])
|
|
get("/health", PageController, :health)
|
|
end
|
|
|
|
# Enable LiveDashboard and Swoosh mailbox preview in development
|
|
if Application.compile_env(:bright, :dev_routes) do
|
|
# If you want to use the LiveDashboard in production, you should put
|
|
# it behind authentication and allow only admins to access it.
|
|
# If your application does not have an admins-only section yet,
|
|
# you can use Plug.BasicAuth to set up some basic authentication
|
|
# as long as you are also using SSL (which you should anyway).
|
|
import Phoenix.LiveDashboard.Router
|
|
|
|
scope "/dev" do
|
|
pipe_through(:browser)
|
|
|
|
live_dashboard("/dashboard", metrics: BrightWeb.Telemetry)
|
|
end
|
|
end
|
|
end
|