class Moguera::Authentication

Constants

VERSION

Attributes

allow_time_interval[RW]

Public Class Methods

new(request_token = nil) click to toggle source
# File lib/moguera/authentication.rb, line 9
def initialize(request_token = nil)
  raise RequestTokenRequired, 'Missing request token.' unless request_token

  @request_token = request_token
  @allow_time_interval = allow_time_interval || 600
end

Public Instance Methods

authenticate(&block) click to toggle source
# File lib/moguera/authentication.rb, line 33
def authenticate(&block)
  authenticate!(&block)

rescue AuthenticationError
  false
end
authenticate!(&block) click to toggle source
# File lib/moguera/authentication.rb, line 16
def authenticate!(&block)
  raise BlockRequired, 'Request token required.' unless block_given?

  access_key = extract_access_key_from_token(token: @request_token)
  server_request = block.call(access_key)

  validate_token!(server_token: server_request.token, request_token: @request_token)
  validate_time!(request_time: server_request.http_date)

  server_request
rescue AuthenticationError => e
  authentication_error = AuthenticationError.new(e.message)
  authentication_error.request_token = @request_token
  authentication_error.server_request = server_request if server_request
  raise authentication_error
end

Private Instance Methods

extract_access_key_from_token(token:) click to toggle source
# File lib/moguera/authentication.rb, line 42
def extract_access_key_from_token(token:)
  begin
    _, access_key_signature = token.split
    access_key, _ = access_key_signature.split(':')
  rescue
    raise AuthenticationError, 'Invalid token.'
  end

  access_key
end
validate_time!(request_time:) click to toggle source
# File lib/moguera/authentication.rb, line 61
def validate_time!(request_time:)
  return true if @allow_time_interval.nil?

  if @allow_time_interval <= 0
    raise ParameterInvalid, 'Please input a positive value.'
  end

  rt = Time.parse(request_time).to_i
  interval = (Time.now.to_i - rt).abs

  if @allow_time_interval <= interval
    raise AuthenticationError, 'Expired request.'
  end

  true
end
validate_token!(server_token:, request_token:) click to toggle source
# File lib/moguera/authentication.rb, line 53
def validate_token!(server_token:, request_token:)
  unless server_token == request_token
    raise AuthenticationError, 'Mismatch token.'
  end

  true
end