dvla-application_helper 5.1.5

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.
Files changed (101) hide show
  1. checksums.yaml +7 -0
  2. data/.drone.yml +481 -0
  3. data/.env.template +4 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +21 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/README.md +674 -0
  9. data/Rakefile +31 -0
  10. data/config/settings/drone-dev.yml +41 -0
  11. data/config/settings/drone-ext.yml +35 -0
  12. data/config/settings/drone-link.yml +35 -0
  13. data/config/settings/drone-perf.yml +35 -0
  14. data/config/settings/local-dev.yml +40 -0
  15. data/config/settings/local-ext.yml +35 -0
  16. data/config/settings/local-link.yml +35 -0
  17. data/config/settings/local-perf.yml +35 -0
  18. data/config/settings.yml +29 -0
  19. data/config/yarp.yml +6 -0
  20. data/functional-tests/Rakefile +74 -0
  21. data/functional-tests/chutney.yml +110 -0
  22. data/functional-tests/features/codl.feature +170 -0
  23. data/functional-tests/features/codl_image_review_states.feature +140 -0
  24. data/functional-tests/features/csudl.feature +54 -0
  25. data/functional-tests/features/csudl_image_review_states.feature +20 -0
  26. data/functional-tests/features/step_definitions/app_domain_steps.rb +213 -0
  27. data/functional-tests/features/step_definitions/application_creation_steps.rb +115 -0
  28. data/functional-tests/features/step_definitions/image_steps.rb +144 -0
  29. data/functional-tests/features/step_definitions/state_machine_steps.rb +43 -0
  30. data/functional-tests/features/support/data/artefacts.rb +27 -0
  31. data/functional-tests/features/support/data/image_helpers.rb +20 -0
  32. data/functional-tests/features/support/data/schema_helpers.rb +3 -0
  33. data/functional-tests/features/support/data/string_manipulation.rb +9 -0
  34. data/functional-tests/features/support/env.rb +25 -0
  35. data/functional-tests/features/support/hooks.rb +56 -0
  36. data/functional-tests/features/support/yarp_integration/yarp_helpers.rb +23 -0
  37. data/functional-tests/features/uodl_image_review_states.feature +244 -0
  38. data/functional-tests/features/uodl_non_processable.feature +441 -0
  39. data/functional-tests/features/uodl_processable.feature +416 -0
  40. data/lib/dvla/application_helper/builders/V1/application_builder.rb +298 -0
  41. data/lib/dvla/application_helper/builders/V1/codl_application_builder.rb +205 -0
  42. data/lib/dvla/application_helper/builders/V1/csudl_application_builder.rb +329 -0
  43. data/lib/dvla/application_helper/builders/V2/base_uodl_v2_application_builder.rb +357 -0
  44. data/lib/dvla/application_helper/builders/V2/cop_v2_application_builder.rb +59 -0
  45. data/lib/dvla/application_helper/builders/V2/dup_v2_application_builder.rb +84 -0
  46. data/lib/dvla/application_helper/builders/V2/exc_v2_application_builder.rb +55 -0
  47. data/lib/dvla/application_helper/builders/V2/rep_v2_application_builder.rb +84 -0
  48. data/lib/dvla/application_helper/builders/V2/tyr_v2_application_builder.rb +62 -0
  49. data/lib/dvla/application_helper/builders/V2/uodl_v2_application_builder.rb +278 -0
  50. data/lib/dvla/application_helper/builders/V3/base_uodl_v3_application_builder.rb +342 -0
  51. data/lib/dvla/application_helper/builders/V3/cop_v3_application_builder.rb +56 -0
  52. data/lib/dvla/application_helper/builders/V3/dup_v3_application_builder.rb +78 -0
  53. data/lib/dvla/application_helper/builders/V3/exc_v3_application_builder.rb +56 -0
  54. data/lib/dvla/application_helper/builders/V3/rep_v3_application_builder.rb +81 -0
  55. data/lib/dvla/application_helper/builders/V3/tyr_v3_application_builder.rb +59 -0
  56. data/lib/dvla/application_helper/builders/dup_rep_builder_mixin.rb +71 -0
  57. data/lib/dvla/application_helper/builders/photo_builder_mixin.rb +49 -0
  58. data/lib/dvla/application_helper/builders/photo_signature_builder_mixin.rb +68 -0
  59. data/lib/dvla/application_helper/configuration.rb +37 -0
  60. data/lib/dvla/application_helper/constants.rb +21 -0
  61. data/lib/dvla/application_helper/enums/review_state.rb +30 -0
  62. data/lib/dvla/application_helper/enums/unable_to_prove_licence_possession_reasons.rb +8 -0
  63. data/lib/dvla/application_helper/factories/address.rb +21 -0
  64. data/lib/dvla/application_helper/factories/application_details.rb +353 -0
  65. data/lib/dvla/application_helper/factories/casework.rb +7 -0
  66. data/lib/dvla/application_helper/factories/csudl_photo_signature_image.rb +156 -0
  67. data/lib/dvla/application_helper/factories/csudl_photo_signature_images.rb +85 -0
  68. data/lib/dvla/application_helper/factories/organ_donor.rb +32 -0
  69. data/lib/dvla/application_helper/factories/person.rb +73 -0
  70. data/lib/dvla/application_helper/factories/photo_image.rb +147 -0
  71. data/lib/dvla/application_helper/factories/photo_images.rb +183 -0
  72. data/lib/dvla/application_helper/factories/photo_signature_image.rb +158 -0
  73. data/lib/dvla/application_helper/factories/photo_signature_images.rb +64 -0
  74. data/lib/dvla/application_helper/fixtures/photo/comparison_image.jpeg +0 -0
  75. data/lib/dvla/application_helper/fixtures/photo/passport_image.jpg +0 -0
  76. data/lib/dvla/application_helper/fixtures/photo/photocard_back.jpg +0 -0
  77. data/lib/dvla/application_helper/fixtures/photo/photocard_front.jpg +0 -0
  78. data/lib/dvla/application_helper/fixtures/photo/rejected_user_uploaded_image.jpeg +0 -0
  79. data/lib/dvla/application_helper/fixtures/photo/user_uploaded_image.jpg +0 -0
  80. data/lib/dvla/application_helper/fixtures/signature/csudl_signature_image.tiff +0 -0
  81. data/lib/dvla/application_helper/fixtures/signature/passport_image.jpg +0 -0
  82. data/lib/dvla/application_helper/fixtures/signature/rejected_user_uploaded_image.jpg +0 -0
  83. data/lib/dvla/application_helper/fixtures/signature/user_uploaded_image.jpg +0 -0
  84. data/lib/dvla/application_helper/processors/application_status.rb +45 -0
  85. data/lib/dvla/application_helper/processors/application_task.rb +301 -0
  86. data/lib/dvla/application_helper/services/application_diary.rb +123 -0
  87. data/lib/dvla/application_helper/services/application_domain.rb +239 -0
  88. data/lib/dvla/application_helper/services/application_process_engine.rb +120 -0
  89. data/lib/dvla/application_helper/services/check_aws_credentials.rb +24 -0
  90. data/lib/dvla/application_helper/services/driving_licence_channel_api.rb +67 -0
  91. data/lib/dvla/application_helper/services/image_service.rb +116 -0
  92. data/lib/dvla/application_helper/services/image_utility.rb +82 -0
  93. data/lib/dvla/application_helper/services/state_machine_helpers.rb +146 -0
  94. data/lib/dvla/application_helper/version.rb +5 -0
  95. data/lib/dvla/application_helper.rb +92 -0
  96. data/renovate.json +4 -0
  97. data/scripts/application-login.sh +56 -0
  98. data/scripts/drone-aws-login.sh +18 -0
  99. data/scripts/seed_application.rb +268 -0
  100. data/sonar-project.properties +4 -0
  101. metadata +343 -0
@@ -0,0 +1,123 @@
1
+ module DVLA
2
+ module Application
3
+ module ApplicationDiary
4
+
5
+ def self.delete_single_trigger(application_id:, trigger_type:)
6
+ request_data = DVLAApplicationDiaryServiceOpenAPIClient::DeleteTriggerRequest.new(
7
+ application_id: application_id,
8
+ trigger_type: trigger_type,
9
+ )
10
+ make_diary_endpoint_call(endpoint: 'delete_trigger_with_http_info', request_data: request_data)
11
+ end
12
+
13
+ def self.delete_all_app_triggers(application_id:)
14
+ request_data = DVLAApplicationDiaryServiceOpenAPIClient::DeleteTriggersRequest.new(
15
+ application_id: application_id,
16
+ )
17
+ make_diary_endpoint_call(endpoint: 'delete_triggers_by_application_id_with_http_info', request_data: request_data)
18
+ end
19
+
20
+ def self.extend_call_to_action_trigger(application_id:, application_type:, time_to_trigger:, product_type: 'Driving Licence')
21
+ request_data = DVLAApplicationDiaryServiceOpenAPIClient::ExtendCallToActionTriggersRequest.new(
22
+ application_id: application_id,
23
+ product_type: product_type,
24
+ application_type: application_type,
25
+ time_to_trigger: time_to_trigger,
26
+ )
27
+ make_diary_endpoint_call(endpoint: 'extend_call_to_action_triggers_with_http_info', request_data: request_data)
28
+ end
29
+
30
+ def self.find_triggers_by_app_id(application_id:)
31
+ request_data = DVLAApplicationDiaryServiceOpenAPIClient::FindTriggersByApplicationIdRequest.new(
32
+ application_id: application_id,
33
+ )
34
+ make_diary_endpoint_call(endpoint: 'find_triggers_by_application_id_with_http_info', request_data: request_data)
35
+ end
36
+
37
+ def self.put_external_triggers(application_id:, application_type:, product_type: 'Driving Licence')
38
+ request_data = DVLAApplicationDiaryServiceOpenAPIClient::PutExternalTaskTriggersRequest.new(
39
+ application_id: application_id,
40
+ product_type: product_type,
41
+ application_type: application_type,
42
+ )
43
+
44
+ make_diary_endpoint_call(endpoint: 'put_external_task_triggers_with_http_info', request_data: request_data)
45
+ end
46
+
47
+ def self.put_triggers(application_id:, trigger_type:, application_type:, time_to_trigger:, product_type: 'Driving Licence')
48
+ request_data = DVLAApplicationDiaryServiceOpenAPIClient::PutTriggerRequest.new(
49
+ application_id: application_id,
50
+ trigger_type: trigger_type,
51
+ product_type: product_type,
52
+ application_type: application_type,
53
+ time_to_trigger: time_to_trigger,
54
+ )
55
+
56
+ make_diary_endpoint_call(endpoint: 'put_trigger_with_http_info', request_data: request_data)
57
+ end
58
+
59
+
60
+
61
+ def self.initialize_diary_api_instance
62
+ api_id = ENV.fetch('APPLICATION_DIARY_API_ID', Settings.application_helper.services.application_diary.api_id)
63
+ vpce_id = ENV.fetch('APPLICATION_DIARY_VPCE_ID', Settings.application_helper.services.aws.vpce_id)
64
+
65
+ config = DVLAApplicationDiaryServiceOpenAPIClient::Configuration.new
66
+ config.base_path = ENV.fetch('APPLICATION_DIARY_STAGE_NAME', Settings.application_helper.services.application_diary.stage_name)
67
+ config.scheme = 'https'
68
+ config.host = "#{api_id}-vpce-#{vpce_id}.execute-api.eu-west-2.amazonaws.com"
69
+ config.server_index = nil
70
+ client = RequestSigningDiaryApiClient.new(config)
71
+ DVLAApplicationDiaryServiceOpenAPIClient::DefaultApi.new(client)
72
+ end
73
+
74
+ def self.application_diary_test_headers
75
+ {
76
+ dvla_resource: RequestHeaders::DVLA_RESOURCE,
77
+ dvla_origin_resource: RequestHeaders::DVLA_ORIGIN_RESOURCE,
78
+ x_correlation_id: RequestHeaders::X_CORRELATION_ID,
79
+ origin_timestamp: RequestHeaders::ORIGIN_TIMESTAMP,
80
+ dvla_session_id: RequestHeaders::DVLA_SESSION_ID,
81
+ }
82
+ end
83
+
84
+ # Generic endpoint call method
85
+ # @Param [endpoint](String), references endpoint to make call to
86
+ # @Param [request_data](Object), is an object of type related to the endpoint, DVLAApplicationDiaryServiceOpenAPIClient methods used to generate these
87
+ def self.make_diary_endpoint_call(endpoint:, request_data:)
88
+ api_instance = initialize_diary_api_instance
89
+ opts = application_diary_test_headers
90
+
91
+ begin
92
+ # makes call to specified endpoint using the correct request_input data
93
+ data, status_code, _headers = api_instance.method(endpoint).call(RequestHeaders::DVLA_RESOURCE,
94
+ RequestHeaders::DVLA_ORIGIN_RESOURCE,
95
+ request_data,
96
+ opts)
97
+
98
+ DVLA::Application.logger.info("Call made to Diary endpoint: #{endpoint}, Status code response: #{status_code}".blue)
99
+ rescue DVLAApplicationDiaryServiceOpenAPIClient::ApiError => e
100
+ raise(StandardError, DVLA::Application.logger.info { "Error when calling DefaultApi->#{endpoint}: #{e}".red })
101
+ end
102
+ data
103
+ end
104
+
105
+ class RequestSigningDiaryApiClient < DVLAApplicationDiaryServiceOpenAPIClient::ApiClient
106
+ def initialize(config = nil)
107
+ @signer = AWS.create_signer
108
+ super
109
+ end
110
+
111
+ def call_api(http_method, path, opts = nil)
112
+ signed_request = @signer.sign_request(
113
+ http_method:,
114
+ url: build_request_url(path),
115
+ body: opts[:body],
116
+ )
117
+ opts[:header_params].merge!(signed_request.headers)
118
+ super
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,239 @@
1
+ module DVLA
2
+ module Application
3
+ module ApplicationDomain
4
+
5
+ # @param **application_id [String](UUID)
6
+ # @param **image [Object]
7
+ def self.add_image(application_id:, image:, request_data: DVLAApplicationDomainServiceOpenAPIClient::AddImageRequest.new({ application_id:, image: }))
8
+ DVLA::Application.logger.info("Adding image for application_id: #{application_id.green}")
9
+ make_domain_endpoint_call(endpoint: 'add_image_with_http_info',
10
+ request_data: request_data)
11
+ end
12
+
13
+ # @param **application_id [String](UUID)
14
+ # @param **payment [Object] { paymentId: [Integer], paymentStatus: [Enum], paymentAmount: [String] }
15
+ def self.add_payment(application_id:, payment:, request_data: DVLAApplicationDomainServiceOpenAPIClient::AddPaymentRequest.new({ application_id:, payment: }))
16
+ DVLA::Application.logger.info("Adding payment for application_id: #{application_id.green}")
17
+ make_domain_endpoint_call(endpoint: 'add_payment_with_http_info',
18
+ request_data: request_data)
19
+ end
20
+
21
+ # @param **application_id [String](UUID)
22
+ # @param **validation [Object] { validationId: [String](UUID), timeCreated: [String](DateTime), outcome: [Enum] Approved,Returned,Unapproved }
23
+ def self.add_validation(application_id:, validation:, request_data: DVLAApplicationDomainServiceOpenAPIClient::AddValidationRequest.new({ application_id:, validation: }))
24
+ DVLA::Application.logger.info("Adding Validation for application_id: #{application_id.green}")
25
+ make_domain_endpoint_call(endpoint: 'add_validation_with_http_info',
26
+ request_data: request_data)
27
+ end
28
+
29
+ # @param **application [Object]
30
+ def self.create_application(application:)
31
+ DVLA::Application.logger.info("applicationID: #{application.application_id.green}")
32
+ DVLA::Application.logger.info("customerID: #{application.customer_id.green}")
33
+ DVLA::Application.logger.info('Calling create-application')
34
+ make_domain_endpoint_call(endpoint: 'create_application_with_http_info',
35
+ request_data: application)
36
+ end
37
+
38
+ # @param **application [Object]
39
+ def self.create_test_application(application:)
40
+ DVLA::Application.logger.info("applicationID: #{application.application_id.green}")
41
+ DVLA::Application.logger.info("customerID: #{application.customer_id.inspect.green}")
42
+ DVLA::Application.logger.info('Calling create-test-application')
43
+ make_domain_endpoint_call(endpoint: 'create_test_application_with_http_info',
44
+ request_data: application)
45
+ end
46
+
47
+ # @param **application_id [String](UUID)
48
+ def self.delete_application(application_id:, request_data: DVLAApplicationDomainServiceOpenAPIClient::DeleteApplicationRequest.new({ application_id: }))
49
+ DVLA::Application.logger.info("Deleting application: #{application_id.green}")
50
+ make_domain_endpoint_call(endpoint: 'delete_application_with_http_info',
51
+ request_data: request_data)
52
+ end
53
+
54
+ # @param **customer_id [String](UUID)
55
+ # Returns application
56
+ # Return [Array]
57
+ def self.find_applications_by_customer_id(customer_id:, request_data: DVLAApplicationDomainServiceOpenAPIClient::FindApplicationsByCustomerIdRequest.new({ customer_id: }))
58
+ DVLA::Application.logger.info("Finding application by customerId: #{customer_id.green}")
59
+ make_domain_endpoint_call(endpoint: 'find_applications_by_customer_id_with_http_info',
60
+ request_data: request_data)
61
+ end
62
+
63
+ # @param **application_id [String](UUID)
64
+ # Returns action history of application
65
+ # Return [Array]
66
+ def self.find_action_history(application_id:, request_data: DVLAApplicationDomainServiceOpenAPIClient::FindActionsByApplicationIdRequest.new({ application_id: }))
67
+ DVLA::Application.logger.info("finding actions for application_id: #{application_id.green}")
68
+ make_domain_endpoint_call(endpoint: 'find_actions_by_application_id_with_http_info',
69
+ request_data: request_data)
70
+ end
71
+
72
+ # @param **application_type [String]
73
+ def self.generate_application_reference(application_type:, request_data: DVLAApplicationDomainServiceOpenAPIClient::GenerateApplicationReferenceRequest.new({ application_type: }))
74
+ DVLA::Application.logger.info("Generating V1 reference number for application type: #{application_type.green}")
75
+ make_domain_endpoint_call(endpoint: 'generate_application_reference_with_http_info',
76
+ request_data: request_data)
77
+ end
78
+
79
+ # @param **prefix [Enum] FP,TY,CP,DU,CD
80
+ def self.generate_application_reference_v2(prefix:, request_data: DVLAApplicationDomainServiceOpenAPIClient::GenerateApplicationReferenceRequest1.new({ prefix: }))
81
+ DVLA::Application.logger.info("Generating V2 reference number with prefix: #{prefix.green}")
82
+ make_domain_endpoint_call(endpoint: 'generate_application_reference_v2_with_http_info',
83
+ request_data: request_data)
84
+ end
85
+
86
+ # @param **application_id [String](UUID)
87
+ # @param **validation_id [String](UUID)
88
+ # @param **casework [Object] { service: [String], status: [String], outcome [String], timeCreated [String](date-time), timeCompleted [String](date-time) }
89
+ def self.put_casework(application_id:, casework:, validation_id:, request_data: DVLAApplicationDomainServiceOpenAPIClient::PutCaseworkRequest.new({ application_id:, casework:, validation_id: }))
90
+ DVLA::Application.logger.info("Adding casework for application_id: #{application_id.green}")
91
+ make_domain_endpoint_call(endpoint: 'put_casework_with_http_info',
92
+ request_data: request_data)
93
+ end
94
+
95
+ # @param **application_id [String](UUID)
96
+ # @param **image_id [String](UUID)
97
+ # @param **image_type [Enum] Photo, Signature
98
+ # @param **review [Object] { reviewLevel: [Enum], outcome: [String], outcomeReasons [String], timeCompleted [String](date-time) }
99
+ def self.put_image_review(application_id:, image_id:, image_type:, review:, request_data: DVLAApplicationDomainServiceOpenAPIClient::PutImageReviewRequest.new({ application_id:, image_id:, image_type:, review: }))
100
+ DVLA::Application.logger.info("Adding image review for application_id: #{application_id.green}")
101
+ make_domain_endpoint_call(endpoint: 'put_image_review_with_http_info',
102
+ request_data: request_data)
103
+ end
104
+
105
+ # @param **application_id [String](UUID)
106
+ # Returns application
107
+ # Return [Object]
108
+ def self.retrieve_application_by_app_id(application_id:, request_data: DVLAApplicationDomainServiceOpenAPIClient::RetrieveApplicationRequest.new({ application_id: }))
109
+ DVLA::Application.logger.info("Retrieving application data for application_id: #{application_id.green}")
110
+ make_domain_endpoint_call(endpoint: 'retrieve_application_with_http_info',
111
+ request_data: request_data)
112
+ end
113
+
114
+ # @param **application_reference_number [String](UUID)
115
+ # Returns application
116
+ # Return [Object]
117
+ def self.retrieve_application_by_application_reference_number(application_reference_number:, request_data: DVLAApplicationDomainServiceOpenAPIClient::RetrieveApplicationByApplicationReferenceNumberRequest.new({ application_reference_number: }))
118
+ DVLA::Application.logger.info("Retrieving application data for reference number: #{application_reference_number.green}")
119
+ make_domain_endpoint_call(endpoint: 'retrieve_application_by_application_reference_number_with_http_info',
120
+ request_data: request_data)
121
+ end
122
+
123
+ # @param **application_id [String](UUID)
124
+ # @param **current_image_id [String](UUID)
125
+ # @param **previous_image_id [String](UUID)
126
+ def self.revert_to_previous_image(application_id:, current_image_id:, previous_image_id:, request_data: DVLAApplicationDomainServiceOpenAPIClient::RevertToPreviousImageRequest.new({ application_id:, current_image_id:, previous_image_id: }))
127
+ DVLA::Application.logger.info("revert to previous image for application_id: #{application_id.green}, current_image_id: #{current_image_id} , previous_image_id: #{previous_image_id}")
128
+ make_domain_endpoint_call(endpoint: 'revert_to_previous_image_with_http_info',
129
+ request_data: request_data)
130
+ end
131
+
132
+ # @param **application_reference_number [String](UUID)
133
+ # @param **image [Object]
134
+ # @param **source_image_id [String](UUID)
135
+ # @param **source_image_status [Enum] Active,Replaced,Moved,Deleted
136
+ def self.supersede_image(application_id:, image:, source_image_id:, source_image_status:, request_data: DVLAApplicationDomainServiceOpenAPIClient::SupersedeImageRequest.new({ application_id:, image:, source_image_id:, source_image_status: }))
137
+ DVLA::Application.logger.info("supersede image for application_id: #{application_id.green}, previous_image_id: #{source_image_id} , new_image: #{image}")
138
+ make_domain_endpoint_call(endpoint: 'supersede_image_with_http_info',
139
+ request_data: request_data)
140
+ end
141
+
142
+ # @param **application_id [String](UUID)
143
+ # @param **application_state [Object] { status [Enum], reason [Enum] }
144
+ def self.update_application_status(application_id:, application_state:, request_data: DVLAApplicationDomainServiceOpenAPIClient::UpdateApplicationStatusRequest.new(application_id:, application_state:))
145
+ DVLA::Application.logger.info("Updating application status for application_id: #{application_id.green}")
146
+ make_domain_endpoint_call(endpoint: 'update_application_status_with_http_info',
147
+ request_data: request_data)
148
+ end
149
+
150
+ # @param **application_id [String](UUID)
151
+ # @param **call_to_action_deadline_date [String](Time / Date, utc, iso8601)
152
+ def self.update_call_to_action_deadline_date(application_id:, call_to_action_deadline_date:, request_data: DVLAApplicationDomainServiceOpenAPIClient::UpdateCallToActionDeadlineDateRequest.new(application_id:, call_to_action_deadline_date:))
153
+ make_domain_endpoint_call(endpoint: 'update_call_to_action_deadline_date_with_http_info',
154
+ request_data: request_data)
155
+ end
156
+
157
+ # @param **application_id [String](UUID)
158
+ # @param **image_id [String](UUID)
159
+ # @param **image_type [Enum] Photo, Signature
160
+ # @param **image_status [String]
161
+ def self.update_image_status(application_id:, image_id:, image_type:, image_status:, request_data: DVLAApplicationDomainServiceOpenAPIClient::UpdateImageStatusRequest.new({ application_id:, image_id:, image_type:, image_status: }))
162
+ make_domain_endpoint_call(endpoint: 'update_image_status_with_http_info',
163
+ request_data: request_data)
164
+ end
165
+
166
+ # @param **application_id [String](UUID)
167
+ # @param **payment_amount [String]
168
+ # @param **payment_id [Integer]
169
+ # @param **payment_status [Enum]
170
+ def self.update_payment(application_id:, payment_amount:, payment_id:, payment_status:, request_data: DVLAApplicationDomainServiceOpenAPIClient::UpdatePaymentRequest.new({ application_id:, payment_amount:, payment_id:, payment_status: }))
171
+ DVLA::Application.logger.info("Updating payment for application_id: #{application_id.green}")
172
+ make_domain_endpoint_call(endpoint: 'update_payment_with_http_info',
173
+ request_data: request_data)
174
+ end
175
+
176
+ # The below help setup the client for the above endpoint calls
177
+ def self.initialize_domain_api_instance
178
+ api_id = ENV.fetch('APPLICATION_DOMAIN_API_ID', Settings.application_helper.services.application_domain.api_id)
179
+ vpce_id = ENV.fetch('APPLICATION_DOMAIN_VPCE_ID', Settings.application_helper.services.aws.vpce_id)
180
+
181
+ config = DVLAApplicationDomainServiceOpenAPIClient::Configuration.new
182
+ config.base_path = ENV.fetch('APPLICATION_DOMAIN_STAGE_NAME', Settings.application_helper.services.application_domain.stage_name)
183
+ config.scheme = 'https'
184
+ config.host = "#{api_id}-vpce-#{vpce_id}.execute-api.eu-west-2.amazonaws.com"
185
+ config.server_index = nil
186
+ client = RequestSigningDomainApiClient.new(config)
187
+ DVLAApplicationDomainServiceOpenAPIClient::DefaultApi.new(client)
188
+ end
189
+
190
+ def self.application_domain_test_headers
191
+ {
192
+ dvla_resource: RequestHeaders::DVLA_RESOURCE,
193
+ dvla_origin_resource: RequestHeaders::DVLA_ORIGIN_RESOURCE,
194
+ x_correlation_id: RequestHeaders::X_CORRELATION_ID,
195
+ origin_timestamp: RequestHeaders::ORIGIN_TIMESTAMP,
196
+ dvla_session_id: RequestHeaders::DVLA_SESSION_ID,
197
+ }
198
+ end
199
+
200
+ # Generic endpoint call method
201
+ # @Param [endpoint](String), references endpoint to make call to
202
+ # @Param [request_data](Object), is an object of type related to the endpoint, DVLAApplicationDomainServiceOpenAPIClient methods used to generate these
203
+ def self.make_domain_endpoint_call(endpoint:, request_data:)
204
+ api_instance = initialize_domain_api_instance
205
+ opts = application_domain_test_headers
206
+
207
+ begin
208
+ # makes call to specified endpoint using the correct request_input data
209
+ data, status_code, _headers = api_instance.method(endpoint).call(RequestHeaders::DVLA_RESOURCE,
210
+ RequestHeaders::DVLA_ORIGIN_RESOURCE,
211
+ request_data,
212
+ opts)
213
+
214
+ DVLA::Application.logger.info("Call made to Domain endpoint: #{endpoint}, Status code response: #{status_code}".blue)
215
+ rescue DVLAApplicationDomainServiceOpenAPIClient::ApiError => e
216
+ raise(StandardError, DVLA::Application.logger.info { "Error when calling DefaultApi->#{endpoint}: #{e}".red })
217
+ end
218
+ data
219
+ end
220
+
221
+ class RequestSigningDomainApiClient < DVLAApplicationDomainServiceOpenAPIClient::ApiClient
222
+ def initialize(config = nil)
223
+ @signer = AWS.create_signer
224
+ super
225
+ end
226
+
227
+ def call_api(http_method, path, opts = nil)
228
+ signed_request = @signer.sign_request(
229
+ http_method:,
230
+ url: build_request_url(path),
231
+ body: opts[:body],
232
+ )
233
+ opts[:header_params].merge!(signed_request.headers)
234
+ super
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,120 @@
1
+ module DVLA
2
+ module Application
3
+ module ApplicationProcessEngine
4
+
5
+ # @param *application_id [String] (UUID), required
6
+ def self.start_processing(application_id:, request_data: DVLAApplicationProcessEngineOpenAPIClient::StartProcessingRequest.new({ application_id: }))
7
+ make_ape_endpoint_call(application_id:,
8
+ endpoint: 'start_processing_request_with_http_info',
9
+ request_data: request_data)
10
+ end
11
+
12
+ # @param *application_id [String] (date), required
13
+ # @param *call_to_action_deadline_date [String] (Date-Time), required, UTC format, eg "2022-01-01T09:00:00Z"
14
+ def self.extend_application(application_id:, call_to_action_deadline_date:, request_data: DVLAApplicationProcessEngineOpenAPIClient::ExtendApplicationRequest.new({ application_id:, call_to_action_deadline_date: }))
15
+ make_ape_endpoint_call(application_id:,
16
+ endpoint: 'extend_application_request_with_http_info',
17
+ request_data: request_data)
18
+ end
19
+
20
+ # @param *application_id [String] (date), required
21
+ def self.manual_cancel_application(application_id:, request_data: DVLAApplicationProcessEngineOpenAPIClient::ManualCancelApplicationRequest.new({ application_id: }))
22
+ make_ape_endpoint_call(application_id:,
23
+ endpoint: 'manual_cancel_application_request_with_http_info',
24
+ request_data: request_data)
25
+ end
26
+
27
+ # @param *application_id [String] (date), required
28
+ # @param *execution_status [String] (Enum), optional, 'RUNNING,SUCCEEDED,FAILED,TIMED_OUT,ABORTED'
29
+ def self.retrieve_executions(application_id:, execution_status: nil, request_data: DVLAApplicationProcessEngineOpenAPIClient::RetrieveExecutionsRequest.new({ application_id:, execution_status: }))
30
+ make_ape_endpoint_call(endpoint: 'retrieve_executions_request_with_http_info',
31
+ request_data: request_data)
32
+ end
33
+
34
+ # @param *application_id [String] (date), required
35
+ # @param *execution_type [String] (Enum), required, 'Fulfilment,Deletion,SevenDaysBeforeTimeout,NinetyDaysAfterApproved'
36
+ # @param *failed_execution_arn [String] (AWS Arn), required
37
+ def self.restart_execution(application_id:, execution_type:, failed_execution_arn:, request_data: DVLAApplicationProcessEngineOpenAPIClient::RestartExecutionRequest.new({ application_id:, execution_type:, failed_execution_arn: }))
38
+ make_ape_endpoint_call(application_id:,
39
+ endpoint: 'restart_execution_request_with_http_info',
40
+ request_data: request_data)
41
+ end
42
+
43
+ def self.health_check
44
+ api_instance = initialize_ape_api_instance
45
+ api_instance.health_check_with_http_info
46
+ end
47
+
48
+ def self.make_ape_endpoint_call(endpoint:, request_data:, application_id: nil)
49
+ api_instance = initialize_ape_api_instance
50
+ opts = application_process_engine_test_headers
51
+
52
+ begin
53
+ params = [application_id,
54
+ RequestHeaders::DVLA_RESOURCE,
55
+ RequestHeaders::DVLA_ORIGIN_RESOURCE,
56
+ request_data,
57
+ opts]
58
+
59
+ # This has been added to amend the params passed into a retrieve execution call, as this endpoint doesn't use middleware it does not need
60
+ # the application_id in the call parameters
61
+ params.delete(application_id) if endpoint == 'retrieve_executions_request_with_http_info'
62
+
63
+ # makes call to specified endpoint using the correct request_input data
64
+ data, status_code, _headers = api_instance.method(endpoint).call(*params)
65
+
66
+ DVLA::Application.logger.info("Call made to APE endpoint: #{endpoint}, Status code response: #{status_code}".blue)
67
+ rescue DVLAApplicationProcessEngineOpenAPIClient::ApiError => e
68
+ DVLA::Application.logger.info { "Error when calling DefaultApi->#{endpoint}: #{e}".red }
69
+ return {response_data: e, status_code: e.code}
70
+ end
71
+ {response_data: data, status_code: status_code}
72
+ end
73
+
74
+ def self.initialize_ape_api_instance
75
+ api_id = ENV.fetch('APPLICATION_PROCESS_ENGINE_API_ID', Settings.application_helper.services.application_process_engine.api_id)
76
+ vpce_id = ENV.fetch('APPLICATION_PROCESS_ENGINE_VPCE_ID', Settings.application_helper.services.aws.vpce_id)
77
+
78
+ config = DVLAApplicationProcessEngineOpenAPIClient::Configuration.new
79
+ config.base_path = ENV.fetch('APPLICATION_PROCESS_ENGINE_STAGE_NAME', Settings.application_helper.services.application_process_engine.stage_name)
80
+ config.scheme = 'https'
81
+ config.host = "#{api_id}-vpce-#{vpce_id}.execute-api.eu-west-2.amazonaws.com"
82
+ config.server_index = nil
83
+ client = RequestSigningApeApiClient.new(config)
84
+ DVLAApplicationProcessEngineOpenAPIClient::DefaultApi.new(client)
85
+ end
86
+
87
+ def self.application_process_engine_test_headers
88
+ {
89
+ dvla_user: RequestHeaders::DVLA_USER,
90
+ x_correlation_id: RequestHeaders::X_CORRELATION_ID,
91
+ origin_timestamp: RequestHeaders::ORIGIN_TIMESTAMP,
92
+ dvla_session_id: RequestHeaders::DVLA_SESSION_ID,
93
+ }
94
+ end
95
+
96
+ class RequestSigningApeApiClient < DVLAApplicationProcessEngineOpenAPIClient::ApiClient
97
+ def initialize(config = nil)
98
+ @signer = Aws::Sigv4::Signer.new(
99
+ service: 'execute-api',
100
+ region: 'eu-west-2',
101
+ access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
102
+ secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
103
+ session_token: ENV.fetch('AWS_SESSION_TOKEN'),
104
+ )
105
+ super
106
+ end
107
+
108
+ def call_api(http_method, path, opts = nil)
109
+ signed_request = @signer.sign_request(
110
+ http_method: http_method,
111
+ url: build_request_url(path),
112
+ body: opts[:body],
113
+ )
114
+ opts[:header_params].merge!(signed_request.headers)
115
+ super
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,24 @@
1
+ module DVLA
2
+ module Application
3
+ class AwsCredentialsError < StandardError
4
+ end
5
+
6
+ def self.check_aws_credentials
7
+ # First check if required environment variables exist
8
+ required_keys = %w[AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN]
9
+ missing_keys = required_keys.select { |key| ENV[key].nil? || ENV[key].empty? }
10
+ unless missing_keys.empty?
11
+ raise AwsCredentialsError, "Missing AWS credentials: #{missing_keys.join(', ')}"
12
+ end
13
+
14
+ # Then verify the credentials are valid
15
+ sts_client = Aws::STS::Client.new
16
+ begin
17
+ sts_client.get_caller_identity
18
+ DVLA::Application.logger.info 'All AWS required credentials are present and valid.'
19
+ rescue Aws::STS::Errors::InvalidClientTokenId, Aws::STS::Errors::ExpiredToken
20
+ raise AwsCredentialsError, 'AWS credentials are expired or invalid, please log back into AWS to continue'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,67 @@
1
+ module DVLA
2
+ module Application
3
+ module ChannelAPI
4
+ def self.initialize_channel_api_instance
5
+ api_id = ENV.fetch('CHANNEL_API_API_ID', Settings.application_helper.services.driving_licence_channel_api.api_id)
6
+ vpce_id = ENV.fetch('CHANNEL_API_VPCE_ID', Settings.application_helper.services.aws.vpce_id)
7
+
8
+ config = DVLADrivingLicenceChannelApiOpenAPIClient::Configuration.new
9
+ config.base_path = ENV.fetch('CHANNEL_API_STAGE_NAME', Settings.application_helper.services.driving_licence_channel_api.stage_name)
10
+ config.scheme = 'https'
11
+ config.host = "#{api_id}-vpce-#{vpce_id}.execute-api.eu-west-2.amazonaws.com"
12
+ config.server_index = nil
13
+ client = DrivingLicenceChannelApiClient.new(config)
14
+ DVLADrivingLicenceChannelApiOpenAPIClient::DefaultApi.new(client)
15
+ end
16
+
17
+ def self.driving_licence_channel_api_test_headers
18
+ {
19
+ dvla_resource: RequestHeaders::DVLA_RESOURCE,
20
+ dvla_origin_resource: RequestHeaders::DVLA_ORIGIN_RESOURCE,
21
+ x_correlation_id: RequestHeaders::X_CORRELATION_ID,
22
+ origin_timestamp: RequestHeaders::ORIGIN_TIMESTAMP,
23
+ dvla_session_id: RequestHeaders::DVLA_SESSION_ID,
24
+ }
25
+ end
26
+
27
+ def self.driving_licence_channel_api_test_headers_including_user
28
+ {
29
+ dvla_user: RequestHeaders::DVLA_USER,
30
+ dvla_resource: RequestHeaders::DVLA_RESOURCE,
31
+ dvla_origin_resource: RequestHeaders::DVLA_ORIGIN_RESOURCE,
32
+ x_correlation_id: RequestHeaders::X_CORRELATION_ID,
33
+ origin_timestamp: RequestHeaders::ORIGIN_TIMESTAMP,
34
+ dvla_session_id: RequestHeaders::DVLA_SESSION_ID,
35
+ }
36
+ end
37
+
38
+ def self.driving_licence_channel_api_test_headers_disable_payment_processing
39
+ {
40
+ dvla_resource: RequestHeaders::DVLA_RESOURCE,
41
+ dvla_origin_resource: RequestHeaders::DVLA_ORIGIN_RESOURCE,
42
+ x_correlation_id: RequestHeaders::X_CORRELATION_ID,
43
+ origin_timestamp: RequestHeaders::ORIGIN_TIMESTAMP,
44
+ dvla_session_id: RequestHeaders::DVLA_SESSION_ID,
45
+ disable_payment_processing: RequestHeaders::DISABLE_PAYMENT_PROCESSING,
46
+ }
47
+ end
48
+
49
+ class DrivingLicenceChannelApiClient < DVLADrivingLicenceChannelApiOpenAPIClient::ApiClient
50
+ def initialize(config = nil)
51
+ @signer = AWS.create_signer
52
+ super
53
+ end
54
+
55
+ def call_api(http_method, path, opts = nil)
56
+ signed_request = @signer.sign_request(
57
+ http_method:,
58
+ url: build_request_url(path),
59
+ body: opts[:body],
60
+ )
61
+ opts[:header_params].merge!(signed_request.headers)
62
+ super
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end