Skip to content

Commit b41a08d

Browse files
author
Khaled Basbous
authored
fix(Credential): Fix retrive-by-id and query-collection for credential (#1017)
1 parent 253ee0e commit b41a08d

3 files changed

Lines changed: 35 additions & 12 deletions

File tree

code/src/com/sixsq/nuvla/server/resources/common/crud.clj

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,21 @@
4646
(throw (r/ex-bad-method request)))
4747

4848

49+
(defmulti query-collection (fn [collection-id _] collection-id))
50+
51+
(defn query-collection-default
52+
[collection-id options]
53+
(db/query collection-id (assoc options :nuvla/authn auth/internal-identity)))
54+
55+
(defmethod query-collection :default
56+
[collection-id options]
57+
(query-collection-default collection-id options))
58+
4959
(defn query-as-admin
5060
"Calls the database query with the administrator user identity merged
5161
into the given options."
5262
[collection-id options]
53-
(db/query collection-id (assoc options :nuvla/authn auth/internal-identity) ))
63+
(query-collection collection-id options))
5464

5565
(defn query-native
5666
"Executes the database query as a native query."
@@ -83,13 +93,16 @@
8393

8494
(defmulti retrieve-by-id resource-id-dispatch)
8595

86-
87-
(defmethod retrieve-by-id :default
88-
[resource-id & [request]]
96+
(defn retrieve-by-id-default
97+
[resource-id request]
8998
(some-> resource-id
9099
db/retrieve
91100
(a/throw-cannot-view request)))
92101

102+
(defmethod retrieve-by-id :default
103+
[resource-id & [request]]
104+
(retrieve-by-id-default resource-id request))
105+
93106

94107
(defn retrieve-by-id-as-admin
95108
"Calls the retrieve-by-id multimethod with options that set the user
@@ -102,10 +115,11 @@
102115
"Same as `retrieve-by-id-as-admin` but if the resource is not found returns nil
103116
instead of throwing an exception."
104117
[resource-id]
105-
(try (retrieve-by-id-as-admin resource-id)
106-
(catch Exception ex
107-
(when-not (= 404 (:status (ex-data ex)))
108-
(throw ex)))))
118+
(try
119+
(retrieve-by-id-as-admin resource-id)
120+
(catch Exception ex
121+
(when-not (= 404 (:status (ex-data ex)))
122+
(throw ex)))))
109123

110124

111125
(defn id->user-request

code/src/com/sixsq/nuvla/server/resources/credential.clj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,10 @@ passwords) or other services (e.g. TLS credentials for Docker). Creating new
310310
:body body}]
311311
(crud/edit request)))
312312

313+
(defmethod crud/retrieve-by-id resource-type
314+
[id & [request]]
315+
(-> (crud/retrieve-by-id-default id request)
316+
eu/decrypt-credential-secrets))
313317

314318
(def retrieve-impl (std-crud/retrieve-fn resource-type))
315319
(defmethod crud/retrieve resource-type
@@ -325,8 +329,15 @@ passwords) or other services (e.g. TLS credentials for Docker). Creating new
325329
(a/throw-cannot-delete request)
326330
(special-delete request)))
327331

332+
(defmethod crud/query-collection resource-type
333+
[collection-id options]
334+
(let [[metadata entries] (crud/query-collection-default collection-id options)]
335+
[metadata (if eu/ENCRYPTION-KEY
336+
(map eu/decrypt-credential-secrets entries)
337+
entries)]))
328338

329339
(def query-impl (std-crud/query-fn resource-type collection-acl collection-type))
340+
330341
(defmethod crud/query resource-type
331342
[request]
332343
(eu/decrypt-response-query-credentials (query-impl request)))

code/src/com/sixsq/nuvla/server/resources/credential/encrypt_utils.clj

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050

5151
(defn decrypt-credential-secrets
5252
[{:keys [initialization-vector] :as credential}]
53-
(if initialization-vector
53+
(if (and ENCRYPTION-KEY initialization-vector)
5454
(let [iv (codecs/b64->bytes initialization-vector)
5555
secrets-entries (->> (select-keys credential secret-keys)
5656
(filter (fn [[_ v]] (str/starts-with? v encrypted-starter-indicator)))
@@ -66,9 +66,7 @@
6666

6767
(defn decrypt-response-body-secrets
6868
[response]
69-
(if ENCRYPTION-KEY
70-
(update response :body decrypt-credential-secrets)
71-
response))
69+
(update response :body decrypt-credential-secrets))
7270

7371
(defn decrypt-response-query-credentials
7472
[{{:keys [resources]} :body :as response}]

0 commit comments

Comments
 (0)