| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- # frozen_string_literal: true
- require 'jwt'
- class JsonWebToken
- ALG = 'HS384'
- ISS = 'https://pokemon.trade/'
- AUD = 'pk.t'
- Error = Class.new(StandardError)
- def self.encode(payload)
- data = payload.reverse_merge(meta)
- JWT.encode(
- data,
- Rails.application.credentials.jwt_secret,
- ALG,
- )
- end
- def self.decode(token)
- return if token.nil?
- JWT.decode(
- token,
- Rails.application.credentials.jwt_secret,
- true,
- algorithm: ALG,
- iss: ISS,
- verify_iss: true,
- aud: AUD,
- verify_aud: true,
- )
- rescue JWT::DecodeError => e
- Rails.logger.error("Failed to decode JWT: #{e.message}")
- raise Error, e.message
- end
- def self.meta
- {
- exp: 7.days.from_now.to_i,
- iss: ISS,
- aud: AUD,
- }
- end
- end
|