From 3cbb2098c4bb0b22b03d4084301623c445a70a82 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 20 May 2024 14:50:23 -0500 Subject: [PATCH] Look up per-customer sgx --- config-schema.dhall | 5 +++++ config.dhall.sample | 3 +++ lib/admin_actions/number_change.rb | 2 +- lib/bwmsgsv2_repo.rb | 4 ++-- lib/customer_repo.rb | 2 +- lib/trivial_backend_sgx_repo.rb | 14 ++++++++++---- test/test_admin_command.rb | 8 ++++++++ test/test_backend_sgx.rb | 2 +- test/test_customer_info.rb | 29 +++++++++++++++++++++++++++++ test/test_customer_repo.rb | 12 +++++++++++- test/test_registration.rb | 20 ++++++++++++++++++++ 11 files changed, 91 insertions(+), 10 deletions(-) diff --git a/config-schema.dhall b/config-schema.dhall index 739f420352f153a1e40b3764ab3805e3437d3edc..07f213f777c649a80f71abb17acff4656101d2fd 100644 --- a/config-schema.dhall +++ b/config-schema.dhall @@ -63,6 +63,11 @@ , rev_ai_token : Text , server : { host : Text, port : Natural } , sgx : Text +, sgx_creds : + List + { mapKey : Text + , mapValue : { account : Text, password : Text, username : Text } + } , simpleswap_api_key : Text , sims : { esim : diff --git a/config.dhall.sample b/config.dhall.sample index ebf2203e4c56eaa5e598c417f2f1ddb877a53246..4a1fffaaef496d15e3bd62d3b1e501b95cbc23b1 100644 --- a/config.dhall.sample +++ b/config.dhall.sample @@ -14,6 +14,9 @@ in web_root = "https://example.com", ogm_path = "/var/www/media.example.com", ogm_web_root = "https://media.example.com", + sgx_creds = [ + { mapKey = "component-other.localhost", mapValue = { account = "", username = "", password = "" } } + ], creds = { account = "00000", username = "dashboard user", diff --git a/lib/admin_actions/number_change.rb b/lib/admin_actions/number_change.rb index ef56507ab6d9e41883b12f84db3a9e55263c6d06..18e90fc60e360e2af0ff259dbe9f8af26edf4d58 100644 --- a/lib/admin_actions/number_change.rb +++ b/lib/admin_actions/number_change.rb @@ -68,7 +68,7 @@ class AdminAction end def forward - TrivialBackendSgxRepo.new.get(customer_id).then do |sgx| + TrivialBackendSgxRepo.new(redis: REDIS).get(customer_id).then do |sgx| EMPromise.all([ REDIS.rename("catapult_fwd-#{old_tel}", "catapult_fwd-#{new_tel}"), sgx.register!(new_tel), diff --git a/lib/bwmsgsv2_repo.rb b/lib/bwmsgsv2_repo.rb index 797fb5c89748d97e731f1ef17e8d39180a12d33c..5245b67c4d6e578cfab9df7e3f1d34381f436969 100644 --- a/lib/bwmsgsv2_repo.rb +++ b/lib/bwmsgsv2_repo.rb @@ -18,7 +18,7 @@ class Bwmsgsv2Repo @jid = jid @redis = redis @ibr_repo = ibr_repo - @trivial_repo = TrivialBackendSgxRepo.new(jid: jid, **kwargs) + @trivial_repo = TrivialBackendSgxRepo.new(jid: jid, redis: redis, **kwargs) end def get(customer_id, tel: nil) @@ -75,7 +75,7 @@ protected def registration(sgx) EMPromise.resolve(sgx.registered?) rescue NotLoaded::NotLoadedError - @ibr_repo.registered?(@jid, from: sgx.from_jid) + @ibr_repo.registered?(sgx.jid, from: sgx.from_jid) end def from_redis(from_jid, tel) diff --git a/lib/customer_repo.rb b/lib/customer_repo.rb index 37a7f5b18cfd40e63258288b3d53d9e0ccad8dca..b73e047570ca4ae9ae3fbf3758481fa11f254779 100644 --- a/lib/customer_repo.rb +++ b/lib/customer_repo.rb @@ -157,7 +157,7 @@ class CustomerRepo protected def mksgx(cid) - TrivialBackendSgxRepo.new.get(cid).then { |s| s.with(registered?: false) } + TrivialBackendSgxRepo.get_unregistered(cid, redis: redis) end def mget(*keys) diff --git a/lib/trivial_backend_sgx_repo.rb b/lib/trivial_backend_sgx_repo.rb index b25d5490f4e107db515579e214f83d03ddfaafea..c5843650a4ca2e11cf6c5b75728dc92355a625c0 100644 --- a/lib/trivial_backend_sgx_repo.rb +++ b/lib/trivial_backend_sgx_repo.rb @@ -8,21 +8,27 @@ class TrivialBackendSgxRepo jid: CONFIG[:sgx], creds: CONFIG[:creds], component_jid: CONFIG[:component][:jid], + redis: LazyObject.new { REDIS }, **with ) @jid = Blather::JID.new(jid) @creds = creds @component_jid = component_jid + @redis = redis @with = with end + def self.get_unregistered(customer_id, **kwargs) + new(**kwargs).get(customer_id).then { |s| s.with(registered?: false) } + end + def get(customer_id, tel: nil) - EMPromise.resolve(nil).then do + @redis.get("jmp_customer_backend_sgx-#{customer_id}").then do |sgx_jid| + creds = sgx_jid ? CONFIG[:sgx_creds][sgx_jid] : @creds BackendSgx.new( - jid: @jid, creds: @creds, + jid: sgx_jid ? Blather::JID.new(sgx_jid) : @jid, creds: creds, from_jid: Blather::JID.new("customer_#{customer_id}", @component_jid), - ogm_url: NotLoaded.new(:ogm_url), - fwd: NotLoaded.new(:fwd_timeout), + ogm_url: NotLoaded.new(:ogm_url), fwd: NotLoaded.new(:fwd_timeout), transcription_enabled: NotLoaded.new(:transcription_enabled), registered?: tel ? ibr_for(tel) : NotLoaded.new(:registered?) ).with(@with) diff --git a/test/test_admin_command.rb b/test/test_admin_command.rb index ea4241c452e424247235ca8ba4a34cf5e89c411c..788db4f556672ac81489f13a40c12dd3aef0a5d8 100644 --- a/test/test_admin_command.rb +++ b/test/test_admin_command.rb @@ -7,6 +7,7 @@ BackendSgx::IQ_MANAGER = Minitest::Mock.new AdminAction::LaunchSnikket::IQ_MANAGER = Minitest::Mock.new Customer::BLATHER = Minitest::Mock.new AdminActionRepo::REDIS = Minitest::Mock.new +TrivialBackendSgxRepo::REDIS = Minitest::Mock.new class AdminCommandTest < Minitest::Test def admin_command(tel="+15556667777") @@ -58,6 +59,12 @@ class AdminCommandTest < Minitest::Test [ProxiedJID] ) + TrivialBackendSgxRepo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-testuser"] + ) + TrustLevelRepo::REDIS.expect( :get, EMPromise.resolve("Customer"), @@ -93,6 +100,7 @@ class AdminCommandTest < Minitest::Test assert_mock Command::COMMAND_MANAGER assert_mock TrustLevelRepo::REDIS assert_mock Subaccount::DB + assert_mock TrivialBackendSgxRepo::REDIS end em :test_no_user diff --git a/test/test_backend_sgx.rb b/test/test_backend_sgx.rb index 0132e45038a3d9739c543379ea851178b2811840..e1ee50d64e71a775825f1d2e8db48bb015e7ca29 100644 --- a/test/test_backend_sgx.rb +++ b/test/test_backend_sgx.rb @@ -53,7 +53,7 @@ class BackendSgxTest < Minitest::Test assert_equal "+15555550000", ibr.phone end] ) - sgx = TrivialBackendSgxRepo.new.get("test").sync + sgx = TrivialBackendSgxRepo.new(redis: FakeRedis.new).get("test").sync sgx.register!("+15555550000") BackendSgx::IQ_MANAGER.verify end diff --git a/test/test_customer_info.rb b/test/test_customer_info.rb index f4258afdff1e5a739f05735232dc28008b1e0bd1..bdec0625f23818b1602fa8eaf42fa3a126c0a61c 100644 --- a/test/test_customer_info.rb +++ b/test/test_customer_info.rb @@ -17,6 +17,7 @@ PlanInfo::DB = FakeDB.new( ] ) Subaccount::DB = Minitest::Mock.new +TrivialBackendSgxRepo::REDIS = Minitest::Mock.new class CustomerInfoTest < Minitest::Test def test_info_does_not_crash @@ -124,6 +125,12 @@ class CustomerInfoTest < Minitest::Test [String, ["test"]] ) + TrivialBackendSgxRepo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) + cust = customer(sgx: sgx, plan_name: "test_usd") trust_repo = Minitest::Mock.new @@ -134,6 +141,7 @@ class CustomerInfoTest < Minitest::Test assert_mock trust_repo assert_mock CustomerUsage::DB assert_mock Subaccount::DB + assert_mock TrivialBackendSgxRepo::REDIS end em :test_admin_info_does_not_crash @@ -160,6 +168,12 @@ class CustomerInfoTest < Minitest::Test [String, ["test"]] ) + TrivialBackendSgxRepo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) + cust = customer(sgx: sgx, plan_name: "test_usd") call_attempt_repo = Minitest::Mock.new @@ -181,6 +195,7 @@ class CustomerInfoTest < Minitest::Test assert_mock trust_repo assert_mock CustomerUsage::DB assert_mock Subaccount::DB + assert_mock TrivialBackendSgxRepo::REDIS end em :test_admin_info_with_tel_does_not_crash @@ -212,6 +227,12 @@ class CustomerInfoTest < Minitest::Test [String, ["test"]] ) + TrivialBackendSgxRepo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) + plan = CustomerPlan.new("test", plan: nil, expires_at: nil) cust = Customer.new( "test", @@ -227,6 +248,7 @@ class CustomerInfoTest < Minitest::Test assert_mock sgx assert_mock trust_repo assert_mock Subaccount::DB + assert_mock TrivialBackendSgxRepo::REDIS end em :test_inactive_admin_info_does_not_crash @@ -255,6 +277,12 @@ class CustomerInfoTest < Minitest::Test [String, ["parent"]] ) + TrivialBackendSgxRepo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) + cust = customer( sgx: sgx, plan_name: "test_usd", @@ -269,6 +297,7 @@ class CustomerInfoTest < Minitest::Test assert_mock trust_repo assert_mock CustomerUsage::DB assert_mock Subaccount::DB + assert_mock TrivialBackendSgxRepo::REDIS end em :test_admin_info_subaccount_does_not_crash end diff --git a/test/test_customer_repo.rb b/test/test_customer_repo.rb index 672cc1c4916e4c1620d211779df048092a299835..3237bc747b0a2aee101c2776cdc10d0e343191a6 100644 --- a/test/test_customer_repo.rb +++ b/test/test_customer_repo.rb @@ -58,7 +58,7 @@ class CustomerRepoTest < Minitest::Test db: FAKE_DB, braintree: Minitest::Mock.new ) - sgx_repo = Minitest::Mock.new(TrivialBackendSgxRepo.new) + sgx_repo = Minitest::Mock.new(TrivialBackendSgxRepo.new(redis: FAKE_REDIS)) CustomerRepo.new( redis: redis, db: db, @@ -149,6 +149,11 @@ class CustomerRepoTest < Minitest::Test "jmp_customer_jid-test", "test@example.com" ] ) + redis.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) assert_kind_of Customer, repo.create("test@example.com").sync assert_mock braintree assert_mock braintree_customer @@ -176,6 +181,11 @@ class CustomerRepoTest < Minitest::Test "jmp_customer_jid-testp", "test@parented.example.com" ] ) + redis.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-testp"] + ) redis.expect( :get, EMPromise.resolve("test@parented.example.com"), diff --git a/test/test_registration.rb b/test/test_registration.rb index 12a47c48c527b5041ed977d8d9a37e8981e2b349..e3bf4e48e02afe5433c7570c0e2e75295c54d563 100644 --- a/test/test_registration.rb +++ b/test/test_registration.rb @@ -1233,6 +1233,11 @@ class RegistrationTest < Minitest::Test nil, ["jmp_group_codes", nil] ) + Bwmsgsv2Repo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) Bwmsgsv2Repo::REDIS.expect( :set, nil, @@ -1351,6 +1356,11 @@ class RegistrationTest < Minitest::Test assert_equal "Referral Bonus", params[5] }] ) + Bwmsgsv2Repo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) Bwmsgsv2Repo::REDIS.expect( :set, nil, @@ -1451,6 +1461,11 @@ class RegistrationTest < Minitest::Test nil, ["jmp_group_codes", nil] ) + Bwmsgsv2Repo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) Bwmsgsv2Repo::REDIS.expect( :set, nil, @@ -1535,6 +1550,11 @@ class RegistrationTest < Minitest::Test EMPromise.resolve(OpenStruct.new(cmd_tuples: 1)), [String, ["+15555550000"]] ) + Bwmsgsv2Repo::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_backend_sgx-test"] + ) Bwmsgsv2Repo::REDIS.expect( :set, nil,