Sha256: 5d16b239c76f02bf31d138405e3de9273f6cfe585be0ae316b738f11a644cb85

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

#encoding UTF-8
require 'base64'
require 'openssl'
require 'date'

module Fernet
  # Internal: Generates Fernet tokens
  class Generator
    # Returns the token's message
    attr_accessor :message

    # Internal: Initializes a generator
    #
    # opts - a hash containing the following keys:
    #   secret: a string containing a secret, optionally Base64 encoded
    #   message: the message
    def initialize(opts)
      @secret  = opts.fetch(:secret)
      @message = opts[:message]
      @iv      = opts[:iv]
      @now     = opts[:now]
    end

    # Internal: generates a secret token
    #
    # Yields itself, useful for setting or overriding the message
    #
    # Returns the token as a string
    #
    # Examples
    # generator = Generator.new(secret: some_secret)
    # token = generator.generate do |g|
    #   g.message = 'this is my message'
    # end
    #
    # generator = Generator.new(secret: some_secret,
    #                           message: 'this is my message')
    # token = generator.generate
    def generate
      yield self if block_given?

      token = Token.generate(secret:  @secret,
                             message: @message,
                             iv:      @iv,
                             now:     @now)
      token.to_s
    end

    # Public: string representation of this generator, masks secret to avoid
    #   leaks
    def inspect
      "#<Fernet::Generator @secret=[masked] @message=#{@message.inspect}>"
    end
    alias to_s inspect

    # Deprecated: used to set the message
    def data=(message)
      puts "[WARNING] 'data=' is deprecated, use 'message=' instead"
      @message = message
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fernet-2.0.rc2 lib/fernet/generator.rb