Mechanical cleanup, quick fixes & deduplication closes #531 #543
4 changed files with 28 additions and 20 deletions
22
lib/mv_web/controllers/controller_helpers.ex
Normal file
22
lib/mv_web/controllers/controller_helpers.ex
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
defmodule MvWeb.ControllerHelpers do
|
||||||
|
@moduledoc """
|
||||||
|
Shared helpers for plug-based controllers.
|
||||||
|
|
||||||
|
The LiveView equivalent lives in `MvWeb.LiveHelpers`; this module is the
|
||||||
|
controller-side counterpart that works on a `Plug.Conn`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
alias Mv.Authorization.Actor
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the request actor for a controller, loaded for authorization.
|
||||||
|
|
||||||
|
Reads `:current_user` from the connection assigns and ensures it is loaded via
|
||||||
|
`Mv.Authorization.Actor.ensure_loaded/1`.
|
||||||
|
"""
|
||||||
|
@spec current_actor(Plug.Conn.t()) :: Mv.Accounts.User.t() | nil
|
||||||
|
def current_actor(conn) do
|
||||||
|
conn.assigns[:current_user]
|
||||||
|
|> Actor.ensure_loaded()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -13,11 +13,12 @@ defmodule MvWeb.ImportTemplateController do
|
||||||
"""
|
"""
|
||||||
use MvWeb, :controller
|
use MvWeb, :controller
|
||||||
|
|
||||||
alias Mv.Authorization.Actor
|
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
alias Mv.Membership.MembersCSV
|
alias Mv.Membership.MembersCSV
|
||||||
alias MvWeb.Authorization
|
alias MvWeb.Authorization
|
||||||
|
|
||||||
|
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
# Standard member columns in template order, with their English and German headers
|
# Standard member columns in template order, with their English and German headers
|
||||||
# and a placeholder example value. Groups and fee type are importable extras.
|
# and a placeholder example value. Groups and fee type are importable extras.
|
||||||
@columns [
|
@columns [
|
||||||
|
|
@ -105,11 +106,6 @@ defmodule MvWeb.ImportTemplateController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp current_actor(conn) do
|
|
||||||
conn.assigns[:current_user]
|
|
||||||
|> Actor.ensure_loaded()
|
|
||||||
end
|
|
||||||
|
|
||||||
defp return_forbidden(conn) do
|
defp return_forbidden(conn) do
|
||||||
conn
|
conn
|
||||||
|> put_status(403)
|
|> put_status(403)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ defmodule MvWeb.MemberExportController do
|
||||||
require Ash.Query
|
require Ash.Query
|
||||||
import Ash.Expr
|
import Ash.Expr
|
||||||
|
|
||||||
alias Mv.Authorization.Actor
|
|
||||||
alias Mv.Membership.CustomField
|
alias Mv.Membership.CustomField
|
||||||
alias Mv.Membership.CustomFieldSort
|
alias Mv.Membership.CustomFieldSort
|
||||||
alias Mv.Membership.Member
|
alias Mv.Membership.Member
|
||||||
|
|
@ -18,6 +17,8 @@ defmodule MvWeb.MemberExportController do
|
||||||
alias Mv.Membership.MembersCSV
|
alias Mv.Membership.MembersCSV
|
||||||
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
alias MvWeb.MemberLive.Index.MembershipFeeStatus
|
||||||
alias MvWeb.Translations.MemberFields
|
alias MvWeb.Translations.MemberFields
|
||||||
|
|
||||||
|
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
@member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++
|
@member_fields_allowlist (Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1)) ++
|
||||||
|
|
@ -53,11 +54,6 @@ defmodule MvWeb.MemberExportController do
|
||||||
|> json(%{error: message})
|
|> json(%{error: message})
|
||||||
end
|
end
|
||||||
|
|
||||||
defp current_actor(conn) do
|
|
||||||
conn.assigns[:current_user]
|
|
||||||
|> Actor.ensure_loaded()
|
|
||||||
end
|
|
||||||
|
|
||||||
defp return_forbidden(conn) do
|
defp return_forbidden(conn) do
|
||||||
conn
|
conn
|
||||||
|> put_status(403)
|
|> put_status(403)
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,11 @@ defmodule MvWeb.MemberPdfExportController do
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
alias Mv.Authorization.Actor
|
|
||||||
alias Mv.Membership.{MemberExport, MemberExport.Build, MembersPDF}
|
alias Mv.Membership.{MemberExport, MemberExport.Build, MembersPDF}
|
||||||
alias MvWeb.Translations.MemberFields
|
alias MvWeb.Translations.MemberFields
|
||||||
|
|
||||||
|
import MvWeb.ControllerHelpers, only: [current_actor: 1]
|
||||||
|
|
||||||
use Gettext, backend: MvWeb.Gettext
|
use Gettext, backend: MvWeb.Gettext
|
||||||
|
|
||||||
@payload_required_message "payload required"
|
@payload_required_message "payload required"
|
||||||
|
|
@ -79,13 +80,6 @@ defmodule MvWeb.MemberPdfExportController do
|
||||||
bad_request(conn, @payload_required_message)
|
bad_request(conn, @payload_required_message)
|
||||||
end
|
end
|
||||||
|
|
||||||
# --- Actor / auth ---
|
|
||||||
|
|
||||||
defp current_actor(conn) do
|
|
||||||
conn.assigns[:current_user]
|
|
||||||
|> Actor.ensure_loaded()
|
|
||||||
end
|
|
||||||
|
|
||||||
defp forbidden(conn) do
|
defp forbidden(conn) do
|
||||||
conn
|
conn
|
||||||
|> put_status(:forbidden)
|
|> put_status(:forbidden)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue