Merge branch 'customer-not-found'

Stephen Paul Weber created

* customer-not-found:
  Customer not found, return auth error instead of panic
  Catchable CustomerRepo::NotFound

Change summary

lib/customer_repo.rb | 14 +++++++-------
sgx_jmp.rb           |  2 ++
2 files changed, 9 insertions(+), 7 deletions(-)

Detailed changes

lib/customer_repo.rb 🔗

@@ -7,6 +7,8 @@ require_relative "legacy_customer"
 require_relative "polyfill"
 
 class CustomerRepo
+	class NotFound < RuntimeError; end
+
 	def initialize(
 		redis: LazyObject.new { REDIS },
 		db: LazyObject.new { DB },
@@ -21,7 +23,7 @@ class CustomerRepo
 
 	def find(customer_id)
 		@redis.get("jmp_customer_jid-#{customer_id}").then do |jid|
-			raise "No jid" unless jid
+			raise NotFound, "No jid" unless jid
 			find_inner(customer_id, jid)
 		end
 	end
@@ -30,18 +32,16 @@ class CustomerRepo
 		if jid.to_s =~ /\Acustomer_(.+)@#{CONFIG[:component][:jid]}\Z/
 			find($1)
 		else
-			@redis.get("jmp_customer_id-#{jid}").then { |customer_id|
-				raise "No customer id" unless customer_id
+			@redis.get("jmp_customer_id-#{jid}").then do |customer_id|
+				next find_legacy_customer(jid) unless customer_id
 				find_inner(customer_id, jid)
-			}.catch do
-				find_legacy_customer(jid)
 			end
 		end
 	end
 
 	def find_by_tel(tel)
 		@redis.get("catapult_jid-#{tel}").then do |jid|
-			raise "No jid" unless jid
+			raise NotFound, "No jid" unless jid
 			find_by_jid(jid)
 		end
 	end
@@ -69,7 +69,7 @@ protected
 
 	def find_legacy_customer(jid)
 		@redis.lindex("catapult_cred-#{jid}", 3).then do |tel|
-			raise "No customer" unless tel
+			raise NotFound, "No customer" unless tel
 			LegacyCustomer.new(Blather::JID.new(jid), tel)
 		end
 	end

sgx_jmp.rb 🔗

@@ -269,6 +269,8 @@ message(
 		m.to = m.to.with(domain: customer.jid.domain)
 		address["jid"] = customer.jid.to_s
 		BLATHER << m
+	}.catch_only(CustomerRepo::NotFound) { |e|
+		BLATHER << iq.as_error("forbidden", :auth, e.message)
 	}.catch { |e| panic(e, sentry_hub) }
 end