module Doorkeeper::JWT

Public Class Methods

configuration() click to toggle source
# File lib/doorkeeper/jwt/config.rb, line 15
def self.configuration
  @config || raise(MissingConfiguration)
end
configure(&block) click to toggle source
# File lib/doorkeeper/jwt/config.rb, line 11
def self.configure(&block)
  @config = Config::Builder.new(&block).build
end
gem_version() click to toggle source
# File lib/doorkeeper/jwt/version.rb, line 5
def self.gem_version
  Gem::Version.new VERSION::STRING
end
generate(opts = {}) click to toggle source
# File lib/doorkeeper/jwt.rb, line 10
def generate(opts = {})
  ::JWT.encode(
    token_payload(opts),
    secret_key(opts),
    encryption_method,
    token_headers(opts)
  )
end

Private Class Methods

application_secret(opts) click to toggle source
# File lib/doorkeeper/jwt.rb, line 56
def application_secret(opts)
  if opts[:application].nil?
    raise(
      "JWT `use_application_secret` is enabled, but application is nil." \
      " This can happen if `client_id` was absent in the request params."
    )
  end

  secret = if opts[:application].respond_to?(:plaintext_secret)
             unless opts[:application].secret_strategy.allows_restoring_secrets?
               raise(
                 "JWT `use_application_secret` is enabled, but secret strategy " \
                 "doesn't allow plaintext secret restoring"
               )
             end
             opts[:application].plaintext_secret
           else
             opts[:application][:secret]
           end

  if secret.nil?
    raise(
      "JWT `use_application_secret` is enabled, but the application" \
      " secret is nil."
    )
  end

  secret
end
ecdsa_encryption?() click to toggle source
# File lib/doorkeeper/jwt.rb, line 90
def ecdsa_encryption?
  /ES\d{3}/ =~ encryption_method
end
ecdsa_key() click to toggle source
# File lib/doorkeeper/jwt.rb, line 98
def ecdsa_key
  OpenSSL::PKey::EC.new(Doorkeeper::JWT.configuration.secret_key)
end
ecdsa_key_file() click to toggle source
# File lib/doorkeeper/jwt.rb, line 106
def ecdsa_key_file
  secret_key_file_open { |f| OpenSSL::PKey::EC.new(f) }
end
encryption_method() click to toggle source
# File lib/doorkeeper/jwt.rb, line 46
def encryption_method
  return "none" unless Doorkeeper::JWT.configuration.encryption_method

  Doorkeeper::JWT.configuration.encryption_method.to_s.upcase
end
rsa_encryption?() click to toggle source
# File lib/doorkeeper/jwt.rb, line 86
def rsa_encryption?
  /RS\d{3}/ =~ encryption_method
end
rsa_key() click to toggle source
# File lib/doorkeeper/jwt.rb, line 94
def rsa_key
  OpenSSL::PKey::RSA.new(Doorkeeper::JWT.configuration.secret_key)
end
rsa_key_file() click to toggle source
# File lib/doorkeeper/jwt.rb, line 102
def rsa_key_file
  secret_key_file_open { |f| OpenSSL::PKey::RSA.new(f) }
end
secret_key(opts) click to toggle source
# File lib/doorkeeper/jwt.rb, line 29
def secret_key(opts)
  opts = { application: {} }.merge(opts)

  return application_secret(opts) if use_application_secret?
  return secret_key_file unless secret_key_file.nil?
  return rsa_key if rsa_encryption?
  return ecdsa_key if ecdsa_encryption?

  Doorkeeper::JWT.configuration.secret_key
end
secret_key_file() click to toggle source
# File lib/doorkeeper/jwt.rb, line 40
def secret_key_file
  return nil if Doorkeeper::JWT.configuration.secret_key_path.nil?
  return rsa_key_file if rsa_encryption?
  return ecdsa_key_file if ecdsa_encryption?
end
secret_key_file_open(&block) click to toggle source
# File lib/doorkeeper/jwt.rb, line 110
def secret_key_file_open(&block)
  File.open(Doorkeeper::JWT.configuration.secret_key_path, &block)
end
token_headers(opts = {}) click to toggle source
# File lib/doorkeeper/jwt.rb, line 25
def token_headers(opts = {})
  Doorkeeper::JWT.configuration.token_headers.call(opts)
end
token_payload(opts = {}) click to toggle source
# File lib/doorkeeper/jwt.rb, line 21
def token_payload(opts = {})
  Doorkeeper::JWT.configuration.token_payload.call(opts)
end
use_application_secret?() click to toggle source
# File lib/doorkeeper/jwt.rb, line 52
def use_application_secret?
  Doorkeeper::JWT.configuration.use_application_secret
end