encoder.rb 758 Bytes
require "jwt"

module ScimRails
  module Encoder
    extend self

    def encode(company)
      payload = {
        iat: Time.current.to_i,
        ScimRails.config.basic_auth_model_searchable_attribute =>
          company.public_send(ScimRails.config.basic_auth_model_searchable_attribute)
      }

      JWT.encode(payload, ScimRails.config.signing_secret, ScimRails.config.signing_algorithm)
    end

    def decode(token)
      verify = ScimRails.config.signing_algorithm != ScimRails::Config::ALGO_NONE

      JWT.decode(token, ScimRails.config.signing_secret, verify, algorithm: ScimRails.config.signing_algorithm).first
    rescue JWT::VerificationError, JWT::DecodeError
      raise ScimRails::ExceptionHandler::InvalidCredentials
    end
  end
end