diff --git a/sgx_jmp.rb b/sgx_jmp.rb index b48dddaec11d8c50d694e0786ccfe2bc8d46a867..be6cbf60462a24ba756f7f997875fc962500dc15 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