gds-api-adapters 73.0.0 → 75.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e27eb1087cbf7f61da350a3c09dc2d1c235ed5b6ee6b096ae9ca3c3f25edb2e9
4
- data.tar.gz: 24af32669af502a68d4085e86be5705e8ff98f6899e50f6b01df1b3b884a2e56
3
+ metadata.gz: 36e41430cc8105c52489b3ba8bde38b4027a124a4a0cc3ca4ddabf120dd97de8
4
+ data.tar.gz: c61130dc56390e9a6ff2962589686bb232abbd506b742c14d6d77a9f6ac7500a
5
5
  SHA512:
6
- metadata.gz: b4b6328db22729d14c8f4f456d8886dd2de5de9d75efd1fbb5f00124f1f067fe520ea5556d67ac32ffd36653598ee9895d029abfcd2ecc3a1ef22c8d8b618574
7
- data.tar.gz: 9c78e6148f87c00c682222bf1468a32b9e70aa05b7a1163f2aabc2b7d0c050d591a43a80ccf502e6f7c01b695859effc33879ca3ced8dd7f3912eed4a2f75c39
6
+ metadata.gz: 2b3b29f19b7f55cff24242a9370bfc3cc7b4392de6f9fe84e4d64067bdeabf56b8d35468f2556d86648efb5f7189e3c527203d63ace5ffd6745ad513701addd6
7
+ data.tar.gz: 5efaa1939f0b3c8644ee3e8c19dc208419cfc6344d3b644c506e76e87965923f3f1c1c9427dc1702be32560caeea38fee900ec5a06ee09b47533324bb3c9e8e0
@@ -11,14 +11,14 @@ class GdsApi::AccountApi < GdsApi::Base
11
11
  # Get an OAuth sign-in URL to redirect the user to
12
12
  #
13
13
  # @param [String, nil] redirect_path path on GOV.UK to send the user to after authentication
14
- # @param [String, nil] level_of_authentication either "level1" (require MFA) or "level0" (do not require MFA)
14
+ # @param [Boolean, nil] mfa whether to authenticate the user with MFA or not
15
15
  #
16
16
  # @return [Hash] An authentication URL and the OAuth state parameter (for CSRF protection)
17
- def get_sign_in_url(redirect_path: nil, level_of_authentication: nil)
17
+ def get_sign_in_url(redirect_path: nil, mfa: false)
18
18
  querystring = nested_query_string(
19
19
  {
20
20
  redirect_path: redirect_path,
21
- level_of_authentication: level_of_authentication,
21
+ mfa: mfa,
22
22
  }.compact,
23
23
  )
24
24
  get_json("#{endpoint}/api/oauth2/sign-in?#{querystring}")
@@ -34,6 +34,15 @@ class GdsApi::AccountApi < GdsApi::Base
34
34
  post_json("#{endpoint}/api/oauth2/callback", code: code, state: state)
35
35
  end
36
36
 
37
+ # Get an OIDC end-session URL to redirect the user to
38
+ #
39
+ # @param [String, nil] govuk_account_session Value of the session header
40
+ #
41
+ # @return [Hash] An end-session URL
42
+ def get_end_session_url(govuk_account_session: nil)
43
+ get_json("#{endpoint}/api/oauth2/end-session", auth_headers(govuk_account_session))
44
+ end
45
+
37
46
  # Get all the information about a user needed to render the account home page
38
47
  #
39
48
  # @param [String] govuk_account_session Value of the session header
@@ -56,13 +65,17 @@ class GdsApi::AccountApi < GdsApi::Base
56
65
  # @param [String, nil] email The user's current
57
66
  # @param [Boolean, nil] email_verified Whether the user's current email address is verified
58
67
  # @param [Boolean, nil] has_unconfirmed_email Whether the user has a new, pending, email address
68
+ # @param [Boolean, nil] cookie_consent Whether the user has consented to analytics cookies
69
+ # @param [Boolean, nil] feedback_consent Whether the user has consented to being contacted for feedback
59
70
  #
60
71
  # @return [Hash] The user's subject identifier and email attributes
61
- def update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil)
72
+ def update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil, cookie_consent: nil, feedback_consent: nil)
62
73
  params = {
63
74
  email: email,
64
75
  email_verified: email_verified,
65
76
  has_unconfirmed_email: has_unconfirmed_email,
77
+ cookie_consent: cookie_consent,
78
+ feedback_consent: feedback_consent,
66
79
  }.compact
67
80
 
68
81
  patch_json("#{endpoint}/api/oidc-users/#{subject_identifier}", params)
@@ -118,46 +131,6 @@ class GdsApi::AccountApi < GdsApi::Base
118
131
  delete_json("#{endpoint}/api/email-subscriptions/#{CGI.escape(name)}", {}, auth_headers(govuk_account_session))
119
132
  end
120
133
 
121
- # Look up all pages saved by a user in their Account
122
- #
123
- # @param [String] govuk_account_session Value of the session header
124
- #
125
- # @return [Hash] containing :saved_pages, an array of single saved page hashes
126
- def get_saved_pages(govuk_account_session:)
127
- get_json("#{endpoint}/api/saved-pages", auth_headers(govuk_account_session))
128
- end
129
-
130
- # Return a single page by unique URL
131
- #
132
- # @param [String] the path of a page to check
133
- # @param [String] govuk_account_session Value of the session header
134
- #
135
- # @return [Hash] containing :saved_page, a hash of a single saved page value
136
- def get_saved_page(page_path:, govuk_account_session:)
137
- get_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", auth_headers(govuk_account_session))
138
- end
139
-
140
- # Upsert a single saved page entry in a users account
141
- #
142
- # @param [String] the path of a page to check
143
- # @param [String] govuk_account_session Value of the session header
144
- #
145
- # @return [Hash] A single saved page value (if sucessful)
146
- def save_page(page_path:, govuk_account_session:)
147
- put_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", {}, auth_headers(govuk_account_session))
148
- end
149
-
150
- # Delete a single saved page entry from a users account
151
- #
152
- # @param [String] the path of a page to check
153
- # @param [String] govuk_account_session Value of the session header
154
- #
155
- # @return [GdsApi::Response] A status code of 204 indicates the saved page has been successfully deleted.
156
- # A status code of 404 indicates there is no saved page with this path.
157
- def delete_saved_page(page_path:, govuk_account_session:)
158
- delete_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", {}, auth_headers(govuk_account_session))
159
- end
160
-
161
134
  private
162
135
 
163
136
  def nested_query_string(params)
@@ -19,8 +19,8 @@ module GdsApi
19
19
  #########################
20
20
  # GET /api/oauth2/sign-in
21
21
  #########################
22
- def stub_account_api_get_sign_in_url(redirect_path: nil, level_of_authentication: nil, auth_uri: "http://auth/provider", state: "state")
23
- querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path, level_of_authentication: level_of_authentication }.compact)
22
+ def stub_account_api_get_sign_in_url(redirect_path: nil, mfa: false, auth_uri: "http://auth/provider", state: "state")
23
+ querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path, mfa: mfa }.compact)
24
24
  stub_request(:get, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/sign-in?#{querystring}")
25
25
  .to_return(
26
26
  status: 200,
@@ -46,16 +46,36 @@ module GdsApi
46
46
  .to_return(status: 401)
47
47
  end
48
48
 
49
+ #############################
50
+ # GET /api/oauth2/end-session
51
+ #############################
52
+ def stub_account_api_get_end_session_url(govuk_account_session: nil, end_session_uri: "http://auth/provider")
53
+ if govuk_account_session
54
+ stub_request(:get, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/end-session")
55
+ .with(headers: { GdsApi::AccountApi::AUTH_HEADER_NAME => govuk_account_session })
56
+ .to_return(
57
+ status: 200,
58
+ body: { end_session_uri: end_session_uri }.to_json,
59
+ )
60
+ else
61
+ stub_request(:get, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/end-session")
62
+ .to_return(
63
+ status: 200,
64
+ body: { end_session_uri: end_session_uri }.to_json,
65
+ )
66
+ end
67
+ end
68
+
49
69
  ###############
50
70
  # GET /api/user
51
71
  ###############
52
- def stub_account_api_user_info(id: "user-id", level_of_authentication: "level0", email: "email@example.com", email_verified: true, has_unconfirmed_email: false, services: {}, **options)
72
+ def stub_account_api_user_info(id: "user-id", mfa: false, email: "email@example.com", email_verified: true, has_unconfirmed_email: false, services: {}, **options)
53
73
  stub_account_api_request(
54
74
  :get,
55
75
  "/api/user",
56
76
  response_body: {
57
77
  id: id,
58
- level_of_authentication: level_of_authentication,
78
+ mfa: mfa,
59
79
  email: email,
60
80
  email_verified: email_verified,
61
81
  has_unconfirmed_email: has_unconfirmed_email,
@@ -105,16 +125,18 @@ module GdsApi
105
125
  ###########################################
106
126
  # PATCH /api/oidc-users/:subject_identifier
107
127
  ###########################################
108
- def stub_update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil, old_email: nil, old_email_verified: nil, old_has_unconfirmed_email: nil)
128
+ def stub_update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil, cookie_consent: nil, feedback_consent: nil, old_email: nil, old_email_verified: nil, old_has_unconfirmed_email: nil, old_cookie_consent: nil, old_feedback_consent: nil)
109
129
  stub_account_api_request(
110
130
  :patch,
111
131
  "/api/oidc-users/#{subject_identifier}",
112
- with: { body: hash_including({ email: email, email_verified: email_verified, has_unconfirmed_email: has_unconfirmed_email }.compact) },
132
+ with: { body: hash_including({ email: email, email_verified: email_verified, has_unconfirmed_email: has_unconfirmed_email, cookie_consent: cookie_consent, feedback_consent: feedback_consent }.compact) },
113
133
  response_body: {
114
134
  sub: subject_identifier,
115
135
  email: email || old_email,
116
136
  email_verified: email_verified || old_email_verified,
117
137
  has_unconfirmed_email: has_unconfirmed_email || old_has_unconfirmed_email,
138
+ cookie_consent: cookie_consent || old_cookie_consent,
139
+ feedback_consent: feedback_consent || old_feedback_consent,
118
140
  },
119
141
  )
120
142
  end
@@ -236,13 +258,12 @@ module GdsApi
236
258
  )
237
259
  end
238
260
 
239
- def stub_account_api_forbidden_has_attributes(attributes: [], needed_level_of_authentication: "level1", **options)
261
+ def stub_account_api_forbidden_has_attributes(attributes: [], **options)
240
262
  querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
241
263
  stub_account_api_request(
242
264
  :get,
243
265
  "/api/attributes?#{querystring}",
244
266
  response_status: 403,
245
- response_body: { needed_level_of_authentication: needed_level_of_authentication },
246
267
  **options,
247
268
  )
248
269
  end
@@ -269,150 +290,12 @@ module GdsApi
269
290
  )
270
291
  end
271
292
 
272
- def stub_account_api_forbidden_set_attributes(attributes: nil, needed_level_of_authentication: "level1", **options)
293
+ def stub_account_api_forbidden_set_attributes(attributes: nil, **options)
273
294
  stub_account_api_request(
274
295
  :patch,
275
296
  "/api/attributes",
276
297
  with: { body: hash_including({ attributes: attributes }.compact) },
277
298
  response_status: 403,
278
- response_body: { needed_level_of_authentication: needed_level_of_authentication },
279
- **options,
280
- )
281
- end
282
-
283
- ######################
284
- # GET /api/saved-pages
285
- ######################
286
- def stub_account_api_returning_saved_pages(saved_pages: [], **options)
287
- stub_account_api_request(
288
- :get,
289
- "/api/saved-pages",
290
- response_body: { saved_pages: saved_pages },
291
- **options,
292
- )
293
- end
294
-
295
- def stub_account_api_unauthorized_get_saved_pages(**options)
296
- stub_account_api_request(
297
- :get,
298
- "/api/saved-pages",
299
- response_status: 401,
300
- **options,
301
- )
302
- end
303
-
304
- #################################
305
- # GET /api/saved_pages/:page_path
306
- #################################
307
- def stub_account_api_get_saved_page(page_path:, content_id: "46163ed2-1777-4ee6-bdd4-6a2007e49d8f", title: "Ministry of Magic", **options)
308
- stub_account_api_request(
309
- :get,
310
- "/api/saved-pages/#{CGI.escape(page_path)}",
311
- response_body: {
312
- saved_page: {
313
- page_path: page_path,
314
- content_id: content_id,
315
- title: title,
316
- },
317
- },
318
- **options,
319
- )
320
- end
321
-
322
- def stub_account_api_does_not_have_saved_page(page_path:, **options)
323
- stub_account_api_request(
324
- :get,
325
- "/api/saved-pages/#{CGI.escape(page_path)}",
326
- response_status: 404,
327
- **options,
328
- )
329
- end
330
-
331
- def stub_account_api_unauthorized_get_saved_page(page_path:, **options)
332
- stub_account_api_request(
333
- :get,
334
- "/api/saved-pages/#{CGI.escape(page_path)}",
335
- response_status: 401,
336
- **options,
337
- )
338
- end
339
-
340
- #################################
341
- # PUT /api/saved-pages/:page_path
342
- #################################
343
- def stub_account_api_save_page(page_path:, content_id: "c840bfa2-011a-42cc-ac7a-a6da990aff0b", title: "Ministry of Magic", **options)
344
- stub_account_api_request(
345
- :put,
346
- "/api/saved-pages/#{CGI.escape(page_path)}",
347
- response_body: {
348
- saved_page: {
349
- page_path: page_path,
350
- content_id: content_id,
351
- title: title,
352
- },
353
- },
354
- **options,
355
- )
356
- end
357
-
358
- def stub_account_api_save_page_already_exists(page_path:, **options)
359
- stub_account_api_save_page(page_path: page_path, **options)
360
- end
361
-
362
- def stub_account_api_save_page_cannot_save_page(page_path:, **options)
363
- stub_account_api_request(
364
- :put,
365
- "/api/saved-pages/#{CGI.escape(page_path)}",
366
- response_status: 422,
367
- response_body: cannot_save_page_problem_detail({ page_path: page_path }),
368
- **options,
369
- )
370
- end
371
-
372
- def stub_account_api_unauthorized_save_page(page_path:, **options)
373
- stub_account_api_request(
374
- :put,
375
- "/api/saved-pages/#{CGI.escape(page_path)}",
376
- response_status: 401,
377
- **options,
378
- )
379
- end
380
-
381
- def cannot_save_page_problem_detail(option = {})
382
- {
383
- title: "Cannot save page",
384
- detail: "Cannot save page with path #{option['page_path']}, check it is not blank, and is a well formatted url path.",
385
- type: "https://github.com/alphagov/account-api/blob/main/docs/api.md#cannot-save-page",
386
- **option,
387
- }
388
- end
389
-
390
- ####################################
391
- # DELETE /api/saved-pages/:page_path
392
- ####################################
393
- def stub_account_api_delete_saved_page(page_path:, **options)
394
- stub_account_api_request(
395
- :delete,
396
- "/api/saved-pages/#{CGI.escape(page_path)}",
397
- response_status: 204,
398
- **options,
399
- )
400
- end
401
-
402
- def stub_account_api_delete_saved_page_does_not_exist(page_path:, **options)
403
- stub_account_api_request(
404
- :delete,
405
- "/api/saved-pages/#{CGI.escape(page_path)}",
406
- response_status: 404,
407
- **options,
408
- )
409
- end
410
-
411
- def stub_account_api_unauthorized_delete_saved_page(page_path:, **options)
412
- stub_account_api_request(
413
- :delete,
414
- "/api/saved-pages/#{CGI.escape(page_path)}",
415
- response_status: 401,
416
299
  **options,
417
300
  )
418
301
  end
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = "73.0.0".freeze
2
+ VERSION = "75.1.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds-api-adapters
3
3
  version: !ruby/object:Gem::Version
4
- version: 73.0.0
4
+ version: 75.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-26 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable