gds-api-adapters 71.0.0 → 71.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 +4 -4
- data/lib/gds_api/account_api.rb +20 -2
- data/lib/gds_api/exceptions.rb +4 -3
- data/lib/gds_api/link_checker_api.rb +0 -31
- data/lib/gds_api/test_helpers/account_api.rb +159 -47
- data/lib/gds_api/test_helpers/link_checker_api.rb +0 -17
- data/lib/gds_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9324b0ac6cf23eff191016dbb952b2cc4507d1071a6d7d8e463ce389f1e38024
|
4
|
+
data.tar.gz: d5b157159178227c69d0d724f49f10e299937c7c855c9cc5b55019d9995e17f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b24b9dec516dfbd48713c6bee798e1d4579def436e284077f89f649f3ec3dbd0fc88a3b59270c07f3d51f4e972058d6521168d571e263e037de785b4e48af9b7
|
7
|
+
data.tar.gz: 37dd29babe5be2b2f11d9fc26ea2d5b3d8e9414779b3d226f6282d533ad57ea9aed10cce07ee2725109ef30885e4707aec4d9c70e7ff818572f644a390bc3ce5
|
data/lib/gds_api/account_api.rb
CHANGED
@@ -12,10 +12,17 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
12
12
|
#
|
13
13
|
# @param [String, nil] redirect_path path on GOV.UK to send the user to after authentication
|
14
14
|
# @param [String, nil] state_id identifier originally returned by #create_registration_state
|
15
|
+
# @param [String, nil] level_of_authentication either "level1" (require MFA) or "level0" (do not require MFA)
|
15
16
|
#
|
16
17
|
# @return [Hash] An authentication URL and the OAuth state parameter (for CSRF protection)
|
17
|
-
def get_sign_in_url(redirect_path: nil, state_id: nil)
|
18
|
-
querystring = nested_query_string(
|
18
|
+
def get_sign_in_url(redirect_path: nil, state_id: nil, level_of_authentication: nil)
|
19
|
+
querystring = nested_query_string(
|
20
|
+
{
|
21
|
+
redirect_path: redirect_path,
|
22
|
+
state_id: state_id,
|
23
|
+
level_of_authentication: level_of_authentication,
|
24
|
+
}.compact,
|
25
|
+
)
|
19
26
|
get_json("#{endpoint}/api/oauth2/sign-in?#{querystring}")
|
20
27
|
end
|
21
28
|
|
@@ -78,6 +85,17 @@ class GdsApi::AccountApi < GdsApi::Base
|
|
78
85
|
patch_json("#{endpoint}/api/attributes", { attributes: attributes }, auth_headers(govuk_account_session))
|
79
86
|
end
|
80
87
|
|
88
|
+
# Look up the names of a user's attributes
|
89
|
+
#
|
90
|
+
# @param [String] attributes Names of the attributes to check
|
91
|
+
# @param [String] govuk_account_session Value of the session header
|
92
|
+
#
|
93
|
+
# @return [Hash] The attribute names (if present), and a new session header
|
94
|
+
def get_attributes_names(attributes:, govuk_account_session:)
|
95
|
+
querystring = nested_query_string({ attributes: attributes }.compact)
|
96
|
+
get_json("#{endpoint}/api/attributes/names?#{querystring}", auth_headers(govuk_account_session))
|
97
|
+
end
|
98
|
+
|
81
99
|
private
|
82
100
|
|
83
101
|
def nested_query_string(params)
|
data/lib/gds_api/exceptions.rb
CHANGED
@@ -23,12 +23,13 @@ module GdsApi
|
|
23
23
|
|
24
24
|
# Superclass for all 4XX and 5XX errors
|
25
25
|
class HTTPErrorResponse < BaseError
|
26
|
-
attr_accessor :code, :error_details
|
26
|
+
attr_accessor :code, :error_details, :http_body
|
27
27
|
|
28
|
-
def initialize(code, message = nil, error_details = nil)
|
28
|
+
def initialize(code, message = nil, error_details = nil, http_body = nil)
|
29
29
|
super(message)
|
30
30
|
@code = code
|
31
31
|
@error_details = error_details
|
32
|
+
@http_body = http_body
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -72,7 +73,7 @@ module GdsApi
|
|
72
73
|
def build_specific_http_error(error, url, details = nil)
|
73
74
|
message = "URL: #{url}\nResponse body:\n#{error.http_body}"
|
74
75
|
code = error.http_code
|
75
|
-
error_class_for_code(code).new(code, message, details)
|
76
|
+
error_class_for_code(code).new(code, message, details, error.http_body)
|
76
77
|
end
|
77
78
|
|
78
79
|
def error_class_for_code(code)
|
@@ -89,37 +89,6 @@ class GdsApi::LinkCheckerApi < GdsApi::Base
|
|
89
89
|
)
|
90
90
|
end
|
91
91
|
|
92
|
-
# Update or create a set of links to be monitored for a resource.
|
93
|
-
#
|
94
|
-
# Makes a +POST+ request to the link checker api to create a resource monitor.
|
95
|
-
#
|
96
|
-
# @param links [Array] A list of URIs to monitor.
|
97
|
-
# @param reference [String] A unique id for the resource being monitored
|
98
|
-
# @param app [String] The name of the service the call originated e.g. 'whitehall'
|
99
|
-
# @return [MonitorReport] A +SimpleDelegator+ of the +GdsApi::Response+ which
|
100
|
-
# responds to:
|
101
|
-
# :id the ID of the created resource monitor
|
102
|
-
#
|
103
|
-
# @raise [HTTPErrorResponse] if the request returns an error
|
104
|
-
|
105
|
-
def upsert_resource_monitor(links, app, reference)
|
106
|
-
payload = {
|
107
|
-
links: links,
|
108
|
-
app: app,
|
109
|
-
reference: reference,
|
110
|
-
}
|
111
|
-
|
112
|
-
response = post_json("#{endpoint}/monitor", payload)
|
113
|
-
|
114
|
-
MonitorReport.new(response.to_hash)
|
115
|
-
end
|
116
|
-
|
117
|
-
class MonitorReport < SimpleDelegator
|
118
|
-
def id
|
119
|
-
self["id"]
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
92
|
class LinkReport < SimpleDelegator
|
124
93
|
def uri
|
125
94
|
self["uri"]
|
@@ -5,8 +5,8 @@ module GdsApi
|
|
5
5
|
module AccountApi
|
6
6
|
ACCOUNT_API_ENDPOINT = Plek.find("account-api")
|
7
7
|
|
8
|
-
def stub_account_api_get_sign_in_url(redirect_path: nil, state_id: nil, auth_uri: "http://auth/provider", state: "state")
|
9
|
-
querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path, state_id: state_id }.compact)
|
8
|
+
def stub_account_api_get_sign_in_url(redirect_path: nil, state_id: nil, level_of_authentication: nil, auth_uri: "http://auth/provider", state: "state")
|
9
|
+
querystring = Rack::Utils.build_nested_query({ redirect_path: redirect_path, state_id: state_id, level_of_authentication: level_of_authentication }.compact)
|
10
10
|
stub_request(:get, "#{ACCOUNT_API_ENDPOINT}/api/oauth2/sign-in?#{querystring}")
|
11
11
|
.to_return(
|
12
12
|
status: 200,
|
@@ -38,61 +38,173 @@ module GdsApi
|
|
38
38
|
)
|
39
39
|
end
|
40
40
|
|
41
|
-
def stub_account_api_has_email_subscription(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
.to_return(status: 200, body: { govuk_account_session: new_govuk_account_session, has_subscription: true }.compact.to_json)
|
49
|
-
end
|
41
|
+
def stub_account_api_has_email_subscription(**options)
|
42
|
+
stub_account_api_request(
|
43
|
+
:get,
|
44
|
+
"/api/transition-checker-email-subscription",
|
45
|
+
response_body: { has_subscription: true },
|
46
|
+
**options,
|
47
|
+
)
|
50
48
|
end
|
51
49
|
|
52
|
-
def stub_account_api_does_not_have_email_subscription(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
.to_return(status: 200, body: { govuk_account_session: new_govuk_account_session, has_subscription: false }.compact.to_json)
|
60
|
-
end
|
50
|
+
def stub_account_api_does_not_have_email_subscription(**options)
|
51
|
+
stub_account_api_request(
|
52
|
+
:get,
|
53
|
+
"/api/transition-checker-email-subscription",
|
54
|
+
response_body: { has_subscription: false },
|
55
|
+
**options,
|
56
|
+
)
|
61
57
|
end
|
62
58
|
|
63
|
-
def
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
59
|
+
def stub_account_api_unauthorized_get_email_subscription(**options)
|
60
|
+
stub_account_api_request(
|
61
|
+
:get,
|
62
|
+
"/api/transition-checker-email-subscription",
|
63
|
+
response_status: 401,
|
64
|
+
**options,
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
def stub_account_api_forbidden_get_email_subscription(needed_level_of_authentication: "level1", **options)
|
69
|
+
stub_account_api_request(
|
70
|
+
:get,
|
71
|
+
"/api/transition-checker-email-subscription",
|
72
|
+
response_status: 403,
|
73
|
+
response_body: { needed_level_of_authentication: needed_level_of_authentication },
|
74
|
+
**options,
|
75
|
+
)
|
76
|
+
end
|
77
|
+
|
78
|
+
def stub_account_api_set_email_subscription(slug: nil, **options)
|
79
|
+
stub_account_api_request(
|
80
|
+
:post,
|
81
|
+
"/api/transition-checker-email-subscription",
|
82
|
+
with: { body: hash_including({ slug: slug }.compact) },
|
83
|
+
**options,
|
84
|
+
)
|
73
85
|
end
|
74
86
|
|
75
|
-
def
|
87
|
+
def stub_account_api_unauthorized_set_email_subscription(slug: nil, **options)
|
88
|
+
stub_account_api_request(
|
89
|
+
:post,
|
90
|
+
"/api/transition-checker-email-subscription",
|
91
|
+
with: { body: hash_including({ slug: slug }.compact) },
|
92
|
+
response_status: 401,
|
93
|
+
**options,
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
def stub_account_api_forbidden_set_email_subscription(slug: nil, needed_level_of_authentication: "level1", **options)
|
98
|
+
stub_account_api_request(
|
99
|
+
:post,
|
100
|
+
"/api/transition-checker-email-subscription",
|
101
|
+
with: { body: hash_including({ slug: slug }.compact) },
|
102
|
+
response_status: 403,
|
103
|
+
response_body: { needed_level_of_authentication: needed_level_of_authentication },
|
104
|
+
**options,
|
105
|
+
)
|
106
|
+
end
|
107
|
+
|
108
|
+
def stub_account_api_has_attributes(attributes: [], values: {}, **options)
|
76
109
|
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
110
|
+
stub_account_api_request(
|
111
|
+
:get,
|
112
|
+
"/api/attributes?#{querystring}",
|
113
|
+
response_body: { values: values },
|
114
|
+
**options,
|
115
|
+
)
|
116
|
+
end
|
117
|
+
|
118
|
+
def stub_account_api_unauthorized_has_attributes(attributes: [], **options)
|
119
|
+
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
120
|
+
stub_account_api_request(
|
121
|
+
:get,
|
122
|
+
"/api/attributes?#{querystring}",
|
123
|
+
response_status: 401,
|
124
|
+
**options,
|
125
|
+
)
|
126
|
+
end
|
127
|
+
|
128
|
+
def stub_account_api_forbidden_has_attributes(attributes: [], needed_level_of_authentication: "level1", **options)
|
129
|
+
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
130
|
+
stub_account_api_request(
|
131
|
+
:get,
|
132
|
+
"/api/attributes?#{querystring}",
|
133
|
+
response_status: 403,
|
134
|
+
response_body: { needed_level_of_authentication: needed_level_of_authentication },
|
135
|
+
**options,
|
136
|
+
)
|
137
|
+
end
|
138
|
+
|
139
|
+
def stub_account_api_set_attributes(attributes: nil, **options)
|
140
|
+
stub_account_api_request(
|
141
|
+
:patch,
|
142
|
+
"/api/attributes",
|
143
|
+
with: { body: hash_including({ attributes: attributes }.compact) },
|
144
|
+
**options,
|
145
|
+
)
|
146
|
+
end
|
147
|
+
|
148
|
+
def stub_account_api_unauthorized_set_attributes(attributes: nil, **options)
|
149
|
+
stub_account_api_request(
|
150
|
+
:patch,
|
151
|
+
"/api/attributes",
|
152
|
+
with: { body: hash_including({ attributes: attributes }.compact) },
|
153
|
+
response_status: 401,
|
154
|
+
**options,
|
155
|
+
)
|
156
|
+
end
|
157
|
+
|
158
|
+
def stub_account_api_forbidden_set_attributes(attributes: nil, needed_level_of_authentication: "level1", **options)
|
159
|
+
stub_account_api_request(
|
160
|
+
:patch,
|
161
|
+
"/api/attributes",
|
162
|
+
with: { body: hash_including({ attributes: attributes }.compact) },
|
163
|
+
response_status: 403,
|
164
|
+
response_body: { needed_level_of_authentication: needed_level_of_authentication },
|
165
|
+
**options,
|
166
|
+
)
|
167
|
+
end
|
168
|
+
|
169
|
+
def stub_account_api_get_attributes_names(attributes: [], **options)
|
170
|
+
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
171
|
+
stub_account_api_request(
|
172
|
+
:get,
|
173
|
+
"/api/attributes/names?#{querystring}",
|
174
|
+
response_body: { values: attributes },
|
175
|
+
**options,
|
176
|
+
)
|
177
|
+
end
|
178
|
+
|
179
|
+
def stub_account_api_unauthorized_get_attributes_names(attributes: [], **options)
|
180
|
+
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
181
|
+
stub_account_api_request(
|
182
|
+
:get,
|
183
|
+
"/api/attributes/names?#{querystring}",
|
184
|
+
response_status: 401,
|
185
|
+
**options,
|
186
|
+
)
|
187
|
+
end
|
188
|
+
|
189
|
+
def stub_account_api_forbidden_get_attributes_names(attributes: [], needed_level_of_authentication: "level1", **options)
|
190
|
+
querystring = Rack::Utils.build_nested_query({ attributes: attributes }.compact)
|
191
|
+
stub_account_api_request(
|
192
|
+
:get,
|
193
|
+
"/api/attributes/names?#{querystring}",
|
194
|
+
response_status: 403,
|
195
|
+
response_body: { needed_level_of_authentication: needed_level_of_authentication },
|
196
|
+
**options,
|
197
|
+
)
|
85
198
|
end
|
86
199
|
|
87
|
-
def
|
88
|
-
if govuk_account_session
|
89
|
-
|
90
|
-
|
91
|
-
|
200
|
+
def stub_account_api_request(method, path, with: {}, response_status: 200, response_body: {}, govuk_account_session: nil, new_govuk_account_session: nil)
|
201
|
+
with.merge!(headers: { GdsApi::AccountApi::AUTH_HEADER_NAME => govuk_account_session }) if govuk_account_session
|
202
|
+
new_govuk_account_session = nil if response_status >= 400
|
203
|
+
to_return = { status: response_status, body: response_body.merge(govuk_account_session: new_govuk_account_session).compact.to_json }
|
204
|
+
if with.empty?
|
205
|
+
stub_request(method, "#{ACCOUNT_API_ENDPOINT}#{path}").to_return(**to_return)
|
92
206
|
else
|
93
|
-
stub_request(
|
94
|
-
.with(body: hash_including({ attributes: attributes }.compact))
|
95
|
-
.to_return(status: 200, body: { govuk_account_session: new_govuk_account_session }.compact.to_json)
|
207
|
+
stub_request(method, "#{ACCOUNT_API_ENDPOINT}#{path}").with(**with).to_return(**to_return)
|
96
208
|
end
|
97
209
|
end
|
98
210
|
end
|
@@ -72,23 +72,6 @@ module GdsApi
|
|
72
72
|
headers: { "Content-Type" => "application/json" },
|
73
73
|
)
|
74
74
|
end
|
75
|
-
|
76
|
-
def stub_link_checker_api_upsert_resource_monitor(app:, reference:, links:)
|
77
|
-
response_body = { id: 1 }.to_json
|
78
|
-
|
79
|
-
request_body = {
|
80
|
-
links: links,
|
81
|
-
app: app,
|
82
|
-
reference: reference,
|
83
|
-
}.to_json
|
84
|
-
|
85
|
-
stub_request(:post, "#{LINK_CHECKER_API_ENDPOINT}/monitor")
|
86
|
-
.with(body: request_body)
|
87
|
-
.to_return(
|
88
|
-
body: response_body,
|
89
|
-
headers: { "Content-Type" => "application/json" },
|
90
|
-
)
|
91
|
-
end
|
92
75
|
end
|
93
76
|
end
|
94
77
|
end
|
data/lib/gds_api/version.rb
CHANGED
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: 71.
|
4
|
+
version: 71.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-
|
11
|
+
date: 2021-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|