Skip to content

Commit f4689ef

Browse files
author
khaled basbous
committed
fix(Deployment): Checks for subscription and access to cres and infras should be done as owner of the deployment
1 parent e5619a8 commit f4689ef

7 files changed

Lines changed: 54 additions & 63 deletions

File tree

code/src/com/sixsq/nuvla/auth/utils.clj

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,49 @@
22
(:require
33
[clojure.string :as str]))
44

5-
65
(def ^{:doc "Internal administrator identity for database queries."}
76
internal-identity
87
{:user-id "internal"
98
:active-claim "group/nuvla-admin"
109
:claims #{"group/nuvla-admin" "group/nuvla-user" "group/nuvla-anon"}})
1110

11+
(defn get-internal-request
12+
[]
13+
{:nuvla/authn internal-identity})
14+
15+
(defn get-owner-authn
16+
[{:keys [owner] :as _resource}]
17+
{:claims #{owner "group/nuvla-user" "group/nuvla-anon"}
18+
:user-id owner
19+
:active-claim owner})
20+
21+
(defn get-owner-request
22+
[resource]
23+
{:nuvla/authn (get-owner-authn resource)})
24+
25+
(defn get-resource-id-authn
26+
[{id :id :as _resource}]
27+
{:claims [id "group/nuvla-user" "group/nuvla-anon"]
28+
:user-id id
29+
:active-claim id})
1230

1331
(defn current-authentication
1432
"Extracts the current authentication from the ring request."
1533
[{:keys [nuvla/authn] :as _request}]
1634
(select-keys authn [:user-id :active-claim :claims]))
1735

18-
1936
(defn current-user-id
2037
[request]
2138
(:user-id (current-authentication request)))
2239

23-
2440
(defn current-active-claim
2541
[request]
2642
(:active-claim (current-authentication request)))
2743

28-
2944
(defn current-session-id
3045
[request]
3146
(->> request
3247
current-authentication
3348
:claims
3449
(filter #(str/starts-with? % "session/"))
3550
first))
36-
37-

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,9 @@ a container orchestration engine.
297297
deployment (-> (crud/retrieve-by-id-as-admin id)
298298
(u/throw-cannot-do-action-invalid-state utils/can-start? "start")
299299
(utils/throw-when-payment-required request)
300-
(utils/throw-can-not-access-registries-creds request)
301-
(utils/throw-can-not-access-helm-repo-cred request)
302-
(utils/throw-can-not-access-helm-repo-url request))
300+
utils/throw-can-not-access-registries-creds
301+
utils/throw-can-not-access-helm-repo-cred
302+
utils/throw-can-not-access-helm-repo-url)
303303
stopped? (= (:state deployment) "STOPPED")
304304
user-rights? (get-in deployment [:module :content :requires-user-rights])
305305
data? (some? (:data deployment))
@@ -384,9 +384,9 @@ a container orchestration engine.
384384
(u/throw-cannot-do-action-invalid-state
385385
utils/can-update? "update_deployment")
386386
(utils/throw-when-payment-required request)
387-
(utils/throw-can-not-access-registries-creds request)
388-
(utils/throw-can-not-access-helm-repo-cred request)
389-
(utils/throw-can-not-access-helm-repo-url request))
387+
utils/throw-can-not-access-registries-creds
388+
utils/throw-can-not-access-helm-repo-cred
389+
utils/throw-can-not-access-helm-repo-url)
390390
new (-> current
391391
(assoc :state "UPDATING")
392392
(edit-deployment request))]

code/src/com/sixsq/nuvla/server/resources/deployment/utils.clj

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -175,25 +175,25 @@
175175
(resource-log/create-log id components acl opts)))
176176

177177
(defn throw-can-not-access-registries-creds
178-
[{:keys [registries-credentials] :as resource} request]
178+
[{:keys [registries-credentials] :as resource}]
179179
(let [preselected-creds (-> resource
180180
(get-in [:module :content :registries-credentials] [])
181181
set)
182182
creds-to-be-checked (set/difference (set registries-credentials) preselected-creds)]
183-
(module-utils/throw-cannot-access-registries-credentials creds-to-be-checked request)
183+
(module-utils/throw-cannot-access-registries-credentials creds-to-be-checked (auth/get-owner-request resource))
184184
resource))
185185

186186

187187
(defn throw-can-not-access-helm-repo-url
188-
[resource request]
188+
[resource]
189189
(let [helm-repo-url (get-in resource [:module :content :helm-repo-url])]
190-
(module-utils/throw-can-not-access-helm-repo-url helm-repo-url request)
190+
(module-utils/throw-can-not-access-helm-repo-url helm-repo-url (auth/get-owner-request resource))
191191
resource))
192192

193193
(defn throw-can-not-access-helm-repo-cred
194-
[resource request]
194+
[resource]
195195
(let [cred (get-in resource [:module :content :helm-repo-cred])]
196-
(module-utils/throw-can-not-access-helm-repo-cred cred request)
196+
(module-utils/throw-can-not-access-helm-repo-cred cred (auth/get-owner-request resource))
197197
resource))
198198

199199

@@ -291,20 +291,18 @@
291291
(seq files) (assoc :files files)))))
292292

293293
(defn throw-when-payment-required
294-
[{{:keys [price] :as module} :module :as deployment} request]
294+
[{{:keys [price] :as module} :module owner :owner :as deployment} request]
295295
(if (or (nil? config-nuvla/*stripe-api-key*)
296296
(a/is-admin? (auth/current-authentication request))
297-
(let [active-claim (auth/current-active-claim request)]
298-
(or
299-
(a/can-edit-data? module request)
300-
(case (:status (payment/active-claim->subscription active-claim))
301-
("active" "past_due") true
302-
"trialing" (or (nil? price)
303-
(:follow-customer-trial price)
304-
(-> active-claim
305-
payment/active-claim->s-customer
306-
payment/can-pay?))
307-
false))))
297+
(a/can-edit-data? module request)
298+
(case (:status (payment/active-claim->subscription owner))
299+
("active" "past_due") true
300+
"trialing" (or (nil? price)
301+
(:follow-customer-trial price)
302+
(-> owner
303+
payment/active-claim->s-customer
304+
payment/can-pay?))
305+
false))
308306
deployment
309307
(payment/throw-payment-required)))
310308

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

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -111,26 +111,6 @@ These resources represent a deployment set that regroups deployments.
111111
;; CRUD operations
112112
;;
113113

114-
(defn get-owner-authn
115-
[{:keys [owner] :as _resource}]
116-
{:claims #{owner "group/nuvla-user"}
117-
:user-id owner
118-
:active-claim owner})
119-
120-
(defn get-owner-request
121-
[resource]
122-
{:nuvla/authn (get-owner-authn resource)})
123-
124-
(defn get-dg-authn
125-
[{dg-id :id :as _resource}]
126-
{:claims [dg-id "group/nuvla-user"]
127-
:user-id dg-id
128-
:active-claim dg-id})
129-
130-
(defn get-internal-request
131-
[]
132-
{:nuvla/authn auth/internal-identity})
133-
134114
(defn load-resource-throw-not-allowed-action
135115
[{{:keys [uuid]} :params :as request}]
136116
(-> (str resource-type "/" uuid)
@@ -143,7 +123,7 @@ These resources represent a deployment set that regroups deployments.
143123
(divergence-map (load-resource-throw-not-allowed-action request) request))
144124
([{:keys [applications-sets] :as deployment-set} _request]
145125
(when (seq applications-sets)
146-
(let [owner-request (get-owner-request deployment-set)
126+
(let [owner-request (auth/get-owner-request deployment-set)
147127
applications-sets (-> deployment-set
148128
utils/get-applications-sets-href
149129
(crud/get-resource-throw-nok owner-request))
@@ -182,7 +162,7 @@ These resources represent a deployment set that regroups deployments.
182162

183163
(defn create-module-apps-set
184164
[{:keys [owner modules] :as resource} request]
185-
(let [modules-data (mapv #(retrieve-module-as % (get-owner-authn resource))
165+
(let [modules-data (mapv #(retrieve-module-as % (auth/get-owner-authn resource))
186166
(distinct modules))]
187167
(create-module
188168
{:path (str module-utils/project-apps-sets "/" (u/rand-uuid))
@@ -215,7 +195,7 @@ These resources represent a deployment set that regroups deployments.
215195
If :fleet is not specified, it is computed by querying edges satisfying the :fleet-filter.
216196
If both :fleet and :fleet-filter are specified, they are stored as-is, no consistency check is made."
217197
[{:keys [fleet fleet-filter overwrites] :as resource}]
218-
(let [owner-authn (get-owner-authn resource)
198+
(let [owner-authn (auth/get-owner-authn resource)
219199
owner-request {:nuvla/authn owner-authn}
220200
apps-set-id (create-module-apps-set resource owner-request)
221201
fleet (or fleet (map :id (some-> fleet-filter (utils/query-nuvlaboxes-as owner-authn))))]
@@ -266,10 +246,10 @@ These resources represent a deployment set that regroups deployments.
266246
(defn check-edges-permissions
267247
[{:keys [id] :as resource}]
268248
(let [fleet (get-in resource [:applications-sets 0 :overwrites 0 :fleet])
269-
missing-edges (utils/get-missing-edges resource (get-internal-request))
249+
missing-edges (utils/get-missing-edges resource (auth/get-internal-request))
270250
not-deleted-edges (set/difference (set fleet) (set missing-edges))
271251
cimi-filter (str "id=['" (str/join "','" not-deleted-edges) "']")
272-
retrieved-fleet (utils/query-nuvlaboxes-as cimi-filter (get-owner-authn resource))]
252+
retrieved-fleet (utils/query-nuvlaboxes-as cimi-filter (auth/get-owner-authn resource))]
273253
(when (not= (count not-deleted-edges) (count retrieved-fleet))
274254
(throw (r/ex-response "All edges must be visible to DG owner" 403 id)))
275255
resource))
@@ -278,7 +258,7 @@ These resources represent a deployment set that regroups deployments.
278258
[{:keys [id] :as resource}]
279259
(let [apps (get-in resource [:applications-sets 0 :overwrites 0 :applications])
280260
cimi-filter (str "id=['" (str/join "','" (map :id apps)) "']")
281-
retrieved-apps (utils/query-modules-as cimi-filter (get-owner-authn resource))]
261+
retrieved-apps (utils/query-modules-as cimi-filter (auth/get-owner-authn resource))]
282262
(when (not= (count apps) (count retrieved-apps))
283263
(throw (r/ex-response (str "All apps must be visible to DG owner : "
284264
(mapv :id apps)
@@ -316,8 +296,8 @@ These resources represent a deployment set that regroups deployments.
316296

317297
(defn authn-info-payload
318298
[resource]
319-
{:dg-owner-authn-info (get-owner-authn resource)
320-
:dg-authn-info (get-dg-authn resource)})
299+
{:dg-owner-authn-info (auth/get-owner-authn resource)
300+
:dg-authn-info (auth/get-resource-id-authn resource)})
321301

322302
(defn action-bulk
323303
[{:keys [id] :as resource} {{:keys [action]} :params :as request}]
@@ -361,7 +341,7 @@ These resources represent a deployment set that regroups deployments.
361341
(defmethod crud/do-action [resource-type utils/action-plan]
362342
[request]
363343
(let [deployment-set (load-resource-throw-not-allowed-action request)
364-
owner-request (get-owner-request deployment-set)
344+
owner-request (auth/get-owner-request deployment-set)
365345
applications-sets (-> deployment-set
366346
utils/get-applications-sets-href
367347
(crud/get-resource-throw-nok owner-request))]
@@ -370,7 +350,7 @@ These resources represent a deployment set that regroups deployments.
370350
(defmethod crud/do-action [resource-type utils/action-check-requirements]
371351
[request]
372352
(let [deployment-set (load-resource-throw-not-allowed-action request)
373-
owner-request (get-owner-request deployment-set)
353+
owner-request (auth/get-owner-request deployment-set)
374354
applications-sets (-> deployment-set
375355
utils/get-applications-sets-href
376356
(crud/get-resource-throw-nok owner-request))]

code/src/com/sixsq/nuvla/server/resources/deployment_set/utils.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@
406406

407407
(defn query-nuvlaboxes
408408
[cimi-filter request]
409-
(query-nuvlaboxes-as cimi-filter (:nuvla/authn request)))
409+
(query-nuvlaboxes-as cimi-filter (auth/current-authentication request)))
410410

411411
(defn get-missing-edges
412412
[deployment-set request]

code/test/com/sixsq/nuvla/server/resources/deployment/utils_test.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,4 @@
114114
[m-a m-b] {:arg1 [m-a m-b] :arg2 [m-a (assoc m-b :value "any")]})))
115115

116116
(deftest throw-can-not-access-helm-repo-cred
117-
(is (= (t/throw-can-not-access-helm-repo-cred {} {}) {})))
117+
(is (= (t/throw-can-not-access-helm-repo-cred {}) {})))

code/test/com/sixsq/nuvla/server/resources/module_lifecycle_test.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@
657657
(lifecycle-test-module module-spec/subtype-app-helm valid-application)))
658658

659659
(deftest throw-can-not-access-helm-repo-cred
660-
(is (= (t/throw-can-not-access-helm-repo-cred {} {}) {})))
660+
(is (= (t/throw-can-not-access-helm-repo-cred {}) {})))
661661

662662
(deftest bad-methods
663663
(let [resource-uri (str p/service-context (u/new-resource-id module/resource-type))]

0 commit comments

Comments
 (0)