Skip to content

Commit

Permalink
Vbms eservice upload (#3563)
Browse files Browse the repository at this point in the history
* gem update

* happy path for VBMS 2122 document upload

* magic frozen comments

* clean up the vbms integration

* update gemfile and rubocop setting

* one more rubocop change

* fix broken spec

* merge conflict

* add vbms settings to base settings file

* debug rails env

* debugging settings for vbms

* remove debugging logic

* update specs for vbms test

* rubocop updates

* revert poa change

* removing undeeded files

* Use correct uploader job

* revert uneeded gemfile changes
  • Loading branch information
charleystran authored Dec 4, 2019
1 parent 032e1d5 commit df3d107
Show file tree
Hide file tree
Showing 27 changed files with 718 additions and 15 deletions.
2 changes: 1 addition & 1 deletion .rspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
--color
--require spec_helper
--format Fuubar
--format progress
<% if ENV['CI'] %>
--format RspecJunitFormatter
--out log/rspec.xml
Expand Down
2 changes: 2 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ Style/ZeroLengthPredicate:

Metrics/LineLength:
Max: 120
Exclude:
- 'Gemfile'

Rails:
Enabled: true
Expand Down
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ gem 'breakers'
gem 'carrierwave-aws'
gem 'clam_scan'
gem 'config'
gem 'connect_vbms', git: 'https://github.com/department-of-veterans-affairs/connect_vbms.git', branch: 'master'
gem 'connect_vbms', git: 'https://github.com/department-of-veterans-affairs/connect_vbms.git', branch: 'master', require: 'vbms'
gem 'date_validator'
gem 'dry-struct'
gem 'dry-types'
Expand Down
8 changes: 4 additions & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ GIT

GIT
remote: https://github.com/department-of-veterans-affairs/connect_vbms.git
revision: 7c40e73c3730905752c1c1077e8d53ada8f9e048
revision: bebad55f8723f091c7d41522178b11999f574499
branch: master
specs:
connect_vbms (1.2.0)
Expand Down Expand Up @@ -426,13 +426,13 @@ GEM
mimemagic (~> 0.3.2)
memoist (0.15.0)
method_source (0.9.2)
mime-types (3.2.2)
mime-types (3.3)
mime-types-data (~> 3.2015)
mime-types-data (3.2019.0331)
mime-types-data (3.2019.1009)
mimemagic (0.3.2)
mini_magick (4.9.4)
mini_portile2 (2.4.0)
minitest (5.12.2)
minitest (5.13.0)
multi_json (1.13.1)
multipart-post (2.0.0)
nap (1.1.0)
Expand Down
1 change: 1 addition & 0 deletions config/initializers/bgs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

require 'socket'

# OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
LighthouseBGS.configure do |config|
config.application = Settings.bgs.application
config.client_ip = Socket.ip_address_list.detect(&:ipv4_private?).ip_address
Expand Down
5 changes: 3 additions & 2 deletions config/initializers/vbms.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# frozen_string_literal: true

# OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
if Settings.vbms.present?
ENV['CONNECT_VBMS_BASE_URL'] = Settings.vbms.vbms_base_url
ENV['CONNECT_VBMS_BASE_URL'] = Settings.vbms.url
ENV['CONNECT_VBMS_CACERT'] = Settings.vbms.ca_cert
ENV['CONNECT_VBMS_CERT'] = Settings.vbms.cert
ENV['CONNECT_VBMS_CLIENT_KEYFILE'] = Settings.vbms.client_keyfile
ENV['CONNECT_VBMS_KEYPASS'] = Settings.vbms.keypass
ENV['CONNECT_VBMS_SAML'] = Settings.vbms.saml
ENV['CONNECT_VBMS_SERVER_CERT'] = Settings.vbms.server_cert
ENV['CONNECT_VBMS_SHA256'] = 'false'
ENV['CONNECT_VBMS_SHA256'] = 'true'
ENV['CONNECT_VBMS_URL'] = "#{Settings.vbms.base_url}/vbmsp2-cms/streaming/eDocumentService-v4"
ENV['CONNECT_VBMS_ENV_DIR'] = Settings.vbms.environment_directory
end
10 changes: 10 additions & 0 deletions config/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -442,3 +442,13 @@ va_mobile:
mock: false
key_path: /fake/client/key/path
timeout: 15

vbms:
url: "https://internal-dsva-vagov-dev-fwdproxy-1893365470.us-gov-west-1.elb.amazonaws.com:4449"
saml: "vetsapi.client.vbms.aide.oit.va.gov.saml-token.xml"
keypass: "{{ lookup('credstash', 'vbms.dev.key_password') }}"
ca_cert: VBMS-Client-Signing-CA.crt
cert: vetsapi.client.vbms.aide.oit.va.gov.crt
client_keyfile: vetsapi.client.vbms.aide.oit.va.gov.p12
server_cert: vbms.aide.oit.va.gov.crt
environment_directory: /srv/vets-api/secret
4 changes: 4 additions & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@
t.string "source"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "vbms_new_document_version_ref_id"
t.string "vbms_document_series_ref_id"
t.string "vbms_error_message"
t.integer "vbms_upload_failure_count", default: 0
end

create_table "claims_api_supporting_documents", id: :uuid, default: -> { "uuid_generate_v4()" }, force: :cascade do |t|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def upload
power_of_attorney.status = 'submitted'
power_of_attorney.save!
power_of_attorney.reload
ClaimsApi::VbmsUploader.perform_async(power_of_attorney.id)
render json: power_of_attorney, serializer: ClaimsApi::PowerOfAttorneySerializer
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def upload
power_of_attorney.status = 'submitted'
power_of_attorney.save!
power_of_attorney.reload
ClaimsApi::VbmsUploader.perform_async(power_of_attorney.id)
render json: power_of_attorney, serializer: ClaimsApi::PowerOfAttorneySerializer
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,19 @@ class Form2122ModelSwagger
key :description, 'Required by JSON API standard'
key :required, %i[poa_code poa_first_name poa_last_name]

property :poa_code do
property :poaCode do
key :type, :string
key :example, 'A01'
key :description, 'Power of Attorney Code being submitted for Veteran'
end

property :poa_first_name do
property :poaFirstName do
key :type, :string
key :example, 'Bob'
key :description, 'First Name of person in organization being associated with Power of Attorney'
end

property :poa_last_name do
property :poaLastName do
key :type, :string
key :example, 'Jones'
key :description, 'Last Name of person in organization being associated with Power of Attorney'
Expand Down
69 changes: 69 additions & 0 deletions modules/claims_api/app/workers/claims_api/vbms_uploader.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# frozen_string_literal: true

require 'sidekiq'

module ClaimsApi
class VbmsUploader
include Sidekiq::Worker

def perform(power_of_attorney_id)
power_of_attorney = ClaimsApi::PowerOfAttorney.find(power_of_attorney_id)
uploader = ClaimsApi::PowerOfAttorneyUploader.new(power_of_attorney_id)
uploader.retrieve_from_store!(power_of_attorney.file_data[:filename])
filepath = "#{uploader.file.file}/#{power_of_attorney.file_data['filename']}"

upload_token_response = fetch_upload_token(
filepath: filepath,
file_number: power_of_attorney.auth_headers['va_eauth_pnid']
)
upload_response = upload_document(filepath: filepath, upload_token: upload_token_response.upload_token)
power_of_attorney.update(
status: 'uploaded',
vbms_new_document_version_ref_id: upload_response.upload_document_response[:@new_document_version_ref_id],
vbms_document_series_ref_id: upload_response.upload_document_response[:@document_series_ref_id]
)
rescue VBMS::Unknown
rescue_vbms_error(power_of_attorney)
end

def rescue_vbms_error(power_of_attorney)
power_of_attorney.vbms_upload_failure_count = power_of_attorney.vbms_upload_failure_count + 1
power_of_attorney.vbms_error_message = 'An unknown error has occurred when uploading document'
if power_of_attorney.vbms_upload_failure_count < 5
self.class.perform_in(30.minutes, power_of_attorney.id)
else
power_of_attorney.status = 'failed'
end
power_of_attorney.save
end

def client
@client ||= VBMS::Client.from_env_vars
end

def fetch_upload_token(filepath:, file_number:)
content_hash = Digest::SHA1.hexdigest(File.read(filepath))
filename = SecureRandom.uuid + File.basename(filepath)

vbms_request = VBMS::Requests::InitializeUpload.new(
content_hash: content_hash,
filename: filename,
file_number: file_number,
va_receive_date: Time.zone.now,
doc_type: '295',
source: 'BVA',
subject: '295',
new_mail: true
)
client.send_request(vbms_request)
end

def upload_document(filepath:, upload_token:)
upload_request = VBMS::Requests::UploadDocument.new(
upload_token: upload_token,
filepath: filepath
)
client.send_request(upload_request)
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# frozen_string_literal: true

class AddVbmsIdFieldsToClaimsApiPowerOfAttorney < ActiveRecord::Migration[5.2]
def change
add_column :claims_api_power_of_attorneys, :vbms_new_document_version_ref_id, :string
add_column :claims_api_power_of_attorneys, :vbms_document_series_ref_id, :string
add_column :claims_api_power_of_attorneys, :vbms_error_message, :string
add_column :claims_api_power_of_attorneys, :vbms_upload_failure_count, :integer
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

class AddDefaultVbmsFailureCountToClaimsApiPowerOfAttorneys < ActiveRecord::Migration[5.2]
def up
change_column_default :claims_api_power_of_attorneys, :vbms_upload_failure_count, 0
end

def down
change_column_default :claims_api_power_of_attorneys, :vbms_upload_failure_count, nil
end
end
2 changes: 1 addition & 1 deletion modules/claims_api/spec/factories/power_of_attorney.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
factory :power_of_attorney, class: 'ClaimsApi::PowerOfAttorney' do
id { SecureRandom.uuid }
status { 'submitted' }
auth_headers { {} }
auth_headers { { 'va_eauth_pnid': '796378881' } }
form_data do
json = JSON.parse(File.read("#{::Rails.root}/modules/claims_api/spec/fixtures/form_2122_json_api.json"))
json['data']['attributes']
Expand Down
32 changes: 32 additions & 0 deletions modules/claims_api/spec/fixtures/test_client.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFjzCCA3egAwIBAgIJAJeybUuGHaRyMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV
BAYTAlVTMQswCQYDVQQIDAJEQzETMBEGA1UEBwwKV2FzaGluZ3RvbjEMMAoGA1UE
CgwDRGlzMR8wHQYDVQQDDBZjb25uZWN0LXZibXMuZHMudmEuZ292MB4XDTE5MTIw
MzE4NDUwN1oXDTIyMDgzMDE4NDUwN1owXjELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AkRDMRMwEQYDVQQHDApXYXNoaW5ndG9uMQwwCgYDVQQKDANEaXMxHzAdBgNVBAMM
FmNvbm5lY3QtdmJtcy5kcy52YS5nb3YwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
ggIKAoICAQDfYs1U+yig+ouFhV2C9wgHLY3sgVlZcrDpK6ayVAbJ3zwjNo+N/ygN
wHTdHfGxn6YBfcr22uXI6/6DTcQ5AujrgmncT6YtVPMsD6I8hNMWzqWPIZkHb6DK
3mGutU9WCLoqxAcnDqEjnwGdzQSO4vK9JRfGssl/HBAr5zsKK3hcwt0iWQ8Q8Cy0
4FQh+RhTd7+7olRjevsW2jygastJa1bnJDcJdSNNGbm8+iLlGmUwhMBYj/wnBbzN
mQk8WdDSYGTqeWAmW7G/mxV+2zy5gEcpoiObdzKvhh8makzVkfOrLPDzoGEuLyCs
Dhv0uhacNM6TqkhwxXHDkpN3P55IKimnLjluMKIPw0pRTrZHTDcgiqFirgBA36Zm
xhD3ARKCTJK1NnUB7ZVTYy7Mw72o+igDRrYkqoP5Xe+qGq53QPi1lbn6+rKXk0wT
BNn6OF69FW3PikFsVUJgygPHTQt6Lda8ZDPR8E6+8UJM5yvnLmJm9y6bQWbRXsj5
DH/SQgtwoc7Pgg3jon4v9I9OJk2J7NZD/Flm9z2SjQJwd8w221eTZrVb8zduthNv
BfO/9OiBJZk6BAsSqy+IGeJm3m2deX8hxt1loVerlbMVo78EHljR0oQzVMiIt0IK
VX22r+89sjvlmWX7Zd78nd9wfEx6m/K8rogRRMSfPaSslzgk8Zg+IQIDAQABo1Aw
TjAdBgNVHQ4EFgQUhYHlYflFL3oI3mkdlRnM4LSYLPMwHwYDVR0jBBgwFoAUhYHl
YflFL3oI3mkdlRnM4LSYLPMwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
AgEAQqGGUXmLwdIrxlh0YZcAfeTyzQ5IVBMtti0w0OtN+NPEsv3fjhlXlNljr5Gr
wTUOXlCDotwNH2R9TT1knpU4L6j8qGO3389z48Lx+RdW2804xBwZujwlEwfQY0VW
Os5t+eU1mKhlykyFLEfSXjmuJ9Agtku1g23ox7mcR8GCdTSMzAba6MfNzVU+E45o
Je2jea0dLi8pxI+fe7gpFjBzJzII8EJlq09k9nAWwtqPZvrr46lGasGEziVpJ5ce
y9AhVStFWQcpbkqlMNhWxXI1Wmajw4KKjVSbXBy8qTTAf0a/U8cLxZ5Br2qMgYu/
ueQrHALtRn7H4TCoI5jPr492mzSFF8H+me3u13Q/l4ujbL+qE7Vq19N4TpWuNebP
Xq0ftgkqy3+UOogqsjaywCzA3PyFRaHWdQSFYtT10jHujgRcK+DXLhkWQFQziEEK
r7zKs99kltpPu8W6fP73qJhK8eScMRJGM8s+CaADM1jgEGnMZs+UqMvthZH3bKHK
u3QtDq29rz6zmTtW+oEcPZgSPPYJZBtv38wBwgEMmfweteQr+4rWDZTp7S25eCxB
b6dQkK1C0eiqK84Ol6a7u0OlcxvS7QEC6BkMy/ysA2I3FjRRYeX+UgsqFu6TWLn4
MAb+7fuP0at7jR+UiN8Q9bLU8eaiY+UdDgQtKhAIBvQ+Szw=
-----END CERTIFICATE-----
52 changes: 52 additions & 0 deletions modules/claims_api/spec/fixtures/test_client.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
2hXCaOx7hIHFk2XegJiJxMxTpzUkk8I=
-----END PRIVATE KEY-----
Binary file added modules/claims_api/spec/fixtures/test_client.p12
Binary file not shown.
Loading

0 comments on commit df3d107

Please sign in to comment.