Sha256: 9e4448391d9e730340057862fd89b45340772440b60c9bc8d3f7798a44a5679e

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require "rbnacl"

module PUNK
  class ChallengeClaimService < Service
    args :session

    def validate
      validates_not_null :session
      validates_not_empty :session
      return if session.blank?
      validates_type Session, :session
      validates_state :session, :created
      validates_event :session, :challenge
    end

    def process
      secret = SecretService.run.result
      salt = RbNaCl::Random.random_bytes(RbNaCl::PasswordHash::SCrypt::SALTBYTES)
      hash = RbNaCl::PasswordHash.scrypt(secret, salt, 1_048_576, 16_777_216)
      session.update(salt: salt, hash: hash)
      session.challenge!
      identity = session.identity
      case identity.claim_type
      when :email
        SendEmailWorker.perform_async(
          from: "GroupFire Accounts <noreply@groupfire.com>",
          to: identity.claim,
          subject: "[GroupFire] Verification Code",
          template: "verify",
          tags: [:auth],
          variables: {
            name: identity.user&.name || "New User",
            secret: secret
          }
        )
      when :phone
        SendSmsWorker.perform_async(
          to: identity.claim,
          body: "Your GroupFire verification code is: #{secret}."
        )
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
punk-0.4.1 lib/punk/services/challenge_claim.rb