Compare commits
13 Commits
0957c18d21
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a83563a576 | |||
| c3eb2471dc | |||
| 90f8ef00fa | |||
| cd0c0b21b4 | |||
| 39f5671b2c | |||
| 8b979f7956 | |||
| f829088b5b | |||
| 1692fa29da | |||
| 921a9da748 | |||
| 2e6784b50b | |||
| 47385cf827 | |||
| 9e6a9e4a48 | |||
| db732c0af0 |
@@ -35,26 +35,6 @@ if amqp_url do
|
|||||||
config :policy_service, :amqp_url, amqp_url
|
config :policy_service, :amqp_url, amqp_url
|
||||||
end
|
end
|
||||||
|
|
||||||
cors_origin = System.get_env("CORS_ORIGIN", "*")
|
|
||||||
|
|
||||||
config :cors_plug,
|
|
||||||
origin: cors_origin,
|
|
||||||
headers: [
|
|
||||||
"Authorization",
|
|
||||||
"x-organization-id",
|
|
||||||
"Content-Type",
|
|
||||||
"Accept",
|
|
||||||
"Origin",
|
|
||||||
"User-Agent",
|
|
||||||
"DNT",
|
|
||||||
"Cache-Control",
|
|
||||||
"X-Mx-ReqToken",
|
|
||||||
"Keep-Alive",
|
|
||||||
"X-Requested-With",
|
|
||||||
"If-Modified-Since",
|
|
||||||
"X-CSRF-Token"
|
|
||||||
]
|
|
||||||
|
|
||||||
# Zitadel Configuration
|
# Zitadel Configuration
|
||||||
|
|
||||||
# ## Using releases
|
# ## Using releases
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ defmodule PolicyServiceWeb.PolicyController do
|
|||||||
)
|
)
|
||||||
|
|
||||||
def index(conn, params) do
|
def index(conn, params) do
|
||||||
org_id = conn.assigns[:org_id]
|
org_id = conn.private[PolicyServiceWeb.Plugs.ExtractOrganizationId]
|
||||||
|
|
||||||
case PolicyQueries.list_by_org(org_id, params) do
|
case PolicyQueries.list_by_org(org_id, params) do
|
||||||
{:ok, {policies, meta}} ->
|
{:ok, {policies, meta}} ->
|
||||||
@@ -63,7 +63,7 @@ defmodule PolicyServiceWeb.PolicyController do
|
|||||||
)
|
)
|
||||||
|
|
||||||
def show(conn, %{"application_id" => application_id}) do
|
def show(conn, %{"application_id" => application_id}) do
|
||||||
org_id = conn.assigns[:org_id]
|
org_id = conn.private[PolicyServiceWeb.Plugs.ExtractOrganizationId]
|
||||||
|
|
||||||
case PolicyQueries.get_by_application_id(org_id, application_id) do
|
case PolicyQueries.get_by_application_id(org_id, application_id) do
|
||||||
{:ok, policy} ->
|
{:ok, policy} ->
|
||||||
@@ -89,7 +89,7 @@ defmodule PolicyServiceWeb.PolicyController do
|
|||||||
|
|
||||||
def create(conn, params) do
|
def create(conn, params) do
|
||||||
application_id = Ecto.UUID.generate()
|
application_id = Ecto.UUID.generate()
|
||||||
org_id = conn.assigns[:org_id]
|
org_id = conn.private[PolicyServiceWeb.Plugs.ExtractOrganizationId]
|
||||||
submitted_by = conn.assigns[:user_id]
|
submitted_by = conn.assigns[:user_id]
|
||||||
|
|
||||||
with {:ok, policy_type} <- parse_policy_type(params["policy_type"]),
|
with {:ok, policy_type} <- parse_policy_type(params["policy_type"]),
|
||||||
@@ -173,7 +173,7 @@ defmodule PolicyServiceWeb.PolicyController do
|
|||||||
)
|
)
|
||||||
|
|
||||||
def accept(conn, %{"application_id" => application_id} = params) do
|
def accept(conn, %{"application_id" => application_id} = params) do
|
||||||
org_id = conn.assigns[:org_id]
|
org_id = conn.private[PolicyServiceWeb.Plugs.ExtractOrganizationId]
|
||||||
|
|
||||||
with {:ok, policy} <- PolicyQueries.get_by_application_id(org_id, application_id) do
|
with {:ok, policy} <- PolicyQueries.get_by_application_id(org_id, application_id) do
|
||||||
command =
|
command =
|
||||||
|
|||||||
@@ -42,9 +42,13 @@ defmodule PolicyServiceWeb.Endpoint do
|
|||||||
pass: ["*/*"],
|
pass: ["*/*"],
|
||||||
json_decoder: Phoenix.json_library()
|
json_decoder: Phoenix.json_library()
|
||||||
|
|
||||||
plug CORSPlug
|
|
||||||
plug Plug.MethodOverride
|
plug Plug.MethodOverride
|
||||||
plug Plug.Head
|
plug Plug.Head
|
||||||
plug Plug.Session, @session_options
|
plug Plug.Session, @session_options
|
||||||
|
|
||||||
|
plug CORSPlug,
|
||||||
|
origin: ["*"],
|
||||||
|
headers: ["*"]
|
||||||
|
|
||||||
plug PolicyServiceWeb.Router
|
plug PolicyServiceWeb.Router
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -31,14 +31,11 @@ defmodule PolicyServiceWeb.Plugs.AuthorizeRoles do
|
|||||||
|
|
||||||
@impl Plug
|
@impl Plug
|
||||||
def call(conn, opts) do
|
def call(conn, opts) do
|
||||||
IO.inspect(conn.private)
|
if authorized?(
|
||||||
|
conn,
|
||||||
required_permissions =
|
Keyword.get(opts, :roles_claim),
|
||||||
conn.private[Phoenix.Router.Route]
|
Keyword.get(opts, :required_permissions)
|
||||||
|> Map.get(:options, %{})
|
) do
|
||||||
|> Map.get(:required_permissions, [])
|
|
||||||
|
|
||||||
if authorized?(conn, opts.roles_claim, required_permissions) do
|
|
||||||
conn
|
conn
|
||||||
else
|
else
|
||||||
conn
|
conn
|
||||||
@@ -67,8 +64,8 @@ defmodule PolicyServiceWeb.Plugs.AuthorizeRoles do
|
|||||||
|
|
||||||
defp get_roles_map(conn, roles_claim) do
|
defp get_roles_map(conn, roles_claim) do
|
||||||
case conn.private[Oidcc.Plug.IntrospectToken] do
|
case conn.private[Oidcc.Plug.IntrospectToken] do
|
||||||
%{extra: %{^roles_claim => %{} = roles_map}} ->
|
%Oidcc.TokenIntrospection{extra: extra} ->
|
||||||
Map.get(roles_map, roles_claim, %{})
|
Map.get(extra, roles_claim, %{})
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
%{}
|
%{}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ defmodule PolicyServiceWeb.Router do
|
|||||||
plug OpenApiSpex.Plug.PutApiSpec, module: PolicyServiceWeb.ApiSpec
|
plug OpenApiSpex.Plug.PutApiSpec, module: PolicyServiceWeb.ApiSpec
|
||||||
end
|
end
|
||||||
|
|
||||||
pipeline :authorize do
|
pipeline :auth do
|
||||||
plug Oidcc.Plug.ExtractAuthorization
|
plug Oidcc.Plug.ExtractAuthorization
|
||||||
plug Oidcc.Plug.RequireAuthorization
|
plug Oidcc.Plug.RequireAuthorization
|
||||||
|
|
||||||
@@ -16,36 +16,53 @@ defmodule PolicyServiceWeb.Router do
|
|||||||
plug PolicyServiceWeb.Plugs.ExtractOrganizationId
|
plug PolicyServiceWeb.Plugs.ExtractOrganizationId
|
||||||
|
|
||||||
plug :introspect
|
plug :introspect
|
||||||
plug :authorize_roles
|
end
|
||||||
|
|
||||||
|
pipeline :read do
|
||||||
|
plug :authorize_roles, required_permissions: ["policy:read"]
|
||||||
|
end
|
||||||
|
|
||||||
|
pipeline :submit_solicitation do
|
||||||
|
plug :authorize_roles, required_permissions: ["policy:submit_solicitation"]
|
||||||
|
end
|
||||||
|
|
||||||
|
pipeline :create_request do
|
||||||
|
plug :authorize_roles, required_permissions: ["policy:create_request"]
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/health", HealthController, :health
|
get "/health", HealthController, :health
|
||||||
get "/health/ready", HealthController, :ready
|
get "/health/ready", HealthController, :ready
|
||||||
|
|
||||||
|
scope "/swaggerui" do
|
||||||
|
get "/", OpenApiSpex.Plug.SwaggerUI, path: "/api/openapi"
|
||||||
|
end
|
||||||
|
|
||||||
scope "/api" do
|
scope "/api" do
|
||||||
pipe_through [:api]
|
pipe_through [:api]
|
||||||
|
|
||||||
get "/openapi", OpenApiSpex.Plug.RenderSpec, []
|
get "/openapi", OpenApiSpex.Plug.RenderSpec, []
|
||||||
|
|
||||||
scope "/v1" do
|
scope "/v1" do
|
||||||
pipe_through [:authorize]
|
pipe_through [:auth]
|
||||||
|
|
||||||
get "/policies", PolicyController, :index, required_permission: ["policy:read"]
|
scope "/" do
|
||||||
|
pipe_through [:read]
|
||||||
|
get "/policies", PolicyController, :index
|
||||||
|
get "/policies/:application_id", PolicyController, :show
|
||||||
|
end
|
||||||
|
|
||||||
get "/policies/:application_id", PolicyController, :show,
|
scope "/" do
|
||||||
required_permissions: ["policy:read"]
|
pipe_through [:create_request]
|
||||||
|
post "/policies", PolicyController, :create
|
||||||
|
end
|
||||||
|
|
||||||
post "/policies", PolicyController, :create, required_permissions: ["policy:create_request"]
|
scope "/" do
|
||||||
|
pipe_through [:submit_solicitation]
|
||||||
post "/policies/:application_id/accept", PolicyController, :accept,
|
post "/policies/:application_id/accept", PolicyController, :accept
|
||||||
required_permission: ["policy:submit_solicitation"]
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/swaggerui" do
|
|
||||||
get "/", OpenApiSpex.Plug.SwaggerUI, path: "/api/openapi"
|
|
||||||
end
|
|
||||||
|
|
||||||
def introspect(conn, _opts) do
|
def introspect(conn, _opts) do
|
||||||
zitadel = Application.get_env(:policy_service, :zitadel)
|
zitadel = Application.get_env(:policy_service, :zitadel)
|
||||||
|
|
||||||
@@ -63,9 +80,12 @@ defmodule PolicyServiceWeb.Router do
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_roles(conn, _opts) do
|
def authorize_roles(conn, opts) do
|
||||||
zitadel = Application.get_env(:policy_service, :zitadel)
|
zitadel = Application.get_env(:policy_service, :zitadel)
|
||||||
opts = PolicyServiceWeb.Plugs.AuthorizeRoles.init(roles_claim: zitadel[:roles_claim])
|
|
||||||
PolicyServiceWeb.Plugs.AuthorizeRoles.call(conn, opts)
|
o =
|
||||||
|
PolicyServiceWeb.Plugs.AuthorizeRoles.init(roles_claim: zitadel[:roles_claim])
|
||||||
|
|
||||||
|
PolicyServiceWeb.Plugs.AuthorizeRoles.call(conn, Keyword.merge(opts, o))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user