gds-api-adapters 103.3.1 → 103.4.1

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: a46ff92814cc4c552d487bf3f1601b70596a9f4382acf227d91189a0674b690f
4
- data.tar.gz: a3f09b390e4a0ad83b2959dce31bd119681bec91838b694930fbd77f27677053
3
+ metadata.gz: 1ca9e25a98342ad51743aced3a94571ed70c52900baeb8ba602b3aac79508d03
4
+ data.tar.gz: bfa1de8257d71af66eaeb07e3bd250ff023f4e9cc7d75effd5c02e037222010e
5
5
  SHA512:
6
- metadata.gz: c17e7759aebce22b1f80171a3488db204249251830033513a6cc2255a3a6c31972c6349824319bdd495dd75b4492b22c61ca73527098e91c735c894cf8218115
7
- data.tar.gz: c8770755230be1e322b17aaa8d891860da839278aff40a87e38f7de9a6d573ac0084437ceacbd3d1cb3969b79bcfabcd50cf661eaae2134d9132ea9652b7fc97
6
+ metadata.gz: 302d8fddfb383f2d314bcfa5f9802cafbf908a9fa4c3848c838e3fc5adc9868f6b38a8b9e2024aa055c54d9fdadc4c015272893e8ddca5eb068686497ae569b2
7
+ data.tar.gz: 4cf72e311880119cbba79bc117261f30ce3d7dd3faf563bd838966bc5a989fe0103781696ae2461445f556d4c9d46fa02ed0276976ad84e6a9e6db98a29f5428
@@ -24,9 +24,16 @@ module GdsApi
24
24
  def stub_asset_manager_has_an_asset(id, atts, filename = "")
25
25
  response = atts.merge("_response_info" => { "status" => "ok" })
26
26
 
27
+ stub_asset_manager_request_to_get_asset(id, response)
28
+ stub_asset_manager_request_to_asset_media(id, filename)
29
+ end
30
+
31
+ def stub_asset_manager_request_to_get_asset(id, response)
27
32
  stub_request(:get, "#{ASSET_MANAGER_ENDPOINT}/assets/#{id}")
28
33
  .to_return(body: response.to_json, status: 200)
34
+ end
29
35
 
36
+ def stub_asset_manager_request_to_asset_media(id, filename)
30
37
  stub_request(:get, "#{ASSET_MANAGER_ENDPOINT}/media/#{id}/#{filename}")
31
38
  .to_return(body: "Some file content", status: 200)
32
39
  end
@@ -45,20 +52,24 @@ module GdsApi
45
52
  .to_return(body: response.to_json, status: 404)
46
53
  end
47
54
 
55
+ def stub_asset_manager_get_asset_forbidden(id)
56
+ stub_request(:get, "#{ASSET_MANAGER_ENDPOINT}/assets/#{id}").to_return(status: 403)
57
+ end
58
+
48
59
  # This can take a string of an exact url or a hash of options
49
60
  #
50
61
  # with a string:
51
- # `stub_asset_manager_receives_an_asset("https://asset-manager/media/619ce797-b415-42e5-b2b1-2ffa0df52302/file.jpg")`
62
+ # `stub_asset_manager_create_asset("https://asset-manager/media/619ce797-b415-42e5-b2b1-2ffa0df52302/file.jpg")`
52
63
  #
53
64
  # with a hash:
54
- # `stub_asset_manager_receives_an_asset(id: "20d04259-e3ae-4f71-8157-e6c843096e96", filename: "file.jpg")`
65
+ # `stub_asset_manager_create_asset(id: "20d04259-e3ae-4f71-8157-e6c843096e96", filename: "file.jpg")`
55
66
  # which would return a file url of "https://asset-manager/media/20d04259-e3ae-4f71-8157-e6c843096e96/file.jpg"
56
67
  #
57
68
  # with no argument
58
69
  #
59
- # `stub_asset_manager_receives_an_asset`
70
+ # `stub_asset_manager_create_asset`
60
71
  # which would return a file url of "https://asset-manager/media/0053adbf-0737-4923-9d8a-8180f2c723af/0d19136c4a94f07"
61
- def stub_asset_manager_receives_an_asset(response_url = {})
72
+ def stub_asset_manager_create_asset(response_url = {}, response_body = {})
62
73
  stub_request(:post, "#{ASSET_MANAGER_ENDPOINT}/assets").to_return do
63
74
  if response_url.is_a?(String)
64
75
  file_url = response_url
@@ -70,10 +81,28 @@ module GdsApi
70
81
 
71
82
  file_url = "#{ASSET_MANAGER_ENDPOINT}/media/#{options[:id]}/#{options[:filename]}"
72
83
  end
73
- { body: { file_url: }.to_json, status: 200 }
84
+ { body: response_body.merge(file_url:).to_json, status: 200 }
74
85
  end
75
86
  end
76
87
 
88
+ def stub_asset_manager_receives_an_asset(response_url = {})
89
+ warn <<~WARNING
90
+ stub_asset_manager_receives_an_asset is deprecated and will be removed
91
+ in a future version of gds-api-adapters. Replace calls to this method with
92
+ stub_asset_manager_create_asset.
93
+ WARNING
94
+
95
+ stub_asset_manager_create_asset(response_url)
96
+ end
97
+
98
+ def stub_asset_manager_create_asset_too_large
99
+ stub_request(:post, "#{ASSET_MANAGER_ENDPOINT}/assets").to_return(status: 413)
100
+ end
101
+
102
+ def stub_asset_manager_create_asset_unprocessable(body = "")
103
+ stub_request(:post, "#{ASSET_MANAGER_ENDPOINT}/assets").to_return(body:, status: 422)
104
+ end
105
+
77
106
  def stub_asset_manager_upload_failure
78
107
  stub_request(:post, "#{ASSET_MANAGER_ENDPOINT}/assets").to_return(status: 500)
79
108
  end
@@ -83,6 +112,14 @@ module GdsApi
83
112
  .to_return(body: body.to_json, status: 200)
84
113
  end
85
114
 
115
+ def stub_asset_manager_update_asset_forbidden(asset_id)
116
+ stub_request(:put, "#{ASSET_MANAGER_ENDPOINT}/assets/#{asset_id}").to_return(status: 403)
117
+ end
118
+
119
+ def stub_asset_manager_update_asset_not_found(asset_id)
120
+ stub_request(:put, "#{ASSET_MANAGER_ENDPOINT}/assets/#{asset_id}").to_return(status: 404)
121
+ end
122
+
86
123
  def stub_asset_manager_update_asset_failure(asset_id)
87
124
  stub_request(:put, "#{ASSET_MANAGER_ENDPOINT}/assets/#{asset_id}").to_return(status: 500)
88
125
  end
@@ -0,0 +1,55 @@
1
+ module GdsApi
2
+ module Validators
3
+ class BasePathValidator
4
+ MAX_PATH_LENGTH = 512
5
+
6
+ attr_reader :base_path
7
+
8
+ def initialize(base_path)
9
+ @base_path = base_path
10
+ end
11
+
12
+ def valid?
13
+ !(base_path.nil? || no_leading_slash? || too_long? || potential_path_traversal? || ends_with_a_period? || invalid_chars?)
14
+ end
15
+
16
+ def errors
17
+ return { base_path_invalid: ["must not be nil"] } if base_path.nil?
18
+
19
+ errors = []
20
+ errors << [:base_path_invalid, "must start with a /"] if no_leading_slash?
21
+ errors << [:base_path_too_long, "must not be longer than #{MAX_PATH_LENGTH} bytes"] if too_long?
22
+ errors << [:base_path_invalid, "must not include runs of . and or / characters, which could be penetration attempts"] if potential_path_traversal?
23
+ errors << [:base_path_invalid, "must not end with a ."] if ends_with_a_period?
24
+ errors << [:base_path_invalid, "must not include characters that are not lowercase letters, numbers, -, ., or /"] if invalid_chars?
25
+
26
+ errors.each_with_object({}) do |err, memo|
27
+ memo[err[0]] ||= []
28
+ memo[err[0]] << err[1]
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def no_leading_slash?
35
+ base_path[0] != "/"
36
+ end
37
+
38
+ def too_long?
39
+ base_path.length > MAX_PATH_LENGTH
40
+ end
41
+
42
+ def potential_path_traversal?
43
+ base_path =~ /([\/.]{2,})/
44
+ end
45
+
46
+ def ends_with_a_period?
47
+ base_path[-1] == "."
48
+ end
49
+
50
+ def invalid_chars?
51
+ base_path !~ /^([\/a-z0-9.-])+$/
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = "103.3.1".freeze
2
+ VERSION = "103.4.1".freeze
3
3
  end
data/lib/gds_api.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "addressable"
2
2
  require "plek"
3
3
  require "time"
4
+ require "gds_api/validators/base_path_validator"
4
5
  require "gds_api/account_api"
5
6
  require "gds_api/asset_manager"
6
7
  require "gds_api/calendars"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gds-api-adapters
3
3
  version: !ruby/object:Gem::Version
4
- version: 103.3.1
4
+ version: 103.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
@@ -141,14 +141,14 @@ dependencies:
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '5.19'
144
+ version: '6.0'
145
145
  type: :development
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '5.19'
151
+ version: '6.0'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: minitest-around
154
154
  requirement: !ruby/object:Gem::Requirement
@@ -295,14 +295,14 @@ dependencies:
295
295
  requirements:
296
296
  - - "~>"
297
297
  - !ruby/object:Gem::Version
298
- version: '0.21'
298
+ version: '1.0'
299
299
  type: :development
300
300
  prerelease: false
301
301
  version_requirements: !ruby/object:Gem::Requirement
302
302
  requirements:
303
303
  - - "~>"
304
304
  - !ruby/object:Gem::Version
305
- version: '0.21'
305
+ version: '1.0'
306
306
  - !ruby/object:Gem::Dependency
307
307
  name: timecop
308
308
  requirement: !ruby/object:Gem::Requirement
@@ -386,6 +386,7 @@ files:
386
386
  - lib/gds_api/test_helpers/search.rb
387
387
  - lib/gds_api/test_helpers/support_api.rb
388
388
  - lib/gds_api/test_helpers/worldwide.rb
389
+ - lib/gds_api/validators/base_path_validator.rb
389
390
  - lib/gds_api/version.rb
390
391
  - lib/gds_api/worldwide.rb
391
392
  - test/fixtures/finder_api/cma-case-schema.json
@@ -411,7 +412,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
411
412
  - !ruby/object:Gem::Version
412
413
  version: '0'
413
414
  requirements: []
414
- rubygems_version: 4.0.10
415
+ rubygems_version: 4.0.19
415
416
  specification_version: 4
416
417
  summary: Adapters to work with GDS APIs
417
418
  test_files: []