gds-api-adapters 74.0.0 → 75.3.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: d0fc1bf1088a309b3cea4d2db1528092df0b5c0e87014f268333076cb1536766
4
- data.tar.gz: 92932cee9d379fa3dff38449a43544a3b0a38165e34c382a38b8494ec39876bd
3
+ metadata.gz: 207e19a65d19c45b030d88ccc1028e781def6a120dfedcc725615628b7d2f35d
4
+ data.tar.gz: a838e9f19dc4e7f8b45017aacd0fae259f1cb353ee44356c8c34066054fb1ea1
5
5
  SHA512:
6
- metadata.gz: 8c812eed0e923623c4225ba3a88a414c2b08b012656fd43f9bcf35b928c1a76a5874c03cf0f5debc6b170d5fdd35db7ab653d549e67236a52a0effdad0e61e3c
7
- data.tar.gz: ce7406f091e64ca710e505b00134397b3769e1a51c038d197d643c32307cf993646e01be1a8eb8f8b7f6a942fe490bda586ffc1aab0fcf2af6e958f7c46d429c
6
+ metadata.gz: d95b69e442c280cf3fbe5fa84dbfc1d16e9462a1c160f0678d7cd78b8a1f0426b4a5878eac6e78a5755f5eff27b293f1832b5d4a35a0958c5aed50d86bee1736
7
+ data.tar.gz: c167d604668e3685b63c6d83e7a09d6332bd40b2099fa7f4d9afd29d482aa240eef8398b67a0e8aeced29fde34847fe0a3f28d980d7da571cb63efb5b3b251c8
@@ -52,6 +52,17 @@ class GdsApi::AccountApi < GdsApi::Base
52
52
  get_json("#{endpoint}/api/user", auth_headers(govuk_account_session))
53
53
  end
54
54
 
55
+ # Find a user by email address, returning whether they match the given session (if any)
56
+ #
57
+ # @param [String] email The email address to search for
58
+ # @param [String, nil] govuk_account_session Value of the session header, if not given just checks if the given email address exists.
59
+ #
60
+ # @return [Hash] One field, "match", indicating whether the session matches the given email address
61
+ def match_user_by_email(email:, govuk_account_session: nil)
62
+ querystring = nested_query_string({ email: email })
63
+ get_json("#{endpoint}/api/user/match-by-email?#{querystring}", auth_headers(govuk_account_session))
64
+ end
65
+
55
66
  # Delete a users account
56
67
  #
57
68
  # @param [String] subject_identifier The identifier of the user, shared between the auth service and GOV.UK.
@@ -62,16 +73,20 @@ class GdsApi::AccountApi < GdsApi::Base
62
73
  # Update the user record with privileged information from the auth service. Only the auth service will call this.
63
74
  #
64
75
  # @param [String] subject_identifier The identifier of the user, shared between the auth service and GOV.UK.
65
- # @param [String, nil] email The user's current
76
+ # @param [String, nil] email The user's current email address
66
77
  # @param [Boolean, nil] email_verified Whether the user's current email address is verified
67
78
  # @param [Boolean, nil] has_unconfirmed_email Whether the user has a new, pending, email address
79
+ # @param [Boolean, nil] cookie_consent Whether the user has consented to analytics cookies
80
+ # @param [Boolean, nil] feedback_consent Whether the user has consented to being contacted for feedback
68
81
  #
69
82
  # @return [Hash] The user's subject identifier and email attributes
70
- def update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil)
83
+ def update_user_by_subject_identifier(subject_identifier:, email: nil, email_verified: nil, has_unconfirmed_email: nil, cookie_consent: nil, feedback_consent: nil)
71
84
  params = {
72
85
  email: email,
73
86
  email_verified: email_verified,
74
87
  has_unconfirmed_email: has_unconfirmed_email,
88
+ cookie_consent: cookie_consent,
89
+ feedback_consent: feedback_consent,
75
90
  }.compact
76
91
 
77
92
  patch_json("#{endpoint}/api/oidc-users/#{subject_identifier}", params)
@@ -127,46 +142,6 @@ class GdsApi::AccountApi < GdsApi::Base
127
142
  delete_json("#{endpoint}/api/email-subscriptions/#{CGI.escape(name)}", {}, auth_headers(govuk_account_session))
128
143
  end
129
144
 
130
- # Look up all pages saved by a user in their Account
131
- #
132
- # @param [String] govuk_account_session Value of the session header
133
- #
134
- # @return [Hash] containing :saved_pages, an array of single saved page hashes
135
- def get_saved_pages(govuk_account_session:)
136
- get_json("#{endpoint}/api/saved-pages", auth_headers(govuk_account_session))
137
- end
138
-
139
- # Return a single page by unique URL
140
- #
141
- # @param [String] the path of a page to check
142
- # @param [String] govuk_account_session Value of the session header
143
- #
144
- # @return [Hash] containing :saved_page, a hash of a single saved page value
145
- def get_saved_page(page_path:, govuk_account_session:)
146
- get_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", auth_headers(govuk_account_session))
147
- end
148
-
149
- # Upsert a single saved page entry in a users account
150
- #
151
- # @param [String] the path of a page to check
152
- # @param [String] govuk_account_session Value of the session header
153
- #
154
- # @return [Hash] A single saved page value (if sucessful)
155
- def save_page(page_path:, govuk_account_session:)
156
- put_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", {}, auth_headers(govuk_account_session))
157
- end
158
-
159
- # Delete a single saved page entry from a users account
160
- #
161
- # @param [String] the path of a page to check
162
- # @param [String] govuk_account_session Value of the session header
163
- #
164
- # @return [GdsApi::Response] A status code of 204 indicates the saved page has been successfully deleted.
165
- # A status code of 404 indicates there is no saved page with this path.
166
- def delete_saved_page(page_path:, govuk_account_session:)
167
- delete_json("#{endpoint}/api/saved-pages/#{CGI.escape(page_path)}", {}, auth_headers(govuk_account_session))
168
- end
169
-
170
145
  private
171
146
 
172
147
  def nested_query_string(params)
@@ -174,6 +149,6 @@ private
174
149
  end
175
150
 
176
151
  def auth_headers(govuk_account_session)
177
- { AUTH_HEADER_NAME => govuk_account_session }
152
+ { AUTH_HEADER_NAME => govuk_account_session }.compact
178
153
  end
179
154
  end
@@ -10,8 +10,9 @@ class GdsApi::EmailAlertApi < GdsApi::Base
10
10
  #
11
11
  # @param attributes [Hash] document_type, links, tags used to search existing subscriber lists
12
12
  def find_or_create_subscriber_list(attributes)
13
- if attributes["tags"] && attributes["links"]
14
- message = "please provide either tags or links (or neither), but not both"
13
+ present_fields = [attributes["content_id"], attributes["links"], attributes["tags"]].compact.count
14
+ if present_fields > 1
15
+ message = "please provide content_id, tags, or links (or none), but not more than one of them"
15
16
  raise ArgumentError, message
16
17
  end
17
18
 
@@ -31,12 +31,12 @@ module GdsApi
31
31
  ###########################
32
32
  # POST /api/oauth2/callback
33
33
  ###########################
34
- def stub_account_api_validates_auth_response(code: nil, state: nil, govuk_account_session: "govuk-account-session", redirect_path: "/", ga_client_id: "ga-client-id", cookie_consent: false)
34
+ def stub_account_api_validates_auth_response(code: nil, state: nil, govuk_account_session: "govuk-account-session", redirect_path: "/", ga_client_id: "ga-client-id", cookie_consent: false, feedback_consent: false)
35
35
  stub_request(:post, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/callback")
36
36
  .with(body: hash_including({ code: code, state: state }.compact))
37
37
  .to_return(
38
38
  status: 200,
39
- body: { govuk_account_session: govuk_account_session, redirect_path: redirect_path, ga_client_id: ga_client_id, cookie_consent: cookie_consent }.to_json,
39
+ body: { govuk_account_session: govuk_account_session, redirect_path: redirect_path, ga_client_id: ga_client_id, cookie_consent: cookie_consent, feedback_consent: feedback_consent }.to_json,
40
40
  )
41
41
  end
42
42
 
@@ -102,6 +102,41 @@ module GdsApi
102
102
  )
103
103
  end
104
104
 
105
+ ##############################
106
+ # GET /api/user/match-by-email
107
+ ##############################
108
+
109
+ def stub_account_api_match_user_by_email_matches(email:, **options)
110
+ stub_account_api_request(
111
+ :get,
112
+ "/api/user/match-by-email?#{Rack::Utils.build_nested_query({ email: email })}",
113
+ response_body: {
114
+ match: true,
115
+ },
116
+ **options,
117
+ )
118
+ end
119
+
120
+ def stub_account_api_match_user_by_email_does_not_match(email:, **options)
121
+ stub_account_api_request(
122
+ :get,
123
+ "/api/user/match-by-email?#{Rack::Utils.build_nested_query({ email: email })}",
124
+ response_body: {
125
+ match: false,
126
+ },
127
+ **options,
128
+ )
129
+ end
130
+
131
+ def stub_account_api_match_user_by_email_does_not_exist(email:, **options)
132
+ stub_account_api_request(
133
+ :get,
134
+ "/api/user/match-by-email?#{Rack::Utils.build_nested_query({ email: email })}",
135
+ response_status: 404,
136
+ **options,
137
+ )
138
+ end
139
+
105
140
  ############################################
106
141
  # DELETE /api/oidc-users/:subject_identifier
107
142
  ############################################
@@ -125,16 +160,18 @@ module GdsApi
125
160
  ###########################################
126
161
  # PATCH /api/oidc-users/:subject_identifier
127
162
  ###########################################
128
- 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)
163
+ 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)
129
164
  stub_account_api_request(
130
165
  :patch,
131
166
  "/api/oidc-users/#{subject_identifier}",
132
- with: { body: hash_including({ email: email, email_verified: email_verified, has_unconfirmed_email: has_unconfirmed_email }.compact) },
167
+ 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) },
133
168
  response_body: {
134
169
  sub: subject_identifier,
135
170
  email: email || old_email,
136
171
  email_verified: email_verified || old_email_verified,
137
172
  has_unconfirmed_email: has_unconfirmed_email || old_has_unconfirmed_email,
173
+ cookie_consent: cookie_consent || old_cookie_consent,
174
+ feedback_consent: feedback_consent || old_feedback_consent,
138
175
  },
139
176
  )
140
177
  end
@@ -297,143 +334,6 @@ module GdsApi
297
334
  **options,
298
335
  )
299
336
  end
300
-
301
- ######################
302
- # GET /api/saved-pages
303
- ######################
304
- def stub_account_api_returning_saved_pages(saved_pages: [], **options)
305
- stub_account_api_request(
306
- :get,
307
- "/api/saved-pages",
308
- response_body: { saved_pages: saved_pages },
309
- **options,
310
- )
311
- end
312
-
313
- def stub_account_api_unauthorized_get_saved_pages(**options)
314
- stub_account_api_request(
315
- :get,
316
- "/api/saved-pages",
317
- response_status: 401,
318
- **options,
319
- )
320
- end
321
-
322
- #################################
323
- # GET /api/saved_pages/:page_path
324
- #################################
325
- def stub_account_api_get_saved_page(page_path:, content_id: "46163ed2-1777-4ee6-bdd4-6a2007e49d8f", title: "Ministry of Magic", **options)
326
- stub_account_api_request(
327
- :get,
328
- "/api/saved-pages/#{CGI.escape(page_path)}",
329
- response_body: {
330
- saved_page: {
331
- page_path: page_path,
332
- content_id: content_id,
333
- title: title,
334
- },
335
- },
336
- **options,
337
- )
338
- end
339
-
340
- def stub_account_api_does_not_have_saved_page(page_path:, **options)
341
- stub_account_api_request(
342
- :get,
343
- "/api/saved-pages/#{CGI.escape(page_path)}",
344
- response_status: 404,
345
- **options,
346
- )
347
- end
348
-
349
- def stub_account_api_unauthorized_get_saved_page(page_path:, **options)
350
- stub_account_api_request(
351
- :get,
352
- "/api/saved-pages/#{CGI.escape(page_path)}",
353
- response_status: 401,
354
- **options,
355
- )
356
- end
357
-
358
- #################################
359
- # PUT /api/saved-pages/:page_path
360
- #################################
361
- def stub_account_api_save_page(page_path:, content_id: "c840bfa2-011a-42cc-ac7a-a6da990aff0b", title: "Ministry of Magic", **options)
362
- stub_account_api_request(
363
- :put,
364
- "/api/saved-pages/#{CGI.escape(page_path)}",
365
- response_body: {
366
- saved_page: {
367
- page_path: page_path,
368
- content_id: content_id,
369
- title: title,
370
- },
371
- },
372
- **options,
373
- )
374
- end
375
-
376
- def stub_account_api_save_page_already_exists(page_path:, **options)
377
- stub_account_api_save_page(page_path: page_path, **options)
378
- end
379
-
380
- def stub_account_api_save_page_cannot_save_page(page_path:, **options)
381
- stub_account_api_request(
382
- :put,
383
- "/api/saved-pages/#{CGI.escape(page_path)}",
384
- response_status: 422,
385
- response_body: cannot_save_page_problem_detail({ page_path: page_path }),
386
- **options,
387
- )
388
- end
389
-
390
- def stub_account_api_unauthorized_save_page(page_path:, **options)
391
- stub_account_api_request(
392
- :put,
393
- "/api/saved-pages/#{CGI.escape(page_path)}",
394
- response_status: 401,
395
- **options,
396
- )
397
- end
398
-
399
- def cannot_save_page_problem_detail(option = {})
400
- {
401
- title: "Cannot save page",
402
- detail: "Cannot save page with path #{option['page_path']}, check it is not blank, and is a well formatted url path.",
403
- type: "https://github.com/alphagov/account-api/blob/main/docs/api.md#cannot-save-page",
404
- **option,
405
- }
406
- end
407
-
408
- ####################################
409
- # DELETE /api/saved-pages/:page_path
410
- ####################################
411
- def stub_account_api_delete_saved_page(page_path:, **options)
412
- stub_account_api_request(
413
- :delete,
414
- "/api/saved-pages/#{CGI.escape(page_path)}",
415
- response_status: 204,
416
- **options,
417
- )
418
- end
419
-
420
- def stub_account_api_delete_saved_page_does_not_exist(page_path:, **options)
421
- stub_account_api_request(
422
- :delete,
423
- "/api/saved-pages/#{CGI.escape(page_path)}",
424
- response_status: 404,
425
- **options,
426
- )
427
- end
428
-
429
- def stub_account_api_unauthorized_delete_saved_page(page_path:, **options)
430
- stub_account_api_request(
431
- :delete,
432
- "/api/saved-pages/#{CGI.escape(page_path)}",
433
- response_status: 401,
434
- **options,
435
- )
436
- end
437
337
  end
438
338
  end
439
339
  end
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = "74.0.0".freeze
2
+ VERSION = "75.3.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: 74.0.0
4
+ version: 75.3.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-09-22 00:00:00.000000000 Z
11
+ date: 2021-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable