class PUNK::CreateSessionAction
Public Instance Methods
claim_type()
click to toggle source
# File lib/punk/actions/sessions/create.rb, line 42 def claim_type @claim_type ||= _guess_claim_type end
process()
click to toggle source
# File lib/punk/actions/sessions/create.rb, line 22 def process PUNK.db.transaction do identity = Identity.find_or_create(claim: _normalize_claim) do |i| i.claim_type = claim_type end session = Session.create(identity: identity, remote_addr: remote_addr, user_agent: user_agent) ChallengeClaimService.run(session: session) IdentifySessionWorker.perform_async(session_id: session.id) message = case identity.claim_type when :email "We have sent a verification code to your email address. Please enter it to verify your identity." when :phone "We have sent a verification code to your phone number by SMS. Please enter it to verify your identity." end present PendingSessionView, session: session, message: message, status: 201 end end
validate()
click to toggle source
# File lib/punk/actions/sessions/create.rb, line 10 def validate validates_not_null :claim validates_not_empty :claim validates_not_null :claim_type, message: "is not an email address or phone number" validates_email :claim if claim_type == :email validates_phone :claim if claim_type == :phone validates_not_null :remote_addr validates_not_empty :remote_addr validates_not_null :user_agent validates_not_empty :user_agent end
Private Instance Methods
_guess_claim_type()
click to toggle source
# File lib/punk/actions/sessions/create.rb, line 48 def _guess_claim_type return :email if URI::MailTo::EMAIL_REGEXP.match(claim) return :phone if Phony.plausible?(claim) end
_normalize_claim()
click to toggle source
# File lib/punk/actions/sessions/create.rb, line 53 def _normalize_claim case claim_type when :email claim.downcase.strip when :phone phone = claim.strip phone = "+1#{phone}" unless /^[+]/.match?(phone) "+#{Phony.normalize(phone)}" end end