json_web_token.rb 784 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # frozen_string_literal: true
  2. require 'jwt'
  3. class JsonWebToken
  4. ALG = 'HS384'
  5. ISS = 'https://pokemon.trade/'
  6. AUD = 'pk.t'
  7. Error = Class.new(StandardError)
  8. def self.encode(payload)
  9. data = payload.reverse_merge(meta)
  10. JWT.encode(
  11. data,
  12. Rails.application.credentials.jwt_secret,
  13. ALG,
  14. )
  15. end
  16. def self.decode(token)
  17. JWT.decode(
  18. token,
  19. Rails.application.credentials.jwt_secret,
  20. true,
  21. algorithm: ALG,
  22. iss: ISS,
  23. verify_iss: true,
  24. aud: AUD,
  25. verify_aud: true,
  26. )
  27. rescue JWT::DecodeError => e
  28. Rails.logger.error("Failed to decode JWT: #{e.message}")
  29. raise Error, e.message
  30. end
  31. def self.meta
  32. {
  33. exp: 7.days.from_now.to_i,
  34. iss: ISS,
  35. aud: AUD,
  36. }
  37. end
  38. end