Sha256: 70c17394f7621f48210d750a228989d7c43a672121efbd921cd184fbb208f6e6

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

require 'securerandom'

module CruLib
  class AccessToken < ActiveModelSerializers::Model
    attr_accessor :key_guid, :email, :first_name, :last_name, :token

    class << self
      def redis_key(token)
        ['cru_lib:access_token', token].join(':')
      end

      def read(token)
        json = exist?(token)
        if json
          attributes = Oj.load(json)
          attributes['token'] = token
          access_token = new(attributes)
          access_token.write
          access_token
        end
      end

      def exist?(token)
        redis_client.get(redis_key(token))
      end

      def redis_client
        @redis_client ||= CruLib.redis_client
      end
    end


    def generate_access_token
      loop do
        attributes[:token] = SecureRandom.uuid.gsub(/\-/, '')
        break unless self.class.exist?(attributes[:token])
      end
      write

      self
    end


    def write
      self.class.redis_client.setex(self.class.redis_key(token), 30.minutes.to_i, to_json)
    end
    private
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cru_lib-0.0.3 lib/cru_lib/access_token.rb