mirror of
https://github.com/penpot/penpot.git
synced 2025-12-12 06:24:17 +01:00
✨ Add management shared key authentication
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
export PENPOT_SECRET_KEY=super-secret-devenv-key
|
export PENPOT_SECRET_KEY=super-secret-devenv-key
|
||||||
|
export PENPOT_MANAGEMENT_API_SHARED_KEY=super-secret-management-api-key
|
||||||
export PENPOT_HOST=devenv
|
export PENPOT_HOST=devenv
|
||||||
export PENPOT_FLAGS="\
|
export PENPOT_FLAGS="\
|
||||||
$PENPOT_FLAGS \
|
$PENPOT_FLAGS \
|
||||||
|
|||||||
@@ -98,6 +98,8 @@
|
|||||||
[:http-server-io-threads {:optional true} ::sm/int]
|
[:http-server-io-threads {:optional true} ::sm/int]
|
||||||
[:http-server-max-worker-threads {:optional true} ::sm/int]
|
[:http-server-max-worker-threads {:optional true} ::sm/int]
|
||||||
|
|
||||||
|
[:management-api-shared-key {:optional true} :string]
|
||||||
|
|
||||||
[:telemetry-uri {:optional true} :string]
|
[:telemetry-uri {:optional true} :string]
|
||||||
[:telemetry-with-taiga {:optional true} ::sm/boolean] ;; DELETE
|
[:telemetry-with-taiga {:optional true} ::sm/boolean] ;; DELETE
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
[app.tokens :as tokens]
|
[app.tokens :as tokens]
|
||||||
[yetti.request :as yreq]))
|
[yetti.request :as yreq]))
|
||||||
|
|
||||||
(def header-re #"^Token\s+(.*)")
|
(def header-re #"(?i)^Token\s+(.*)")
|
||||||
|
|
||||||
(defn- get-token
|
(defn get-token
|
||||||
[request]
|
[request]
|
||||||
(some->> (yreq/get-header request "authorization")
|
(some->> (yreq/get-header request "authorization")
|
||||||
(re-matches header-re)
|
(re-matches header-re)
|
||||||
|
|||||||
@@ -11,7 +11,9 @@
|
|||||||
[app.common.schema :as sm]
|
[app.common.schema :as sm]
|
||||||
[app.common.schema.generators :as sg]
|
[app.common.schema.generators :as sg]
|
||||||
[app.common.time :as ct]
|
[app.common.time :as ct]
|
||||||
|
[app.config :as cf]
|
||||||
[app.db :as db]
|
[app.db :as db]
|
||||||
|
[app.http.access-token :refer [get-token]]
|
||||||
[app.main :as-alias main]
|
[app.main :as-alias main]
|
||||||
[app.rpc.commands.profile :as cmd.profile]
|
[app.rpc.commands.profile :as cmd.profile]
|
||||||
[app.setup :as-alias setup]
|
[app.setup :as-alias setup]
|
||||||
@@ -30,6 +32,20 @@
|
|||||||
[_ params]
|
[_ params]
|
||||||
(assert (db/pool? (::db/pool params)) "expect valid database pool"))
|
(assert (db/pool? (::db/pool params)) "expect valid database pool"))
|
||||||
|
|
||||||
|
(def ^:private auth
|
||||||
|
{:name ::auth
|
||||||
|
:compile
|
||||||
|
(fn [_ _]
|
||||||
|
(fn [handler shared-key]
|
||||||
|
(if shared-key
|
||||||
|
(fn [request]
|
||||||
|
(let [token (get-token request)]
|
||||||
|
(if (= token shared-key)
|
||||||
|
(handler request)
|
||||||
|
{::yres/status 403})))
|
||||||
|
(fn [_ _]
|
||||||
|
{::yres/status 403}))))})
|
||||||
|
|
||||||
(def ^:private default-system
|
(def ^:private default-system
|
||||||
{:name ::default-system
|
{:name ::default-system
|
||||||
:compile
|
:compile
|
||||||
@@ -49,7 +65,8 @@
|
|||||||
|
|
||||||
(defmethod ig/init-key ::routes
|
(defmethod ig/init-key ::routes
|
||||||
[_ cfg]
|
[_ cfg]
|
||||||
["" {:middleware [[default-system cfg]
|
["" {:middleware [[auth (cf/get :management-api-shared-key)]
|
||||||
|
[default-system cfg]
|
||||||
[transaction]]}
|
[transaction]]}
|
||||||
["/authenticate"
|
["/authenticate"
|
||||||
{:handler authenticate
|
{:handler authenticate
|
||||||
|
|||||||
Reference in New Issue
Block a user