class Auth::TokenProcessor

Public Class Methods

new(jwt_secret = nil, jwt_issuer = nil) click to toggle source
# File lib/token_processor.rb, line 7
def initialize(jwt_secret = nil, jwt_issuer = nil)
  raise Auth::Errors::ProcessorHasNoSecret if jwt_secret.nil?
  raise Auth::Errors::ProcessorHasNoIssuer if jwt_issuer.nil?

  @jwt_secret = jwt_secret
  @jwt_issuer = jwt_issuer
end

Public Instance Methods

process(token = nil) click to toggle source
# File lib/token_processor.rb, line 15
def process(token = nil)
  raise Auth::Errors::TokenMissing if token.nil?

  payload, _header = jwt_process token

  raise Auth::Errors::TokenExpired unless payload.key?('exp')
  raise Auth::Errors::TokenHasNoIssuer unless payload.key?('iss')
  unless payload['iss'] == @jwt_issuer
    raise Auth::Errors::TokenIssuerIncorrect
  end

  Auth::Token.new payload
end

Private Instance Methods

jwt_process(token) click to toggle source
# File lib/token_processor.rb, line 31
def jwt_process(token)
  options = { algorithm: 'HS256', iss: @jwt_issuer }

  JWT.decode token, @jwt_secret, true, options
rescue JWT::ExpiredSignature
  raise Auth::Errors::TokenExpired
rescue JWT::VerificationError
  raise Auth::Errors::TokenTamperDetected
rescue JWT::DecodeError
  raise Auth::Errors::TokenDecodeError
end