mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-05 23:17:33 +08:00
35 lines
942 B
Ruby
35 lines
942 B
Ruby
|
module Api
|
||
|
class CoreJwt
|
||
|
require 'jwt'
|
||
|
KEY_SECRET = Rails.application.secrets.secret_key_base
|
||
|
|
||
|
def self.encode(payload, expires_at = nil)
|
||
|
if expires_at
|
||
|
payload[:exp] = expires_at
|
||
|
else
|
||
|
payload[:exp] = Api.configuration.core_api_token_ttl.from_now.to_i
|
||
|
end
|
||
|
payload[:iss] = Api.configuration.core_api_token_iss
|
||
|
JWT.encode(payload, KEY_SECRET, Api.configuration.core_api_sign_alg)
|
||
|
end
|
||
|
|
||
|
def self.decode(token)
|
||
|
HashWithIndifferentAccess.new(
|
||
|
JWT.decode(token, KEY_SECRET, Api.configuration.core_api_sign_alg)[0]
|
||
|
)
|
||
|
end
|
||
|
|
||
|
def self.read_iss(token)
|
||
|
HashWithIndifferentAccess.new(
|
||
|
JWT.decode(token, nil, false)[0]
|
||
|
)[:iss].to_s
|
||
|
end
|
||
|
|
||
|
def self.refresh_needed?(payload)
|
||
|
time_left = payload[:exp].to_i - Time.now.to_i
|
||
|
return true if time_left < (Api.configuration.core_api_token_ttl.to_i / 2)
|
||
|
false
|
||
|
end
|
||
|
end
|
||
|
end
|