Sha256: 1a3fff21b3cb78d052cbbc66037c52090b4172001be93dc80ee2778d6f4483ac

Contents?: true

Size: 1.71 KB

Versions: 12

Compression:

Stored size: 1.71 KB

Contents

require 'securerandom'

module Sorcery
  module Model
    # This module encapsulates the logic for temporary token.
    # A temporary token is created to identify a user in scenarios
    # such as reseting password and activating the user by email.
    module TemporaryToken
      def self.included(base)
        # FIXME: This may not be the ideal way of passing sorcery_config to generate_random_token.
        @sorcery_config = base.sorcery_config
        base.extend(ClassMethods)
      end

      # Random code, used for salt and temporary tokens.
      def self.generate_random_token
        SecureRandom.urlsafe_base64(@sorcery_config.token_randomness).tr('lIO0', 'sxyz')
      end

      module ClassMethods
        def load_from_token(token, token_attr_name, token_expiration_date_attr = nil, &block)
          return token_response(failure: :invalid_token, &block) if token.blank?

          user = sorcery_adapter.find_by_token(token_attr_name, token)

          return token_response(failure: :user_not_found, &block) unless user

          unless check_expiration_date(user, token_expiration_date_attr)
            return token_response(user: user, failure: :token_expired, &block)
          end

          token_response(user: user, return_value: user, &block)
        end

        protected

        def check_expiration_date(user, token_expiration_date_attr)
          return true unless token_expiration_date_attr

          expires_at = user.send(token_expiration_date_attr)

          !expires_at || (Time.now.in_time_zone < expires_at)
        end

        def token_response(options = {})
          yield(options[:user], options[:failure]) if block_given?

          options[:return_value]
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
sorcery-0.17.0 lib/sorcery/model/temporary_token.rb
sorcery-0.16.5 lib/sorcery/model/temporary_token.rb
sorcery-0.16.4 lib/sorcery/model/temporary_token.rb
sorcery-0.16.3 lib/sorcery/model/temporary_token.rb
sorcery-0.16.2 lib/sorcery/model/temporary_token.rb
sorcery-0.16.1 lib/sorcery/model/temporary_token.rb
sorcery-0.15.1 lib/sorcery/model/temporary_token.rb
sorcery-0.16.0 lib/sorcery/model/temporary_token.rb
sorcery-0.15.0 lib/sorcery/model/temporary_token.rb
sorcery-0.14.0 lib/sorcery/model/temporary_token.rb
sorcery-0.13.0 lib/sorcery/model/temporary_token.rb
sorcery-0.12.0 lib/sorcery/model/temporary_token.rb