47 lines
1.1 KiB
Ruby
47 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Barong
|
|
module Middleware
|
|
# Authenticate a user by a bearer token
|
|
class JWTAuthenticator < Grape::Middleware::Base
|
|
def initialize(app, options)
|
|
super(app, options)
|
|
raise(Peatio::Auth::Error, 'Public key missing') unless options[:pubkey]
|
|
|
|
@keypub = options[:pubkey]
|
|
end
|
|
|
|
def before
|
|
return if request.path.include? 'swagger'
|
|
|
|
raise(Peatio::Auth::Error, 'Header Authorization missing') \
|
|
unless authorization_present?
|
|
|
|
token = request.headers['Authorization']
|
|
env[:current_payload] = authenticator.authenticate!(token)
|
|
end
|
|
|
|
private
|
|
|
|
# JWT Authenticator instance from peatio-core
|
|
#
|
|
# @return [Peatio::Auth::JWTAuthenticator]
|
|
def authenticator
|
|
@authenticator ||=
|
|
Peatio::Auth::JWTAuthenticator.new(@keypub)
|
|
end
|
|
|
|
def authorization_present?
|
|
request.headers.key?('Authorization')
|
|
end
|
|
|
|
# Request entity
|
|
#
|
|
# @return [Grape::Request]
|
|
def request
|
|
@request ||= Grape::Request.new(env)
|
|
end
|
|
end
|
|
end
|
|
end
|