Sha256: a2caed39bd0f82c00da4c2ec3c7dd029ed83898ffb417614676a0d59410a15fe

Contents?: true

Size: 727 Bytes

Versions: 1

Compression:

Stored size: 727 Bytes

Contents

# frozen_string_literal: true

require "rbnacl"

module PUNK
  class ProveClaimService < Service
    args :session, :secret

    def validate
      validates_not_null :session
      validates_not_empty :session
      return if session.blank?
      session.timeout?
      validates_type Session, :session
      validates_state :session, :pending
      validates_event :session, :verify
    end

    def process
      session.increment_attempts
      session.reload
      raise BadRequest, "Too many attempts" if session.attempt_count >= 3
      hash = RbNaCl::PasswordHash.scrypt(secret, session.salt, 1_048_576, 16_777_216)
      proven = (session[:hash] == hash)
      session.verify! if proven
      proven
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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