From 163d74bd2e838c56c4372b7926fb8441618b1bf8 Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:50:33 -0700 Subject: [PATCH 01/10] trim whitespace --- crates/pg/src/model.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/pg/src/model.rs b/crates/pg/src/model.rs index b6df84f5..11e5458e 100644 --- a/crates/pg/src/model.rs +++ b/crates/pg/src/model.rs @@ -790,9 +790,10 @@ fn parse_pg_point(s: Option) -> Result>, Box = stripped_parens.split(',').collect(); - let lat = coords[0].parse::().unwrap(); - let lng = coords[1].parse::().unwrap(); - Ok(Some(Point::new(lat, lng))) + let lat = coords[0].trim().parse::().unwrap(); + let lng = coords[1].trim().parse::().unwrap(); + let point = Point::new(lat, lng); + Ok(Some(point)) } fn parse_pg_timestamp(time: Option) -> Result>, Box> { From b70a2673bf1df4f5b188247da82cdc38eced7481 Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:50:48 -0700 Subject: [PATCH 02/10] test for local env --- scripts/encode-client-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/encode-client-env.sh b/scripts/encode-client-env.sh index c24f8b91..61b44c4b 100644 --- a/scripts/encode-client-env.sh +++ b/scripts/encode-client-env.sh @@ -35,7 +35,7 @@ for l in "${ROWS[@]}"; do VAL="${PAIR[1]}" fi - if [[ $ENABLE_API_AUTH == 'false' ]]; then + if [[ $ENV == 'local' ]]; then if [[ $VAR == 'POOL_ID' ]]; then VAL= fi From 81bc92f157e9e29cc2d6b406403484b879023922 Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:52:09 -0700 Subject: [PATCH 03/10] lambda web adapter as terraform module option --- .../v001/lambda.tf | 16 +++++++++------- .../v001/outputs.tf | 0 .../v001/variables.tf | 6 +++++- 3 files changed, 14 insertions(+), 8 deletions(-) rename infrastructure/terraform/aws/modules/{web-adapter-lambda => provided-lambda}/v001/lambda.tf (91%) rename infrastructure/terraform/aws/modules/{web-adapter-lambda => provided-lambda}/v001/outputs.tf (100%) rename infrastructure/terraform/aws/modules/{web-adapter-lambda => provided-lambda}/v001/variables.tf (86%) diff --git a/infrastructure/terraform/aws/modules/web-adapter-lambda/v001/lambda.tf b/infrastructure/terraform/aws/modules/provided-lambda/v001/lambda.tf similarity index 91% rename from infrastructure/terraform/aws/modules/web-adapter-lambda/v001/lambda.tf rename to infrastructure/terraform/aws/modules/provided-lambda/v001/lambda.tf index 6a311ffa..be225a1e 100644 --- a/infrastructure/terraform/aws/modules/web-adapter-lambda/v001/lambda.tf +++ b/infrastructure/terraform/aws/modules/provided-lambda/v001/lambda.tf @@ -7,9 +7,9 @@ locals { SERVICE_NAME_LOWER = replace(var.service_name, "-", "_") LOG_GROUP_NAME = "/aws/lambda/${aws_lambda_function.default.function_name}" PROJECT_CONF = yamldecode(file("../../../../../project.yaml")) - WEB_ADAPTER_CONF = local.PROJECT_CONF.infrastructure.terraform.aws.modules.web-adapter-lambda - READINESS_CHECK_PATH = local.WEB_ADAPTER_CONF.env_var.set.READINESS_CHECK_PATH.default - WEB_ADAPTER_LAYER_VERSION = local.WEB_ADAPTER_CONF.env_var.set.WEB_ADAPTER_LAYER_VERSION.default + ENVIRONMENT_CONF = local.PROJECT_CONF.infrastructure.terraform.aws.modules.environment.env_var.set + READINESS_CHECK_PATH = local.ENVIRONMENT_CONF.READINESS_CHECK_PATH.default + WEB_ADAPTER_LAYER_VERSION = local.ENVIRONMENT_CONF.WEB_ADAPTER_LAYER_VERSION.default BINARY_NAME = local.PROJECT_CONF.services.env_var.set.BINARY_NAME.default LAMBDA_RUNTIME = local.PROJECT_CONF.infrastructure.terraform.aws.modules.env_var.set.LAMBDA_RUNTIME.default } @@ -36,18 +36,20 @@ resource "aws_lambda_function" "default" { environment { variables = merge( - { + // add lambda web adapter env vars if aws_lwa_port set + var.aws_lwa_port != null ? { READINESS_CHECK_PATH = local.READINESS_CHECK_PATH PORT = var.aws_lwa_port "${local.SERVICE_NAME_UPPER}_PORT" = var.aws_lwa_port - }, + } : {}, var.env_vars, ) } - layers = [ + // add lambda web adapter layer if aws_lwa_port set + layers = concat(var.lambda_layer_arns, var.aws_lwa_port != null ? [ "arn:aws:lambda:${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:${local.WEB_ADAPTER_LAYER_VERSION}" - ] + ] : []) } resource "aws_lambda_function_url" "default" { diff --git a/infrastructure/terraform/aws/modules/web-adapter-lambda/v001/outputs.tf b/infrastructure/terraform/aws/modules/provided-lambda/v001/outputs.tf similarity index 100% rename from infrastructure/terraform/aws/modules/web-adapter-lambda/v001/outputs.tf rename to infrastructure/terraform/aws/modules/provided-lambda/v001/outputs.tf diff --git a/infrastructure/terraform/aws/modules/web-adapter-lambda/v001/variables.tf b/infrastructure/terraform/aws/modules/provided-lambda/v001/variables.tf similarity index 86% rename from infrastructure/terraform/aws/modules/web-adapter-lambda/v001/variables.tf rename to infrastructure/terraform/aws/modules/provided-lambda/v001/variables.tf index 1e8fe20d..4eaee90e 100644 --- a/infrastructure/terraform/aws/modules/web-adapter-lambda/v001/variables.tf +++ b/infrastructure/terraform/aws/modules/provided-lambda/v001/variables.tf @@ -25,6 +25,10 @@ variable "create_secret" { variable "artifacts_bucket_name" {} variable "ssm_prefix" {} variable "env_id" {} -variable "aws_lwa_port" {} variable "lambda_timeout" { default = 30 } variable "lambda_url_authorization_type" { default = "AWS_IAM" } +variable "aws_lwa_port" { default = null } +variable "lambda_layer_arns" { + type = list(string) + default = [] +} From 4fa44e6edef1b547f8b03cdec9c21a75aeb2c10d Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:52:48 -0700 Subject: [PATCH 04/10] switch lambdas to provided lambda terraform module --- .../modules/environment/v001/go-migrate.tf | 2 +- .../environment/v001/lambda-services.tf | 124 +++++++++--------- .../aws/modules/environment/v001/locals.tf | 5 +- project.yaml | 21 ++- 4 files changed, 75 insertions(+), 77 deletions(-) diff --git a/infrastructure/terraform/aws/modules/environment/v001/go-migrate.tf b/infrastructure/terraform/aws/modules/environment/v001/go-migrate.tf index 35495d89..a35bf458 100644 --- a/infrastructure/terraform/aws/modules/environment/v001/go-migrate.tf +++ b/infrastructure/terraform/aws/modules/environment/v001/go-migrate.tf @@ -1,5 +1,5 @@ module "go_migrate" { - source = "../../web-adapter-lambda/v001" + source = "../../provided-lambda/v001" service_name = "go-migrate" env = var.env ssm_prefix = var.ssm_prefix diff --git a/infrastructure/terraform/aws/modules/environment/v001/lambda-services.tf b/infrastructure/terraform/aws/modules/environment/v001/lambda-services.tf index 27ea5b75..df408990 100644 --- a/infrastructure/terraform/aws/modules/environment/v001/lambda-services.tf +++ b/infrastructure/terraform/aws/modules/environment/v001/lambda-services.tf @@ -1,39 +1,39 @@ // modules require ${service_name}-src.zip in artifacts s3 module "request_create" { - source = "../../web-adapter-lambda/v001" + source = "../../provided-lambda/v001" service_name = "request-create" env = var.env ssm_prefix = var.ssm_prefix env_id = var.env_id env_vars = merge(local.POSTGRES_VARS, { - RULE_URL = module.rule.lambda_function_url + RULE_URL = module.rule.lambda_function_url }) - aws_lwa_port = local.REQUEST_CREATE_PORT - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - attached_policy_arns = [] - create_secret = true // suppports local testing + aws_lwa_port = local.REQUEST_CREATE_PORT + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + attached_policy_arns = [] + create_secret = true // suppports local testing } ########################## module "request_approve" { - source = "../../web-adapter-lambda/v001" - service_name = "request-approve" - env = var.env - ssm_prefix = var.ssm_prefix - env_id = var.env_id - env_vars = merge(local.POSTGRES_VARS, {}) - aws_lwa_port = local.REQUEST_APPROVE_PORT - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - create_secret = true - attached_policy_arns = [] + source = "../../provided-lambda/v001" + service_name = "request-approve" + env = var.env + ssm_prefix = var.ssm_prefix + env_id = var.env_id + env_vars = merge(local.POSTGRES_VARS, {}) + aws_lwa_port = local.REQUEST_APPROVE_PORT + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + create_secret = true + attached_policy_arns = [] } module "requests_by_account" { - source = "../../web-adapter-lambda/v001" + source = "../../provided-lambda/v001" service_name = "requests-by-account" env = var.env ssm_prefix = var.ssm_prefix @@ -41,27 +41,27 @@ module "requests_by_account" { env_vars = merge(local.POSTGRES_VARS, { RETURN_RECORD_LIMIT = local.RETURN_RECORD_LIMIT }) - aws_lwa_port = local.REQUESTS_BY_ACCOUNT_PORT - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - create_secret = true + aws_lwa_port = local.REQUESTS_BY_ACCOUNT_PORT + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + create_secret = true } module "request_by_id" { - source = "../../web-adapter-lambda/v001" - service_name = "request-by-id" - env = var.env - ssm_prefix = var.ssm_prefix - env_id = var.env_id - env_vars = merge(local.POSTGRES_VARS, {}) - aws_lwa_port = local.REQUEST_BY_ID_PORT - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - create_secret = true + source = "../../provided-lambda/v001" + service_name = "request-by-id" + env = var.env + ssm_prefix = var.ssm_prefix + env_id = var.env_id + env_vars = merge(local.POSTGRES_VARS, {}) + aws_lwa_port = local.REQUEST_BY_ID_PORT + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + create_secret = true } module "transactions_by_account" { - source = "../../web-adapter-lambda/v001" + source = "../../provided-lambda/v001" service_name = "transactions-by-account" env = var.env ssm_prefix = var.ssm_prefix @@ -70,39 +70,39 @@ module "transactions_by_account" { env_vars = merge(local.POSTGRES_VARS, { RETURN_RECORD_LIMIT = local.RETURN_RECORD_LIMIT }) - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - create_secret = true + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + create_secret = true } module "transaction_by_id" { - source = "../../web-adapter-lambda/v001" - service_name = "transaction-by-id" - env = var.env - ssm_prefix = var.ssm_prefix - env_id = var.env_id - env_vars = merge(local.POSTGRES_VARS, {}) - aws_lwa_port = local.TRANSACTION_BY_ID_PORT - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - create_secret = true + source = "../../provided-lambda/v001" + service_name = "transaction-by-id" + env = var.env + ssm_prefix = var.ssm_prefix + env_id = var.env_id + env_vars = merge(local.POSTGRES_VARS, {}) + aws_lwa_port = local.TRANSACTION_BY_ID_PORT + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + create_secret = true } module "balance_by_account" { - source = "../../web-adapter-lambda/v001" - service_name = "balance-by-account" - env = var.env - ssm_prefix = var.ssm_prefix - env_id = var.env_id - env_vars = merge(local.POSTGRES_VARS, {}) - aws_lwa_port = local.BALANCE_BY_ACCOUNT_PORT - invoke_url_principals = [aws_iam_role.graphql_role.arn] - artifacts_bucket_name = var.artifacts_bucket_name - create_secret = true + source = "../../provided-lambda/v001" + service_name = "balance-by-account" + env = var.env + ssm_prefix = var.ssm_prefix + env_id = var.env_id + env_vars = merge(local.POSTGRES_VARS, {}) + aws_lwa_port = local.BALANCE_BY_ACCOUNT_PORT + invoke_url_principals = [aws_iam_role.graphql_role.arn] + artifacts_bucket_name = var.artifacts_bucket_name + create_secret = true } module "auto_confirm" { - source = "../../go-lambda/v001" + source = "../../provided-lambda/v001" service_name = "auto-confirm" env = var.env ssm_prefix = var.ssm_prefix @@ -182,7 +182,7 @@ module "notifications_clear" { } module "rule" { - source = "../../web-adapter-lambda/v001" + source = "../../provided-lambda/v001" service_name = "rule" env = var.env ssm_prefix = var.ssm_prefix @@ -195,7 +195,7 @@ module "rule" { aws_iam_role.graphql_role.arn, module.request_create.lambda_role_arn, ] - artifacts_bucket_name = var.artifacts_bucket_name - attached_policy_arns = [] - create_secret = true // suppports local testing + artifacts_bucket_name = var.artifacts_bucket_name + attached_policy_arns = [] + create_secret = true // suppports local testing } diff --git a/infrastructure/terraform/aws/modules/environment/v001/locals.tf b/infrastructure/terraform/aws/modules/environment/v001/locals.tf index 2292fd5e..d249cd26 100644 --- a/infrastructure/terraform/aws/modules/environment/v001/locals.tf +++ b/infrastructure/terraform/aws/modules/environment/v001/locals.tf @@ -6,7 +6,7 @@ locals { SERVICES_CONF = local.PROJECT_CONF.services RULE_PORT = local.SERVICES_CONF.rule.env_var.set.RULE_PORT.default GRAPHQL_PORT = local.SERVICES_CONF.graphql.env_var.set.GRAPHQL_PORT.default - READINESS_CHECK_PATH = local.PROJECT_CONF.infrastructure.terraform.aws.modules.web-adapter-lambda.env_var.set.READINESS_CHECK_PATH.default + READINESS_CHECK_PATH = local.PROJECT_CONF.infrastructure.terraform.aws.modules.environment.env_var.set.READINESS_CHECK_PATH.default BALANCE_BY_ACCOUNT_PORT = local.SERVICES_CONF.balance-by-account.env_var.set.BALANCE_BY_ACCOUNT_PORT.default TRANSACTION_BY_ID_PORT = local.SERVICES_CONF.transaction-by-id.env_var.set.TRANSACTION_BY_ID_PORT.default TRANSACTIONS_BY_ACCOUNT_PORT = local.SERVICES_CONF.transactions-by-account.env_var.set.TRANSACTIONS_BY_ACCOUNT_PORT.default @@ -15,7 +15,8 @@ locals { REQUEST_APPROVE_PORT = local.SERVICES_CONF.request-approve.env_var.set.REQUEST_APPROVE_PORT.default REQUEST_CREATE_PORT = local.SERVICES_CONF.request-create.env_var.set.REQUEST_CREATE_PORT.default RETURN_RECORD_LIMIT = local.SERVICES_CONF.env_var.set.RETURN_RECORD_LIMIT.default - WEB_ADAPTER_LAYER_VERSION = local.PROJECT_CONF.infrastructure.terraform.aws.modules.web-adapter-lambda.env_var.set.WEB_ADAPTER_LAYER_VERSION.default + WEB_ADAPTER_LAYER_VERSION = local.PROJECT_CONF.infrastructure.terraform.aws.modules.environment.env_var.set.WEB_ADAPTER_LAYER_VERSION.default + WEB_ADAPTER_LAYER_ARN = "arn:aws:lambda:${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:${local.WEB_ADAPTER_LAYER_VERSION}" GO_MIGRATE_PORT = local.PROJECT_CONF.migrations.go-migrate.env_var.set.GO_MIGRATE_PORT.default BINARY_NAME = local.SERVICES_CONF.env_var.set.BINARY_NAME.default LAMBDA_RUNTIME = local.PROJECT_CONF.infrastructure.terraform.aws.modules.env_var.set.LAMBDA_RUNTIME.default diff --git a/project.yaml b/project.yaml index 1dcc4d4d..fcb72520 100644 --- a/project.yaml +++ b/project.yaml @@ -183,6 +183,12 @@ infrastructure: GO_MIGRATE_LAYER_PREFIX: ssm: null default: go-migrate-provided-deps + READINESS_CHECK_PATH: + ssm: service/lambda/readiness_check_path + default: /healthz + WEB_ADAPTER_LAYER_VERSION: + ssm: + default: 17 project-storage: env_var: set: @@ -210,15 +216,6 @@ infrastructure: TFSTATE_BUCKET_PREFIX: ssm: null default: mxfactorial-tfstate - web-adapter-lambda: - env_var: - set: - READINESS_CHECK_PATH: - ssm: service/lambda/readiness_check_path - default: /healthz - WEB_ADAPTER_LAYER_VERSION: - ssm: - default: 17 migrations: dumps: env_var: @@ -632,15 +629,15 @@ services: env_var: get: [] auto-confirm: - runtime: go1.x + runtime: rust1.x min_code_cov: null type: app params: [] deploy: true - build_src_path: cmd + build_src_path: null dependents: [] env_var: - get: + get: # used by make targets - POOL_ID - CLIENT_ID tests: From d27c0ce3f4c527b2ce58ae79fbdaec6388852423 Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:54:31 -0700 Subject: [PATCH 05/10] add auto-confirm service in rust --- Cargo.toml | 1 + services/auto-confirm/Cargo.toml | 25 ++++ services/auto-confirm/makefile | 2 +- services/auto-confirm/src/main.rs | 190 ++++++++++++++++++++++++++++++ 4 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 services/auto-confirm/Cargo.toml create mode 100644 services/auto-confirm/src/main.rs diff --git a/Cargo.toml b/Cargo.toml index d38d0641..64829297 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ members = [ "crates/service", "crates/shutdown", "crates/types", + "services/auto-confirm", "services/balance-by-account", "services/graphql", "services/request-approve", diff --git a/services/auto-confirm/Cargo.toml b/services/auto-confirm/Cargo.toml new file mode 100644 index 00000000..7ee5830d --- /dev/null +++ b/services/auto-confirm/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "auto-confirm" +version = "0.1.0" +edition = "2021" +rust-version.workspace = true + +[dependencies] +aws_lambda_events = "0.15.0" +lambda_runtime = "0.10.0" +rand = { version = "0.8.5", default-features = false, features = ["std"] } +serde_json = "1.0.114" +tokio = { version = "1.33.0", default-features = false, features = [ + "rt-multi-thread", + "macros", +] } +unicode-segmentation = "1.11.0" +types = { path = "../../crates/types" } +pg = { path = "../../crates/pg" } +service = { path = "../../crates/service" } +rust_decimal = "1.34.3" +tracing = "0.1.40" +fakeit = "1.2.0" + +[target.x86_64-unknown-linux-musl.dependencies] +openssl = { version = "0.10", features = ["vendored"] } diff --git a/services/auto-confirm/makefile b/services/auto-confirm/makefile index 64a3fd8c..dd779a9b 100644 --- a/services/auto-confirm/makefile +++ b/services/auto-confirm/makefile @@ -1,6 +1,6 @@ RELATIVE_PROJECT_ROOT_PATH=$(shell REL_PATH="."; while [ $$(ls "$$REL_PATH" | grep project.yaml | wc -l | xargs) -eq 0 ]; do REL_PATH="$$REL_PATH./.."; done; printf '%s' "$$REL_PATH") include $(RELATIVE_PROJECT_ROOT_PATH)/make/shared.mk -include $(RELATIVE_PROJECT_ROOT_PATH)/make/go.mk +include $(RELATIVE_PROJECT_ROOT_PATH)/make/rust.mk signup: @$(MAKE) -s test-env-file diff --git a/services/auto-confirm/src/main.rs b/services/auto-confirm/src/main.rs new file mode 100644 index 00000000..63179d29 --- /dev/null +++ b/services/auto-confirm/src/main.rs @@ -0,0 +1,190 @@ +use aws_lambda_events::event::cognito::CognitoEventUserPoolsPreSignup; +use fakeit::{address, name, words}; +use lambda_runtime::{service_fn, Error, LambdaEvent}; +use pg::postgres::DB; +use rand::Rng; +use rust_decimal::Decimal; +use serde_json::Value; +use service::Service; +use types::account::AccountProfile; +use unicode_segmentation::UnicodeSegmentation; + +fn random_number(min: i32, max: i32) -> i32 { + let mut rng = rand::thread_rng(); + rng.gen_range(min..max) +} + +pub fn guess_first_and_last_names(account: &str) -> (String, String) { + let rem = &account[1..]; + let mut next_capital_letter_index = 0; + for (i, v) in rem.graphemes(true).enumerate() { + if v.chars().next().unwrap().is_uppercase() { + next_capital_letter_index = i + 1; + break; + } + } + if next_capital_letter_index == 0 { + next_capital_letter_index = account.len() / 2; + } + let first_name = account[..next_capital_letter_index].to_string(); + let last_name = account[next_capital_letter_index..].to_string(); + (first_name, last_name) +} + +fn create_fake_profile(account_name: &str) -> AccountProfile { + let (first_name, last_name) = guess_first_and_last_names(account_name); + let test_account = account_name.to_string(); + let description = Some(words::sentence(3)).map(|desc| desc.trim_end_matches('.').to_string()); + let middle_name = name::last(); + let country_name = "United States of America".to_string(); + let street_number = address::street_number(); + let street_name = address::street_name(); + let floor_number = random_number(1, 30); + let unit_number = random_number(100, 999); + let city_name = address::city(); + let county_name = format!("{} County", city_name); + let region = None; + let state_name = "California".to_string(); + let postal_code = address::zip(); + let latlng = format!("({}, {})", address::latitude(), address::longitude(),); + let email_address = format!("{}@address.xz", account_name.to_lowercase()); + let tele_country_code = 1; + let tele_area_code = random_number(100, 999); + let tele_number = random_number(1000000, 9999999); + let occ_id = random_number(1, 12); + let ind_id = random_number(1, 11); + + AccountProfile { + id: None, + account_name: test_account, + description, + first_name: Some(first_name.to_string()), + middle_name: Some(middle_name), + last_name: Some(last_name.to_string()), + country_name, + street_number: Some(street_number.to_string()), + street_name: Some(street_name.to_string()), + floor_number: Some(floor_number.to_string()), + unit_number: Some(unit_number.to_string()), + city_name, + county_name: Some(county_name), + region_name: region, + state_name, + postal_code, + latlng: Some(latlng), + email_address, + telephone_country_code: Some(tele_country_code.to_string()), + telephone_area_code: Some(tele_area_code.to_string()), + telephone_number: Some(tele_number.to_string()), + occupation_id: Some(occ_id.to_string()), + industry_id: Some(ind_id.to_string()), + removal_time: None, + } +} + +async fn func(event: LambdaEvent) -> Result { + let (event, _context) = event.into_parts(); + + let mut cognito_event = event.clone(); + cognito_event.response.auto_confirm_user = true; + + // https://docs.rs/aws_lambda_events/latest/aws_lambda_events/event/cognito/struct.CognitoEventUserPoolsPreSignupRequest.html + if let Some(skip) = event.request.client_metadata.get("skip") { + if skip == "true" { + return Ok(serde_json::to_value(cognito_event).unwrap()); + } + } + + let cognito_user = event.cognito_event_user_pools_header.user_name.unwrap(); + + let fake_profile = create_fake_profile(&cognito_user); + + let initial_account_balance = std::env::var("INITIAL_ACCOUNT_BALANCE").unwrap(); + + let decimal_balance: Decimal = initial_account_balance.parse().unwrap(); + + let conn_uri = DB::create_conn_uri_from_env_vars(); + + let pool = DB::new_pool(&conn_uri).await; + + let conn = pool.get_conn().await; + + conn.0 + .execute( + "DELETE FROM account_balance WHERE account_name = $1;", + &[&cognito_user], + ) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Error::from(e) + })?; + + conn.0 + .execute( + "DELETE FROM rule_instance WHERE account_name = $1;", + &[&cognito_user], + ) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Error::from(e) + })?; + + conn.0 + .execute( + "DELETE FROM account_profile WHERE account_name = $1;", + &[&cognito_user], + ) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Error::from(e) + })?; + + conn.0 + .execute( + "DELETE FROM account_owner WHERE owner_account = $1;", + &[&cognito_user], + ) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Error::from(e) + })?; + + conn.0 + .execute("DELETE FROM subaccount WHERE name = $1;", &[&cognito_user]) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Error::from(e) + })?; + + conn.0 + .execute("DELETE FROM account WHERE name = $1;", &[&cognito_user]) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Error::from(e) + })?; + + let svc = Service::new(conn); + + let _ = svc + .create_account_from_cognito_trigger(fake_profile, decimal_balance, 0) + .await + .map_err(|e| { + tracing::error!("error: {}", e); + Box::new(e) + }); + + Ok(serde_json::to_value(cognito_event).unwrap()) +} + +#[tokio::main] +async fn main() -> Result<(), Error> { + let func = service_fn(func); + lambda_runtime::run(func).await?; + Ok(()) +} From 77da6965180389887aefa18c3625be154112442c Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:54:52 -0700 Subject: [PATCH 06/10] remove go auto-confirm service --- services/auto-confirm/cmd/main.go | 184 ------------------------------ 1 file changed, 184 deletions(-) delete mode 100644 services/auto-confirm/cmd/main.go diff --git a/services/auto-confirm/cmd/main.go b/services/auto-confirm/cmd/main.go deleted file mode 100644 index 984eb857..00000000 --- a/services/auto-confirm/cmd/main.go +++ /dev/null @@ -1,184 +0,0 @@ -package main - -import ( - "context" - "errors" - "fmt" - "log" - "os" - - "github.com/aws/aws-lambda-go/events" - "github.com/aws/aws-lambda-go/lambda" - "github.com/jackc/pgconn" - "github.com/jackc/pgx/v4" - "github.com/shopspring/decimal" - "github.com/systemaccounting/mxfactorial/pkg/logger" - "github.com/systemaccounting/mxfactorial/pkg/postgres" - "github.com/systemaccounting/mxfactorial/pkg/service" - "github.com/systemaccounting/mxfactorial/pkg/testdata" - "github.com/systemaccounting/mxfactorial/pkg/types" -) - -var pgConn string = fmt.Sprintf( - "host=%s port=%s user=%s password=%s dbname=%s", - os.Getenv("PGHOST"), - os.Getenv("PGPORT"), - os.Getenv("PGUSER"), - os.Getenv("PGPASSWORD"), - os.Getenv("PGDATABASE")) - -type minimalRuleInstance struct { - RuleType *string `json:"rule_type"` - RuleName *string `json:"rule_name"` - RuleInstanceName *string `json:"rule_instance_name"` - AccountRole *string `json:"account_role"` - AccountName *string `json:"account_name"` - VariableValues []*string `json:"variable_values"` -} - -type SQLDB interface { - Query(context.Context, string, ...interface{}) (pgx.Rows, error) - QueryRow(context.Context, string, ...interface{}) pgx.Row - Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) - Begin(context.Context) (pgx.Tx, error) - Close(context.Context) error - IsClosed() bool -} - -type ICreateAccountService interface { - CreateAccountFromCognitoTrigger(accountProfile *types.AccountProfile, beginningBalance decimal.Decimal, currentTransactionItemID types.ID) error -} - -func lambdaFn( - ctx context.Context, - e events.CognitoEventUserPoolsPreSignup, - dbConnector func(context.Context, string) (SQLDB, error), - createAccountServiceConstructor func(db SQLDB) (ICreateAccountService, error), -) (events.CognitoEventUserPoolsPreSignup, error) { - - if e.Request.ClientMetadata != nil { - if _, ok := e.Request.ClientMetadata["skip"]; ok { - e.Response.AutoConfirmUser = true - return e, nil - } - } - - cognitoUser := e.CognitoEventUserPoolsHeader.UserName - - // temp solution to avoid profile form filling in ui - // guess first and last name from account name - firstName, lastName := testdata.GuessFirstAndLastNames(cognitoUser) - - // create a fake profile to minimize sign up labor - fakeProfile := testdata.CreateFakeProfile( - cognitoUser, - firstName, - lastName, - ) - - // create insert account balance sql - beginningBalance, err := decimal.NewFromString(os.Getenv("INITIAL_ACCOUNT_BALANCE")) - if err != nil { - logger.Log(logger.Trace(), err) - log.Fatal(err) - } - - // connect to db - db, err := dbConnector(context.Background(), pgConn) - if err != nil { - logger.Log(logger.Trace(), err) - return events.CognitoEventUserPoolsPreSignup{}, err - } - defer db.Close(context.Background()) - - // delete existing account, todo: move sql to builder - _, err = db.Exec(context.Background(), - "delete from account_balance where account_name = $1;", - cognitoUser) - if err != nil { - log.Printf("delete account_balance %v", err) - } - _, err = db.Exec(context.Background(), - "delete from rule_instance where account_name = $1;", - cognitoUser) - if err != nil { - log.Printf("delete rule_instance %v", err) - } - _, err = db.Exec(context.Background(), - "delete from account_profile where account_name = $1;", - cognitoUser) - if err != nil { - log.Printf("delete account_profile %v", err) - } - _, err = db.Exec(context.Background(), - "delete from account_owner where owner_account = $1;", - cognitoUser) - if err != nil { - log.Printf("delete account_owner %v", err) - } - _, err = db.Exec(context.Background(), - "delete from subaccount where name = $1;", - cognitoUser) - if err != nil { - log.Printf("delete subaccount %v", err) - } - _, err = db.Exec(context.Background(), - "delete from account where name = $1;", - cognitoUser) - if err != nil { - log.Printf("delete account %v", err) - } - - // construct create account balance service - cas, err := createAccountServiceConstructor(db) - if err != nil { - logger.Log(logger.Trace(), err) - return events.CognitoEventUserPoolsPreSignup{}, err - } - - // create 1) account, 2) profile, 3) initial balance - // and 4) approval all credit rule instance - err = cas.CreateAccountFromCognitoTrigger( - &fakeProfile, - beginningBalance, - types.ID("0"), // todo: create transaction before creating account balance, then - // pass transaction_item.id as arg to account balance insert - ) - if err != nil { - logger.Log(logger.Trace(), err) - return events.CognitoEventUserPoolsPreSignup{}, err - } - - // auto confirm cognito user - e.Response.AutoConfirmUser = true - - return e, nil -} - -// wraps lambdaFn accepting db interface for testability -func handleEvent(ctx context.Context, e events.CognitoEventUserPoolsPreSignup) (events.CognitoEventUserPoolsPreSignup, error) { - return lambdaFn( - ctx, - e, - newIDB, - newCreateAccountService, - ) -} - -// enables lambdaFn unit testing -func newCreateAccountService(idb SQLDB) (ICreateAccountService, error) { - db, ok := idb.(*postgres.DB) - if !ok { - return nil, errors.New("newCreateAccountService: failed to assert *postgres.DB") - } - return service.NewCreateAccountService(db), nil -} - -// enables lambdaFn unit testing -func newIDB(ctx context.Context, dsn string) (SQLDB, error) { - return postgres.NewDB(ctx, dsn) -} - -func main() { - lambda.Start(handleEvent) -} From 9b76b83ec988f3efc835ef3a7accbbd94df60ace Mon Sep 17 00:00:00 2001 From: max funk Date: Mon, 25 Mar 2024 21:55:03 -0700 Subject: [PATCH 07/10] cargo lock --- Cargo.lock | 413 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 391 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0a1b28ef..670b7132 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -280,7 +280,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock 2.8.0", - "autocfg", + "autocfg 1.1.0", "cfg-if", "concurrent-queue", "futures-lite 1.13.0", @@ -449,6 +449,34 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "auto-confirm" +version = "0.1.0" +dependencies = [ + "aws_lambda_events 0.15.0", + "fakeit", + "lambda_runtime", + "openssl", + "pg", + "rand 0.8.5", + "rust_decimal", + "serde_json", + "service", + "tokio", + "tracing", + "types", + "unicode-segmentation", +] + +[[package]] +name = "autocfg" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +dependencies = [ + "autocfg 1.1.0", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -532,7 +560,7 @@ dependencies = [ "http 0.2.9", "percent-encoding", "tracing", - "uuid", + "uuid 1.6.1", ] [[package]] @@ -779,6 +807,26 @@ dependencies = [ "serde_json", ] +[[package]] +name = "aws_lambda_events" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598e2ade8447dce8d3a15b6159b73354db34257851344b232fb1920c272acc61" +dependencies = [ + "base64 0.21.5", + "bytes", + "chrono", + "flate2", + "http 1.0.0", + "http-body 1.0.0", + "http-serde", + "query_map", + "serde", + "serde_dynamo", + "serde_json", + "serde_with 3.7.0", +] + [[package]] name = "axum" version = "0.6.9" @@ -1152,6 +1200,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1220,6 +1277,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-utils" version = "0.8.18" @@ -1520,6 +1586,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fakeit" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d12d906f7c8cc6ea357fb677d065b38f0a34da6ac78e17d3fcc371e53e2a5f7f" +dependencies = [ + "libmath", + "rand 0.6.5", + "simplerand", + "uuid 0.8.2", +] + [[package]] name = "fallible-iterator" version = "0.2.0" @@ -1556,6 +1634,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1586,6 +1674,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "funty" version = "2.0.0" @@ -1777,7 +1871,7 @@ version = "0.1.0" dependencies = [ "async-graphql", "async-graphql-axum", - "aws_lambda_events", + "aws_lambda_events 0.13.0", "axum 0.7.4", "http 1.0.0", "httpclient", @@ -2129,6 +2223,7 @@ dependencies = [ "itoa", "pin-project-lite", "tokio", + "want", ] [[package]] @@ -2175,6 +2270,8 @@ dependencies = [ "pin-project-lite", "socket2 0.5.5", "tokio", + "tower", + "tower-service", "tracing", ] @@ -2224,7 +2321,7 @@ version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ - "autocfg", + "autocfg 1.1.0", "hashbrown 0.12.3", "serde", ] @@ -2356,6 +2453,53 @@ dependencies = [ "regex", ] +[[package]] +name = "lambda_runtime" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2904c10fbeaf07aa317fc96a0e28e89c80ed12f7949ed06afd7869b21fef32" +dependencies = [ + "async-stream", + "base64 0.21.5", + "bytes", + "futures", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "http-serde", + "hyper 1.1.0", + "hyper-util", + "lambda_runtime_api_client", + "serde", + "serde_json", + "serde_path_to_error", + "tokio", + "tokio-stream", + "tower", + "tracing", +] + +[[package]] +name = "lambda_runtime_api_client" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1364cd67281721d2a9a4444ba555cf4d74a195e647061fa4ccac46e6f5c3b0ae" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.1.0", + "hyper-util", + "tokio", + "tower", + "tower-service", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -2374,6 +2518,15 @@ version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +[[package]] +name = "libmath" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfd3416934a853ae80d5c3b006f632dfcbaf320300c5167e88a469e9ac214502" +dependencies = [ + "rand 0.3.23", +] + [[package]] name = "libredox" version = "0.0.1" @@ -2412,7 +2565,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ - "autocfg", + "autocfg 1.1.0", "scopeguard", ] @@ -2506,7 +2659,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" dependencies = [ - "rand", + "rand 0.8.5", ] [[package]] @@ -2549,7 +2702,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ - "autocfg", + "autocfg 1.1.0", "num-integer", "num-traits", ] @@ -2560,7 +2713,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ - "autocfg", + "autocfg 1.1.0", "num-traits", ] @@ -2570,7 +2723,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ - "autocfg", + "autocfg 1.1.0", ] [[package]] @@ -2866,7 +3019,7 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ - "autocfg", + "autocfg 1.1.0", "bitflags 1.3.2", "cfg-if", "concurrent-queue", @@ -2929,7 +3082,7 @@ dependencies = [ "hmac", "md-5", "memchr", - "rand", + "rand 0.8.5", "sha2", "stringprep", ] @@ -3064,6 +3217,48 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.8", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi", +] + [[package]] name = "rand" version = "0.8.5" @@ -3071,8 +3266,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.3.1", ] [[package]] @@ -3082,9 +3287,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", ] +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.6.4" @@ -3094,6 +3314,77 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.8", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -3313,7 +3604,7 @@ dependencies = [ "rkyv_derive", "seahash", "tinyvec", - "uuid", + "uuid 1.6.1", ] [[package]] @@ -3356,7 +3647,7 @@ dependencies = [ "bytes", "num-traits", "postgres", - "rand", + "rand 0.8.5", "rkyv", "serde", "serde_json", @@ -3566,6 +3857,16 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "serde_dynamo" +version = "4.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b652e4dd5549c24a4ec779981278cccae2f85b4d5649441c745d58866e20283" +dependencies = [ + "base64 0.21.5", + "serde", +] + [[package]] name = "serde_json" version = "1.0.114" @@ -3579,10 +3880,11 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.9" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b04f22b563c91331a10074bda3dd5492e3cc39d56bd557e91c0af42b6c7341" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ + "itoa", "serde", ] @@ -3620,7 +3922,25 @@ dependencies = [ "indexmap 1.9.2", "serde", "serde_json", - "serde_with_macros", + "serde_with_macros 2.2.0", + "time", +] + +[[package]] +name = "serde_with" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee80b0e361bbf88fd2f6e242ccd19cfda072cb0faa6ae694ecee08199938569a" +dependencies = [ + "base64 0.21.5", + "chrono", + "hex", + "indexmap 1.9.2", + "indexmap 2.1.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.7.0", "time", ] @@ -3636,6 +3956,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "serde_with_macros" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6561dc161a9224638a31d876ccdfefbc1df91d3f3a8342eddb35f055d48c7655" +dependencies = [ + "darling 0.20.3", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "2.0.0" @@ -3743,6 +4075,15 @@ dependencies = [ "time", ] +[[package]] +name = "simplerand" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70455a0a21cb984df0f86033ca19f37cced497deb779603e7fa7b032f5b8897b" +dependencies = [ + "lazy_static", +] + [[package]] name = "siphasher" version = "0.3.10" @@ -3755,7 +4096,7 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ - "autocfg", + "autocfg 1.1.0", ] [[package]] @@ -4321,6 +4662,16 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -4331,12 +4682,15 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", ] [[package]] @@ -4387,7 +4741,7 @@ dependencies = [ "http 1.0.0", "httparse", "log", - "rand", + "rand 0.8.5", "sha1", "thiserror", "url", @@ -4414,7 +4768,7 @@ dependencies = [ "serde", "serde_assert", "serde_json", - "serde_with", + "serde_with 2.2.0", "strum 0.24.1", "strum_macros 0.24.3", "thiserror", @@ -4449,6 +4803,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + [[package]] name = "unicode-width" version = "0.1.10" @@ -4499,6 +4859,15 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + [[package]] name = "uuid" version = "1.6.1" From 076b3d64d3c1c92dc927a0c2e1cf65ec2efc2cd2 Mon Sep 17 00:00:00 2001 From: max funk Date: Tue, 26 Mar 2024 12:00:44 -0700 Subject: [PATCH 08/10] restrict compile to cognito feature --- services/auto-confirm/Cargo.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/auto-confirm/Cargo.toml b/services/auto-confirm/Cargo.toml index 7ee5830d..269d4b6a 100644 --- a/services/auto-confirm/Cargo.toml +++ b/services/auto-confirm/Cargo.toml @@ -5,7 +5,9 @@ edition = "2021" rust-version.workspace = true [dependencies] -aws_lambda_events = "0.15.0" +aws_lambda_events = { version = "0.15.0", default-features = false, features = [ + "cognito", +] } lambda_runtime = "0.10.0" rand = { version = "0.8.5", default-features = false, features = ["std"] } serde_json = "1.0.114" From e60da0451b74b16972df5d6757e39e6a7eb3f844 Mon Sep 17 00:00:00 2001 From: max funk Date: Tue, 26 Mar 2024 12:00:54 -0700 Subject: [PATCH 09/10] cargo lock --- Cargo.lock | 72 ++---------------------------------------------------- 1 file changed, 2 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 670b7132..66087c20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -814,17 +814,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "598e2ade8447dce8d3a15b6159b73354db34257851344b232fb1920c272acc61" dependencies = [ "base64 0.21.5", - "bytes", - "chrono", - "flate2", - "http 1.0.0", - "http-body 1.0.0", - "http-serde", - "query_map", "serde", - "serde_dynamo", "serde_json", - "serde_with 3.7.0", ] [[package]] @@ -1277,15 +1268,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc32fast" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-utils" version = "0.8.18" @@ -1634,16 +1616,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -3857,16 +3829,6 @@ dependencies = [ "syn 2.0.48", ] -[[package]] -name = "serde_dynamo" -version = "4.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b652e4dd5549c24a4ec779981278cccae2f85b4d5649441c745d58866e20283" -dependencies = [ - "base64 0.21.5", - "serde", -] - [[package]] name = "serde_json" version = "1.0.114" @@ -3922,25 +3884,7 @@ dependencies = [ "indexmap 1.9.2", "serde", "serde_json", - "serde_with_macros 2.2.0", - "time", -] - -[[package]] -name = "serde_with" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee80b0e361bbf88fd2f6e242ccd19cfda072cb0faa6ae694ecee08199938569a" -dependencies = [ - "base64 0.21.5", - "chrono", - "hex", - "indexmap 1.9.2", - "indexmap 2.1.0", - "serde", - "serde_derive", - "serde_json", - "serde_with_macros 3.7.0", + "serde_with_macros", "time", ] @@ -3956,18 +3900,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "serde_with_macros" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6561dc161a9224638a31d876ccdfefbc1df91d3f3a8342eddb35f055d48c7655" -dependencies = [ - "darling 0.20.3", - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "serial_test" version = "2.0.0" @@ -4768,7 +4700,7 @@ dependencies = [ "serde", "serde_assert", "serde_json", - "serde_with 2.2.0", + "serde_with", "strum 0.24.1", "strum_macros 0.24.3", "thiserror", From 5f1b2924b5b4dd7b241e0ae65ba7f25be76865d6 Mon Sep 17 00:00:00 2001 From: max funk Date: Tue, 26 Mar 2024 12:01:05 -0700 Subject: [PATCH 10/10] switch workflows to rust --- .github/workflows/dev-auto-confirm.yaml | 13 ++++++++++--- .github/workflows/dev-balance-by-account.yaml | 17 ++++++++++++----- .github/workflows/dev-graphql.yaml | 15 +++++++++++---- .github/workflows/dev-request-approve.yaml | 17 ++++++++++++----- .github/workflows/dev-request-by-id.yaml | 15 +++++++++++---- .github/workflows/dev-request-create.yaml | 17 ++++++++++++----- .github/workflows/dev-requests-by-account.yaml | 15 +++++++++++---- .github/workflows/dev-rule.yaml | 2 +- .github/workflows/dev-transaction-by-id.yaml | 15 +++++++++++---- .../workflows/dev-transactions-by-account.yaml | 15 +++++++++++---- 10 files changed, 102 insertions(+), 39 deletions(-) diff --git a/.github/workflows/dev-auto-confirm.yaml b/.github/workflows/dev-auto-confirm.yaml index a6dad9c6..8c309860 100644 --- a/.github/workflows/dev-auto-confirm.yaml +++ b/.github/workflows/dev-auto-confirm.yaml @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/auto-confirm - name: compile run: make compile working-directory: services/auto-confirm diff --git a/.github/workflows/dev-balance-by-account.yaml b/.github/workflows/dev-balance-by-account.yaml index 623b12fb..1935657b 100644 --- a/.github/workflows/dev-balance-by-account.yaml +++ b/.github/workflows/dev-balance-by-account.yaml @@ -8,8 +8,8 @@ on: - 'master' jobs: - test: - name: balance-by-account in dev + build: + name: balance-by-account runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/balance-by-account - name: compile run: make compile working-directory: services/balance-by-account diff --git a/.github/workflows/dev-graphql.yaml b/.github/workflows/dev-graphql.yaml index 255c8687..6e1e60a2 100644 --- a/.github/workflows/dev-graphql.yaml +++ b/.github/workflows/dev-graphql.yaml @@ -8,7 +8,7 @@ on: - 'master' jobs: - test: + build: name: graphql runs-on: ubuntu-latest env: @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/graphql - name: compile run: make compile working-directory: services/graphql diff --git a/.github/workflows/dev-request-approve.yaml b/.github/workflows/dev-request-approve.yaml index b6200217..45dc4f48 100644 --- a/.github/workflows/dev-request-approve.yaml +++ b/.github/workflows/dev-request-approve.yaml @@ -8,8 +8,8 @@ on: - 'master' jobs: - test: - name: request-approve in dev + build: + name: request-approve runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/request-approve - name: compile run: make compile working-directory: services/request-approve diff --git a/.github/workflows/dev-request-by-id.yaml b/.github/workflows/dev-request-by-id.yaml index ef025f8a..e317cdc4 100644 --- a/.github/workflows/dev-request-by-id.yaml +++ b/.github/workflows/dev-request-by-id.yaml @@ -9,7 +9,7 @@ on: jobs: build: - name: request-by-id in dev + name: request-by-id runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/request-by-id - name: compile run: make compile working-directory: services/request-by-id diff --git a/.github/workflows/dev-request-create.yaml b/.github/workflows/dev-request-create.yaml index 19441b54..8ead20f2 100644 --- a/.github/workflows/dev-request-create.yaml +++ b/.github/workflows/dev-request-create.yaml @@ -8,8 +8,8 @@ on: - 'master' jobs: - test: - name: request-create in dev + build: + name: request-create runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/request-create - name: compile run: make compile working-directory: services/request-create diff --git a/.github/workflows/dev-requests-by-account.yaml b/.github/workflows/dev-requests-by-account.yaml index 23241caf..7cc29985 100644 --- a/.github/workflows/dev-requests-by-account.yaml +++ b/.github/workflows/dev-requests-by-account.yaml @@ -9,7 +9,7 @@ on: jobs: build: - name: requests-by-account in dev + name: requests-by-account runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/requests-by-account - name: compile run: make compile working-directory: services/requests-by-account diff --git a/.github/workflows/dev-rule.yaml b/.github/workflows/dev-rule.yaml index 6a315359..6c0db20c 100644 --- a/.github/workflows/dev-rule.yaml +++ b/.github/workflows/dev-rule.yaml @@ -12,7 +12,7 @@ jobs: name: rule runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: stable diff --git a/.github/workflows/dev-transaction-by-id.yaml b/.github/workflows/dev-transaction-by-id.yaml index a54add67..eee7f1f7 100644 --- a/.github/workflows/dev-transaction-by-id.yaml +++ b/.github/workflows/dev-transaction-by-id.yaml @@ -9,7 +9,7 @@ on: jobs: build: - name: transaction-by-id in dev + name: transaction-by-id runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/transaction-by-id - name: compile run: make compile working-directory: services/transaction-by-id diff --git a/.github/workflows/dev-transactions-by-account.yaml b/.github/workflows/dev-transactions-by-account.yaml index cd47916c..1d2e8841 100644 --- a/.github/workflows/dev-transactions-by-account.yaml +++ b/.github/workflows/dev-transactions-by-account.yaml @@ -9,7 +9,7 @@ on: jobs: build: - name: transactions-by-account in dev + name: transactions-by-account runs-on: ubuntu-latest env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -17,10 +17,17 @@ jobs: AWS_DEFAULT_REGION: us-east-1 CI: true steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v3 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master with: - go-version: '1.19.x' + toolchain: stable + components: clippy, rustfmt + - uses: taiki-e/install-action@nextest + - name: linting + run: | + cargo fmt -- --check + cargo clippy -- -Dwarnings + working-directory: services/transactions-by-account - name: compile run: make compile working-directory: services/transactions-by-account