47 lines
937 B
Ruby
47 lines
937 B
Ruby
require 'jwt'
|
|
|
|
module Opendax
|
|
|
|
class Error < StandardError
|
|
end
|
|
|
|
class Payload
|
|
def initialize(params)
|
|
@secret = params[:secret]
|
|
@expire = params[:expire] || 600
|
|
|
|
raise Opendax::Error.new unless @secret
|
|
raise Opendax::Error.new unless @expire > 0
|
|
end
|
|
|
|
def generate!(params)
|
|
raise Opendax::Error.new unless params[:service]
|
|
raise Opendax::Error.new unless params[:image]
|
|
|
|
token = params.merge({
|
|
'iat': Time.now.to_i,
|
|
'exp': (Time.now + @expire).to_i
|
|
})
|
|
|
|
JWT.encode token, @secret, 'HS256'
|
|
end
|
|
|
|
def decode!(token)
|
|
JWT.decode(token, @secret, true, {
|
|
algorithm: 'HS256'
|
|
}).first
|
|
end
|
|
|
|
def safe_decode(token)
|
|
begin
|
|
decode!(token)
|
|
rescue JWT::ExpiredSignature
|
|
rescue JWT::ImmatureSignature
|
|
rescue JWT::VerificationError
|
|
rescue JWT::DecodeError
|
|
nil
|
|
end
|
|
end
|
|
end
|
|
end
|