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.
- checksums.yaml +7 -0
- data/.drone.yml +481 -0
- data/.env.template +4 -0
- data/.rspec +3 -0
- data/.rubocop.yml +21 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/README.md +674 -0
- data/Rakefile +31 -0
- data/config/settings/drone-dev.yml +41 -0
- data/config/settings/drone-ext.yml +35 -0
- data/config/settings/drone-link.yml +35 -0
- data/config/settings/drone-perf.yml +35 -0
- data/config/settings/local-dev.yml +40 -0
- data/config/settings/local-ext.yml +35 -0
- data/config/settings/local-link.yml +35 -0
- data/config/settings/local-perf.yml +35 -0
- data/config/settings.yml +29 -0
- data/config/yarp.yml +6 -0
- data/functional-tests/Rakefile +74 -0
- data/functional-tests/chutney.yml +110 -0
- data/functional-tests/features/codl.feature +170 -0
- data/functional-tests/features/codl_image_review_states.feature +140 -0
- data/functional-tests/features/csudl.feature +54 -0
- data/functional-tests/features/csudl_image_review_states.feature +20 -0
- data/functional-tests/features/step_definitions/app_domain_steps.rb +213 -0
- data/functional-tests/features/step_definitions/application_creation_steps.rb +115 -0
- data/functional-tests/features/step_definitions/image_steps.rb +144 -0
- data/functional-tests/features/step_definitions/state_machine_steps.rb +43 -0
- data/functional-tests/features/support/data/artefacts.rb +27 -0
- data/functional-tests/features/support/data/image_helpers.rb +20 -0
- data/functional-tests/features/support/data/schema_helpers.rb +3 -0
- data/functional-tests/features/support/data/string_manipulation.rb +9 -0
- data/functional-tests/features/support/env.rb +25 -0
- data/functional-tests/features/support/hooks.rb +56 -0
- data/functional-tests/features/support/yarp_integration/yarp_helpers.rb +23 -0
- data/functional-tests/features/uodl_image_review_states.feature +244 -0
- data/functional-tests/features/uodl_non_processable.feature +441 -0
- data/functional-tests/features/uodl_processable.feature +416 -0
- data/lib/dvla/application_helper/builders/V1/application_builder.rb +298 -0
- data/lib/dvla/application_helper/builders/V1/codl_application_builder.rb +205 -0
- data/lib/dvla/application_helper/builders/V1/csudl_application_builder.rb +329 -0
- data/lib/dvla/application_helper/builders/V2/base_uodl_v2_application_builder.rb +357 -0
- data/lib/dvla/application_helper/builders/V2/cop_v2_application_builder.rb +59 -0
- data/lib/dvla/application_helper/builders/V2/dup_v2_application_builder.rb +84 -0
- data/lib/dvla/application_helper/builders/V2/exc_v2_application_builder.rb +55 -0
- data/lib/dvla/application_helper/builders/V2/rep_v2_application_builder.rb +84 -0
- data/lib/dvla/application_helper/builders/V2/tyr_v2_application_builder.rb +62 -0
- data/lib/dvla/application_helper/builders/V2/uodl_v2_application_builder.rb +278 -0
- data/lib/dvla/application_helper/builders/V3/base_uodl_v3_application_builder.rb +342 -0
- data/lib/dvla/application_helper/builders/V3/cop_v3_application_builder.rb +56 -0
- data/lib/dvla/application_helper/builders/V3/dup_v3_application_builder.rb +78 -0
- data/lib/dvla/application_helper/builders/V3/exc_v3_application_builder.rb +56 -0
- data/lib/dvla/application_helper/builders/V3/rep_v3_application_builder.rb +81 -0
- data/lib/dvla/application_helper/builders/V3/tyr_v3_application_builder.rb +59 -0
- data/lib/dvla/application_helper/builders/dup_rep_builder_mixin.rb +71 -0
- data/lib/dvla/application_helper/builders/photo_builder_mixin.rb +49 -0
- data/lib/dvla/application_helper/builders/photo_signature_builder_mixin.rb +68 -0
- data/lib/dvla/application_helper/configuration.rb +37 -0
- data/lib/dvla/application_helper/constants.rb +21 -0
- data/lib/dvla/application_helper/enums/review_state.rb +30 -0
- data/lib/dvla/application_helper/enums/unable_to_prove_licence_possession_reasons.rb +8 -0
- data/lib/dvla/application_helper/factories/address.rb +21 -0
- data/lib/dvla/application_helper/factories/application_details.rb +353 -0
- data/lib/dvla/application_helper/factories/casework.rb +7 -0
- data/lib/dvla/application_helper/factories/csudl_photo_signature_image.rb +156 -0
- data/lib/dvla/application_helper/factories/csudl_photo_signature_images.rb +85 -0
- data/lib/dvla/application_helper/factories/organ_donor.rb +32 -0
- data/lib/dvla/application_helper/factories/person.rb +73 -0
- data/lib/dvla/application_helper/factories/photo_image.rb +147 -0
- data/lib/dvla/application_helper/factories/photo_images.rb +183 -0
- data/lib/dvla/application_helper/factories/photo_signature_image.rb +158 -0
- data/lib/dvla/application_helper/factories/photo_signature_images.rb +64 -0
- data/lib/dvla/application_helper/fixtures/photo/comparison_image.jpeg +0 -0
- data/lib/dvla/application_helper/fixtures/photo/passport_image.jpg +0 -0
- data/lib/dvla/application_helper/fixtures/photo/photocard_back.jpg +0 -0
- data/lib/dvla/application_helper/fixtures/photo/photocard_front.jpg +0 -0
- data/lib/dvla/application_helper/fixtures/photo/rejected_user_uploaded_image.jpeg +0 -0
- data/lib/dvla/application_helper/fixtures/photo/user_uploaded_image.jpg +0 -0
- data/lib/dvla/application_helper/fixtures/signature/csudl_signature_image.tiff +0 -0
- data/lib/dvla/application_helper/fixtures/signature/passport_image.jpg +0 -0
- data/lib/dvla/application_helper/fixtures/signature/rejected_user_uploaded_image.jpg +0 -0
- data/lib/dvla/application_helper/fixtures/signature/user_uploaded_image.jpg +0 -0
- data/lib/dvla/application_helper/processors/application_status.rb +45 -0
- data/lib/dvla/application_helper/processors/application_task.rb +301 -0
- data/lib/dvla/application_helper/services/application_diary.rb +123 -0
- data/lib/dvla/application_helper/services/application_domain.rb +239 -0
- data/lib/dvla/application_helper/services/application_process_engine.rb +120 -0
- data/lib/dvla/application_helper/services/check_aws_credentials.rb +24 -0
- data/lib/dvla/application_helper/services/driving_licence_channel_api.rb +67 -0
- data/lib/dvla/application_helper/services/image_service.rb +116 -0
- data/lib/dvla/application_helper/services/image_utility.rb +82 -0
- data/lib/dvla/application_helper/services/state_machine_helpers.rb +146 -0
- data/lib/dvla/application_helper/version.rb +5 -0
- data/lib/dvla/application_helper.rb +92 -0
- data/renovate.json +4 -0
- data/scripts/application-login.sh +56 -0
- data/scripts/drone-aws-login.sh +18 -0
- data/scripts/seed_application.rb +268 -0
- data/sonar-project.properties +4 -0
- 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
|