146 lines
5 KiB
Elixir
146 lines
5 KiB
Elixir
defmodule MvWeb.Router do
|
|
use MvWeb, :router
|
|
|
|
use AshAuthentication.Phoenix.Router
|
|
|
|
import AshAuthentication.Plug.Helpers
|
|
|
|
pipeline :browser do
|
|
plug :accepts, ["html"]
|
|
plug :fetch_session
|
|
plug :fetch_live_flash
|
|
plug :put_root_layout, html: {MvWeb.Layouts, :root}
|
|
plug :protect_from_forgery
|
|
plug :put_secure_browser_headers
|
|
plug :load_from_session
|
|
plug :set_locale
|
|
end
|
|
|
|
pipeline :api do
|
|
plug :accepts, ["json"]
|
|
plug :load_from_bearer
|
|
plug :set_actor, :user
|
|
end
|
|
|
|
scope "/", MvWeb do
|
|
pipe_through :browser
|
|
|
|
ash_authentication_live_session :authenticated_routes do
|
|
# in each liveview, add one of the following at the top of the module:
|
|
#
|
|
# If an authenticated user must be present:
|
|
# on_mount {MvWeb.LiveUserAuth, :live_user_required}
|
|
#
|
|
# If an authenticated user *may* be present:
|
|
# on_mount {MvWeb.LiveUserAuth, :live_user_optional}
|
|
#
|
|
# If an authenticated user must *not* be present:
|
|
# on_mount {MvWeb.LiveUserAuth, :live_no_user}
|
|
end
|
|
end
|
|
|
|
scope "/", MvWeb do
|
|
pipe_through :browser
|
|
|
|
@doc """
|
|
AshAuthentication-specific: We define that all routes can only be accessed when the user is signed in.
|
|
"""
|
|
ash_authentication_live_session :authentication_required,
|
|
on_mount: {MvWeb.LiveUserAuth, :live_user_required} do
|
|
get "/", PageController, :home
|
|
|
|
live "/members", MemberLive.Index, :index
|
|
live "/members/new", MemberLive.Form, :new
|
|
live "/members/:id/edit", MemberLive.Form, :edit
|
|
live "/members/:id", MemberLive.Show, :show
|
|
live "/members/:id/show/edit", MemberLive.Show, :edit
|
|
|
|
live "/property_types", PropertyTypeLive.Index, :index
|
|
live "/property_types/new", PropertyTypeLive.Form, :new
|
|
live "/property_types/:id/edit", PropertyTypeLive.Form, :edit
|
|
live "/property_types/:id", PropertyTypeLive.Show, :show
|
|
live "/property_types/:id/show/edit", PropertyTypeLive.Show, :edit
|
|
|
|
live "/properties", PropertyLive.Index, :index
|
|
live "/properties/new", PropertyLive.Form, :new
|
|
live "/properties/:id/edit", PropertyLive.Form, :edit
|
|
live "/properties/:id", PropertyLive.Show, :show
|
|
live "/properties/:id/show/edit", PropertyLive.Show, :edit
|
|
|
|
live "/users", UserLive.Index, :index
|
|
live "/users/new", UserLive.Form, :new
|
|
live "/users/:id/edit", UserLive.Form, :edit
|
|
live "/users/:id", UserLive.Show, :show
|
|
live "/users/:id/show/edit", UserLive.Show, :edit
|
|
|
|
post "/set_locale", LocaleController, :set_locale
|
|
end
|
|
|
|
# ASHAUTHENTICATION GENERATED AUTH ROUTES
|
|
auth_routes AuthController, Mv.Accounts.User, path: "/auth"
|
|
sign_out_route AuthController
|
|
|
|
# Remove these if you'd like to use your own authentication views
|
|
sign_in_route register_path: "/register",
|
|
reset_path: "/reset",
|
|
auth_routes_prefix: "/auth",
|
|
on_mount: [{MvWeb.LiveUserAuth, :live_no_user}],
|
|
overrides: [MvWeb.AuthOverrides, AshAuthentication.Phoenix.Overrides.DaisyUI],
|
|
gettext_backend: {MvWeb.Gettext, "auth"}
|
|
|
|
# Remove this if you do not want to use the reset password feature
|
|
reset_route auth_routes_prefix: "/auth",
|
|
overrides: [MvWeb.AuthOverrides, AshAuthentication.Phoenix.Overrides.DaisyUI],
|
|
gettext_backend: {MvWeb.Gettext, "auth"}
|
|
|
|
# Remove this if you do not use the confirmation strategy
|
|
confirm_route Mv.Accounts.User, :confirm_new_user,
|
|
auth_routes_prefix: "/auth",
|
|
overrides: [MvWeb.AuthOverrides, AshAuthentication.Phoenix.Overrides.DaisyUI],
|
|
gettext_backend: {MvWeb.Gettext, "auth"}
|
|
|
|
# Remove this if you do not use the magic link strategy.
|
|
# magic_sign_in_route(Mv.Accounts.User, :magic_link,
|
|
# auth_routes_prefix: "/auth",
|
|
# overrides: [MvWeb.AuthOverrides, AshAuthentication.Phoenix.Overrides.Default]
|
|
# )
|
|
end
|
|
|
|
# Other scopes may use custom stacks.
|
|
# scope "/api", MvWeb do
|
|
# pipe_through :api
|
|
# end
|
|
|
|
# Enable LiveDashboard and Swoosh mailbox preview in development
|
|
if Application.compile_env(:mv, :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: MvWeb.Telemetry
|
|
forward "/mailbox", Plug.Swoosh.MailboxPreview
|
|
end
|
|
end
|
|
|
|
if Application.compile_env(:mv, :dev_routes) do
|
|
import AshAdmin.Router
|
|
|
|
scope "/admin" do
|
|
pipe_through :browser
|
|
|
|
ash_admin "/"
|
|
end
|
|
end
|
|
|
|
defp set_locale(conn, _opts) do
|
|
locale = get_session(conn, :locale) || "de"
|
|
Gettext.put_locale(MvWeb.Gettext, locale)
|
|
conn
|
|
end
|
|
end
|