From 5dfee341471ad8e315649bab239551478088a7b4 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 26 Apr 2022 19:26:04 -0500 Subject: [PATCH] Block outgoing messages when expired --- sgx_jmp.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sgx_jmp.rb b/sgx_jmp.rb index b48ddda..be6cbf6 100644 --- a/sgx_jmp.rb +++ b/sgx_jmp.rb @@ -332,16 +332,21 @@ class OverLimit < StandardError end end +class CustomerExpired < StandardError; end + message do |m| StatsD.increment("message") sentry_hub = new_sentry_hub(m, name: "message") today = Time.now.utc.to_date - CustomerRepo - .new(set_user: sentry_hub.current_scope.method(:set_user)) + CustomerRepo.new(set_user: sentry_hub.current_scope.method(:set_user)) .find_by_jid(m.from.stripped).then { |customer| next customer.stanza_from(m) unless billable_message(m) + if customer.plan_name && !customer.active? + raise CustomerExpired, "Your account is expired, please top up" + end + EMPromise.all([ TrustLevelRepo.new.find(customer), customer.message_usage((today..today)) @@ -349,14 +354,13 @@ message do |m| raise OverLimit.new(customer, usage) unless tl.send_message?(usage) }.then do EMPromise.all([ - customer.incr_message_usage, - customer.stanza_from(m) + customer.incr_message_usage, customer.stanza_from(m) ]) end }.catch_only(OverLimit) { |e| e.notify_admin BLATHER << m.as_error("policy-violation", :wait, e.message) - }.catch_only(CustomerRepo::NotFound) { |e| + }.catch_only(CustomerRepo::NotFound, CustomerExpired) { |e| BLATHER << m.as_error("forbidden", :auth, e.message) }.catch { |e| panic(e, sentry_hub) } end -- 2.38.4