class JWTBase

Public Class Methods

new(secret_key, access_exp, refresh_exp, algorithm = 'HS256') click to toggle source
# File lib/jwt_base.rb, line 8
def initialize(secret_key, access_exp, refresh_exp, algorithm = 'HS256')
  @secret_key = secret_key
  @access_exp = access_exp
  @refresh_exp = refresh_exp
  @algorithm = algorithm

  raise Time::TypeError unless @access_exp.class == ActiveSupport::Duration
  raise Time::TypeError unless @refresh_exp.class == ActiveSupport::Duration
end

Public Instance Methods

create_access_token(payload, header = { typ: :JWT }) click to toggle source
# File lib/jwt_base.rb, line 18
def create_access_token(payload, header = { typ: :JWT })
  raise JWT::EncodeError unless payload[:exp].nil? || payload[:type].nil?

  payload[:exp] = (Time.now + @access_exp).to_i
  payload[:type] = :access
  JWT.encode(payload, @secret_key, @algorithm, header)
end
create_refresh_token(payload, header = { typ: :JWT }) click to toggle source
# File lib/jwt_base.rb, line 26
def create_refresh_token(payload, header = { typ: :JWT })
  raise JWT::EncodeError unless payload[:exp].nil? || payload[:type].nil?

  payload[:exp] = (Time.now + @refresh_exp).to_i
  payload[:type] = :refresh
  JWT.encode(payload, @secret_key, @algorithm, header)
end
jwt_required(token) click to toggle source
# File lib/jwt_base.rb, line 42
def jwt_required(token)
  payload = token_required(token)
  return { status: payload[:error] } if payload[:error]
  return { status: :forbidden } unless payload['type'] == 'access'

  payload
end
refresh_token_required(token) click to toggle source
# File lib/jwt_base.rb, line 50
def refresh_token_required(token)
  payload = token_required(token)
  return { status: payload[:error] } if payload[:error]
  return { status: :forbidden } unless payload['type'] == 'refresh'

  payload
end
token_required(token) click to toggle source
# File lib/jwt_base.rb, line 34
def token_required(token)
  payload = JWT.decode(token, @secret_key, @algorithm)[0]
rescue JWT::DecodeError || NoMethodError || JWT::ExpiredSignature
  { error: :unauthorized }
else
  payload
end