Skip to content

Commit a7702ec

Browse files
committed
BAU: allow forms data_api to specify db user
1 parent 9fbfcab commit a7702ec

6 files changed

Lines changed: 17 additions & 13 deletions

File tree

support/forms-cli/lib/commands/data_api.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def run
1313
parse_options
1414
return unless aws_authenticated? && valid_options?
1515

16-
@connection = DataApiConnection.new(fetch_environment, @options[:database], @options[:cluster])
16+
@connection = DataApiConnection.new(fetch_environment, @options[:database], @options[:cluster], @options[:user])
1717

1818
begin
1919
print execute_statement
@@ -74,6 +74,10 @@ def parse_options
7474
opts.on("-sSTATEMENT", "--statement=STATEMENT", "[Mandatory] The statement to execute") do |statement|
7575
@options[:statement] = statement
7676
end
77+
78+
opts.on("-uUSER", "--user=USER", "The database user to connect as") do |user|
79+
@options[:user] = user
80+
end
7781
}.parse!
7882
end
7983

support/forms-cli/lib/utilities/data_api_connection.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99

1010
# Executes statements on AWS RDS using the Data API.
1111
class DataApiConnection
12-
def initialize(env, database_name, cluster_name)
12+
def initialize(env, database_name, cluster_name, database_user = nil)
1313
@env = env
1414
@database_name = database_name
1515
@cluster_name = cluster_name || default_cluster_name
16+
@database_user = database_user || database_name
1617

1718
@data_service = Aws::RDSDataService::Client.new
1819
@rds = Aws::RDS::Client.new
@@ -43,8 +44,7 @@ def default_cluster_name
4344
end
4445

4546
def query_credential_arn
46-
secret_name = "rds-db-credentials/#{query_database_resource_id}/#{@database_name}"
47-
# secret_name = "data-api/#{@env}/#{@database_name}/rds-credentials"
47+
secret_name = "rds-db-credentials/#{query_database_resource_id}/#{@database_user}"
4848

4949
begin
5050
secret = @secrets_manager.describe_secret({ secret_id: secret_name })

support/forms-cli/spec/commands/data_api_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
expect(DataApiConnection)
4040
.to have_received(:new)
41-
.with("dev", "forms-admin", "cluster-name")
41+
.with("dev", "forms-admin", "cluster-name", nil)
4242
.at_least(:once)
4343
end
4444

support/forms-cli/spec/fixtures/rds.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ module RDSFixtures
88

99
def self.describe_db_clusters
1010
@rds_stub.stub_data(:describe_db_clusters,
11-
{ db_clusters: [{ db_cluster_arn: "cluster-arn" }] })
11+
{ db_clusters: [{ db_cluster_arn: "cluster-arn", db_cluster_resource_id: "cluster-resource-id" }] })
1212
end
1313
end

support/forms-cli/spec/fixtures/secretsmanager.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ def self.empty_list_secrets
3232
def self.describe_secret
3333
@secrets_manager_stub.stub_data(:describe_secret,
3434
{
35-
arn: "arn:aws:secretsmanager:eu-west-2:123456789012:secret:data-api/dev/forms-admin/rds-credentials-AbCdEf",
36-
name: "data-api/dev/forms-admin/rds-credentials",
35+
arn: "arn:aws:secretsmanager:eu-west-2:123456789012:secret:rds-db-credentials/cluster-resource-id/forms-admin-AbCdEf",
36+
name: "rds-db-credentials/cluster-resource-id/forms-admin",
3737
description: "Data API credentials for forms-admin in dev environment",
3838
})
3939
end

support/forms-cli/spec/utilities/data_api_connection_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
secrets_manager_mock = instance_double(Aws::SecretsManager::Client)
1212
allow(secrets_manager_mock)
1313
.to receive(:describe_secret)
14-
.with(hash_including(secret_id: "data-api/dev/forms-admin/rds-credentials"))
14+
.with(hash_including(secret_id: "rds-db-credentials/cluster-resource-id/forms-admin"))
1515
.and_return(SecretsManagerFixtures.describe_secret)
1616

1717
secrets_manager_mock
@@ -56,7 +56,7 @@
5656
.to have_received(:execute_statement)
5757
.with(hash_including(
5858
resource_arn: "cluster-arn",
59-
secret_arn: "arn:aws:secretsmanager:eu-west-2:123456789012:secret:data-api/dev/forms-admin/rds-credentials-AbCdEf",
59+
secret_arn: "arn:aws:secretsmanager:eu-west-2:123456789012:secret:rds-db-credentials/cluster-resource-id/forms-admin-AbCdEf",
6060
))
6161
.at_least(:once)
6262
end
@@ -77,7 +77,7 @@
7777

7878
expect(secrets_manager_mock)
7979
.to have_received(:describe_secret)
80-
.with(hash_including(secret_id: "data-api/dev/forms-admin/rds-credentials"))
80+
.with(hash_including(secret_id: "rds-db-credentials/cluster-resource-id/forms-admin"))
8181
.at_least(:once)
8282
end
8383

@@ -111,7 +111,7 @@
111111
secrets_manager_mock_no_secret = instance_double(Aws::SecretsManager::Client)
112112
allow(secrets_manager_mock_no_secret)
113113
.to receive(:describe_secret)
114-
.with(hash_including(secret_id: "data-api/dev/forms-admin/rds-credentials"))
114+
.with(hash_including(secret_id: "rds-db-credentials/cluster-resource-id/forms-admin"))
115115
.and_raise(Aws::SecretsManager::Errors::ResourceNotFoundException.new("context", "Secret not found"))
116116

117117
secrets_manager_mock_no_secret
@@ -126,7 +126,7 @@
126126
it "raises an error about missing secret" do
127127
expect {
128128
described_class.new("dev", "forms-admin", "cluster-name").execute_statement("select * from testing;")
129-
}.to raise_error(/Data API credential secret 'data-api\/dev\/forms-admin\/rds-credentials' was not found/)
129+
}.to raise_error(/Data API credential secret 'rds-db-credentials\/cluster-resource-id\/forms-admin' was not found/)
130130
end
131131
end
132132
end

0 commit comments

Comments
 (0)