doorkeeper-jwt 0.2.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b002cd43174cb7dee9362bc8a8c15bdaf090e341
4
- data.tar.gz: eec5f2cffa66c2f83662388b810ff4fb0ec14de4
2
+ SHA256:
3
+ metadata.gz: e221c6342513368dcb299a24749a66fe45936fd1eef1ab3e93d1b34b7d0a89ca
4
+ data.tar.gz: 976256cc0a811b02e0ae9738842f99a8ccc57a054f8adea6fce9072db40cc390
5
5
  SHA512:
6
- metadata.gz: 86c9a2ad56ba7f28444ba570223555fd5e43e555091d8b2984c47b0e6b16c247c052e92458a1fa9ab5d4ad5bcd8344eb9b4a5e4dab4d54b02cde6141fa1835aa
7
- data.tar.gz: 5824759b0bfb152e7daba0273139aa0d019060c15b17eb02205235ed441c3403d15527de919d18e8567bb23431dcbd49cbe0d7181e94ee19f33ce7f314792560
6
+ metadata.gz: ca803cc8cff761b4c2e7eddeeb2bf673ff3c4b32bdad377149904504c4d4dcc411dbe7bdfac7ac87f7deebe6e61a309ca983eb42c348e904265b3086311eccb3
7
+ data.tar.gz: e4c2690b4ddc8d0ace06d44659a7a91480f452394e8a6f7781c4dc4cd057101d38968559751ee15abcacf1ccdb49da05ad80a4ff0efd4c4c90527b013c35bffd
@@ -0,0 +1,7 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ open-pull-requests-limit: 10
@@ -0,0 +1,38 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ name: >-
8
+ Ruby ${{ matrix.ruby }}
9
+ env:
10
+ CI: true
11
+ runs-on: ${{ matrix.os }}
12
+ continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' || matrix.experimental }}
13
+ if: |
14
+ !( contains(github.event.pull_request.title, '[ci skip]')
15
+ || contains(github.event.pull_request.title, '[skip ci]'))
16
+ strategy:
17
+ fail-fast: true
18
+ matrix:
19
+ experimental: [false]
20
+ os: [ ubuntu-latest ]
21
+ ruby:
22
+ - 2.6
23
+ - 2.7
24
+ - '3.0'
25
+ - '3.1'
26
+ steps:
27
+ - name: Repo checkout
28
+ uses: actions/checkout@v2
29
+
30
+ - name: Setup Ruby
31
+ uses: ruby/setup-ruby@v1
32
+ with:
33
+ ruby-version: ${{ matrix.ruby }}
34
+ bundler-cache: true
35
+
36
+ - name: Run tests
37
+ timeout-minutes: 10
38
+ run: bundle exec rake test
data/.gitignore CHANGED
@@ -1,9 +1,16 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
1
+ *.gem
5
2
  /coverage/
6
- /doc/
7
3
  /pkg/
8
4
  /spec/reports/
9
5
  /tmp/
6
+
7
+ /.yardoc/
8
+ /_yardoc/
9
+ /doc/
10
+
11
+ /.bundle/
12
+
13
+ Gemfile.lock
14
+
15
+ .idea/
16
+ *.iml
data/.hound.yml ADDED
@@ -0,0 +1,3 @@
1
+ rubocop:
2
+ config_file: .rubocop.yml
3
+ version: 0.72.0
data/.rubocop.yml ADDED
@@ -0,0 +1,62 @@
1
+ ---
2
+ require: rubocop-rspec
3
+
4
+ AllCops:
5
+ DefaultFormatter: progress
6
+ DisplayCopNames: true
7
+ DisplayStyleGuide: false
8
+ ExtraDetails: true
9
+ TargetRubyVersion: 2.5
10
+
11
+ Metrics/LineLength:
12
+ Exclude:
13
+ - spec/**/*
14
+ Max: 100
15
+
16
+ Metrics/BlockLength:
17
+ Exclude:
18
+ - spec/**/*
19
+ - doorkeeper-jwt.gemspec
20
+
21
+ Style/StringLiterals:
22
+ EnforcedStyle: double_quotes
23
+ Style/StringLiteralsInInterpolation:
24
+ EnforcedStyle: double_quotes
25
+
26
+ Style/FrozenStringLiteralComment:
27
+ Enabled: true
28
+
29
+ Style/TrailingCommaInHashLiteral:
30
+ EnforcedStyleForMultiline: consistent_comma
31
+ Style/TrailingCommaInArrayLiteral:
32
+ EnforcedStyleForMultiline: consistent_comma
33
+
34
+ Style/SymbolArray:
35
+ MinSize: 3
36
+ Style/WordArray:
37
+ MinSize: 3
38
+
39
+ Style/ClassAndModuleChildren:
40
+ Exclude:
41
+ - spec/**/*
42
+ Style/NumericPredicate:
43
+ Enabled: false
44
+ Style/DoubleNegation:
45
+ Enabled: false
46
+
47
+ Layout/MultilineMethodCallIndentation:
48
+ EnforcedStyle: indented
49
+ Layout/TrailingBlankLines:
50
+ Enabled: true
51
+ Layout/DotPosition:
52
+ EnforcedStyle: leading
53
+
54
+ Naming/FileName:
55
+ Exclude:
56
+ - lib/doorkeeper-jwt.rb
57
+
58
+ RSpec/ExampleLength:
59
+ Enabled: false
60
+
61
+ RSpec/MultipleExpectations:
62
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,13 +1,39 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
- and this project adheres to [Semantic Versioning](http://semver.org/).
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this
5
+ project adheres to [Semantic Versioning](http://semver.org/).
6
+
7
+ ## master
8
+
9
+ ### Changed
10
+
11
+ ## [0.4.1] - 2022-02-23
12
+
13
+ - JWT gem requirement relaxed to use any version >= 2.1
14
+
15
+ ### Changed
16
+
17
+ ## [0.4.0] - 2019-10-02
18
+
19
+ - Restructured library files to follow naming conventions. (https://guides.rubygems.org/name-your-gem/).
20
+ - Add support of new doorkeeper with encryption [#30](https://github.com/doorkeeper-gem/doorkeeper-jwt/pull/30)
21
+
22
+ ## [0.3.0] - 2018-10-01
23
+
24
+ ### Added
25
+
26
+ - Bump JWT gem version. Via [#27](https://github.com/doorkeeper-gem/doorkeeper-jwt/pull/27) by [@pacop](https://github.com/pacop/).
6
27
 
7
28
  ## [0.2.1] - 2017-06-07
29
+
8
30
  ### Fixed
31
+
9
32
  - The `token_headers` proc now passes `opts` like the other config methods. Fixed via #19 by @travisofthenorth.
10
33
 
11
34
  ## [0.2.0] - 2017-05-25
35
+
12
36
  ### Added
13
- - Added support for ["kid" (Key ID) Header Parameter](https://tools.ietf.org/html/rfc7515#section-4.1.4) @travisofthenorth. Allows custom token headers.
37
+
38
+ - Added support for ["kid" (Key ID) Header Parameter](https://tools.ietf.org/html/rfc7515#section-4.1.4)
39
+ @travisofthenorth. Allows custom token headers.
data/Gemfile CHANGED
@@ -1,7 +1,10 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in doorkeeper-jwt.gemspec
4
6
  gemspec
5
7
 
6
- gem 'coveralls', require: false
7
- gem "codeclimate-test-reporter", group: :test, require: nil
8
+ gem "coveralls", require: false
9
+ gem "rubocop", "~> 1.8", require: false
10
+ gem "rubocop-rspec", "~> 2.1", require: false
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
- [![Coverage Status](https://coveralls.io/repos/chriswarren/doorkeeper-jwt/badge.svg?branch=master)](https://coveralls.io/r/chriswarren/doorkeeper-jwt?branch=master)
2
- [![Build Status](https://travis-ci.org/chriswarren/doorkeeper-jwt.svg?branch=master)](https://travis-ci.org/chriswarren/doorkeeper-jwt)
3
- [![Code Climate](https://codeclimate.com/github/chriswarren/doorkeeper-jwt/badges/gpa.svg)](https://codeclimate.com/github/chriswarren/doorkeeper-jwt)
1
+ [![Gem Version](https://badge.fury.io/rb/doorkeeper-jwt.svg)](https://rubygems.org/gems/doorkeeper-jwt)
2
+ [![Coverage Status](https://coveralls.io/repos/github/doorkeeper-gem/doorkeeper-jwt/badge.svg?branch=master)](https://coveralls.io/github/doorkeeper-gem/doorkeeper-jwt?branch=master)
3
+ [![Build Status](https://travis-ci.org/doorkeeper-gem/doorkeeper-jwt.svg?branch=master)](https://travis-ci.org/doorkeeper-gem/doorkeeper-jwt)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/ca4d81b49acabda27e0c/maintainability)](https://codeclimate.com/github/doorkeeper-gem/doorkeeper-jwt/maintainability)
4
5
 
5
6
  # Doorkeeper::JWT
6
7
 
7
- Doorkeeper JWT adds JWT token support to the Doorkeeper OAuth library. Requires Doorkeeper 2.2.0 or newer.
8
+ Doorkeeper JWT adds JWT token support to the Doorkeeper OAuth library. Confirmed to work with Doorkeeper 2.2.x - 4.x.
9
+ Untested with later versions of Doorkeeper.
8
10
 
9
11
  ```ruby
10
12
  gem 'doorkeeper'
@@ -31,7 +33,7 @@ Or install it yourself as:
31
33
  In your `doorkeeper.rb` initializer add the follow to the `Doorkeeper.configure` block:
32
34
 
33
35
  ```ruby
34
- access_token_generator "Doorkeeper::JWT"
36
+ access_token_generator '::Doorkeeper::JWT'
35
37
  ```
36
38
 
37
39
  Then add a `Doorkeeper::JWT.configure` block below the `Doorkeeper.configure` block to set your JWT preferences.
@@ -39,13 +41,18 @@ Then add a `Doorkeeper::JWT.configure` block below the `Doorkeeper.configure` bl
39
41
  ```ruby
40
42
  Doorkeeper::JWT.configure do
41
43
  # Set the payload for the JWT token. This should contain unique information
42
- # about the user.
43
- # Defaults to a randomly generated token in a hash
44
- # { token: "RANDOM-TOKEN" }
44
+ # about the user. Defaults to a randomly generated token in a hash:
45
+ # { token: "RANDOM-TOKEN" }
45
46
  token_payload do |opts|
46
47
  user = User.find(opts[:resource_owner_id])
47
48
 
48
49
  {
50
+ iss: 'My App',
51
+ iat: Time.current.utc.to_i,
52
+
53
+ # @see JWT reserved claims - https://tools.ietf.org/html/draft-jones-json-web-token-07#page-7
54
+ jti: SecureRandom.uuid,
55
+
49
56
  user: {
50
57
  id: user.id,
51
58
  email: user.email
@@ -53,44 +60,44 @@ Doorkeeper::JWT.configure do
53
60
  }
54
61
  end
55
62
 
56
- # Optionally set additional headers for the JWT. See https://tools.ietf.org/html/rfc7515#section-4.1
63
+ # Optionally set additional headers for the JWT. See
64
+ # https://tools.ietf.org/html/rfc7515#section-4.1
57
65
  token_headers do |opts|
58
- {
59
- kid: opts[:application][:uid]
60
- }
66
+ { kid: opts[:application][:uid] }
61
67
  end
62
68
 
63
- # Use the application secret specified in the Access Grant token
64
- # Defaults to false
65
- # If you specify `use_application_secret true`, both secret_key and secret_key_path will be ignored
69
+ # Use the application secret specified in the access grant token. Defaults to
70
+ # `false`. If you specify `use_application_secret true`, both `secret_key` and
71
+ # `secret_key_path` will be ignored.
66
72
  use_application_secret false
67
73
 
68
74
  # Set the encryption secret. This would be shared with any other applications
69
- # that should be able to read the payload of the token.
70
- # Defaults to "secret"
71
- secret_key "MY-SECRET"
72
-
73
- # If you want to use RS* encoding specify the path to the RSA key
74
- # to use for signing.
75
- # If you specify a secret_key_path it will be used instead of secret_key
76
- secret_key_path "path/to/file.pem"
77
-
78
- # Specify encryption type. Supports any algorithim in
79
- # https://github.com/progrium/ruby-jwt
80
- # defaults to nil
75
+ # that should be able to read the payload of the token. Defaults to "secret".
76
+ secret_key ENV['JWT_SECRET']
77
+
78
+ # If you want to use RS* encoding specify the path to the RSA key to use for
79
+ # signing. If you specify a `secret_key_path` it will be used instead of
80
+ # `secret_key`.
81
+ secret_key_path File.join('path', 'to', 'file.pem')
82
+
83
+ # Specify encryption type (https://github.com/progrium/ruby-jwt). Defaults to
84
+ # `nil`.
81
85
  encryption_method :hs512
82
86
  end
83
87
  ```
84
88
 
85
89
  ## Development
86
90
 
87
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
91
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt
92
+ that will allow you to experiment.
88
93
 
89
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
94
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
95
+ version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git
96
+ commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
90
97
 
91
98
  ## Contributing
92
99
 
93
- 1. Fork it ( https://github.com/[my-github-username]/doorkeeper-jwt/fork )
100
+ 1. Fork it (https://github.com/[my-github-username]/doorkeeper-jwt/fork)
94
101
  2. Create your feature branch (`git checkout -b my-new-feature`)
95
102
  3. Commit your changes (`git commit -am 'Add some feature'`)
96
103
  4. Push to the branch (`git push origin my-new-feature`)
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
6
  RSpec::Core::RakeTask.new
5
7
 
6
- task :default => :spec
7
- task :test => :spec
8
+ task default: :spec
9
+ task test: :spec
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "doorkeeper-jwt"
@@ -7,8 +8,10 @@ require "doorkeeper-jwt"
7
8
  # with your gem easier. You can also use a different console, if you like.
8
9
 
9
10
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
+ # require 'pry'
12
+ #
11
13
  # Pry.start
12
14
 
13
15
  require "irb"
16
+
14
17
  IRB.start
data/bin/setup CHANGED
@@ -1,7 +1,8 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
+
2
3
  set -euo pipefail
3
4
  IFS=$'\n\t'
4
5
 
5
6
  bundle install
6
7
 
7
- # Do any other automated setup that you need to do here
8
+ # Do any other automated setup that you need to do here.
@@ -1,28 +1,31 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'doorkeeper-jwt/version'
5
+
6
+ require "doorkeeper/jwt/version"
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = "doorkeeper-jwt"
8
- spec.version = Doorkeeper::JWT::VERSION
9
- spec.authors = ["Chris Warren"]
10
- spec.email = ["chris@expectless.com"]
9
+ spec.name = "doorkeeper-jwt"
10
+ spec.version = Doorkeeper::JWT.gem_version
11
+ spec.authors = ["Chris Warren", "Nikita Bulai"]
12
+ spec.email = ["chris@expectless.com"]
11
13
 
12
- spec.summary = %q{JWT token generator for Doorkeeper}
13
- spec.description = %q{JWT token generator extension for Doorkeeper}
14
- spec.homepage = "https://github.com/chriswarren/doorkeeper-jwt"
15
- spec.license = "MIT"
14
+ spec.summary = "JWT token generator for Doorkeeper"
15
+ spec.description = "JWT token generator extension for Doorkeeper"
16
+ spec.homepage = "https://github.com/chriswarren/doorkeeper-jwt"
17
+ spec.license = "MIT"
16
18
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.bindir = "exe"
20
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
23
  spec.require_paths = ["lib"]
21
24
 
22
- spec.add_dependency "jwt", "~> 1.5.2", ">= 1.5.2"
25
+ spec.add_dependency "jwt", ">= 2.1"
23
26
 
24
- spec.add_development_dependency "bundler", "~> 1.8", ">= 1.8"
25
- spec.add_development_dependency "rake", "~> 10.0", ">= 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.2.0", ">= 3.2"
27
+ spec.add_development_dependency "bundler", ">= 1.16", "< 3"
27
28
  spec.add_development_dependency "pry", "~> 0"
29
+ spec.add_development_dependency "rake", "~> 13.0"
30
+ spec.add_development_dependency "rspec", "~> 3.8"
28
31
  end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Doorkeeper
4
+ module JWT
5
+ class MissingConfiguration < StandardError
6
+ def initialize
7
+ super("Configuration for doorkeeper-jwt missing.")
8
+ end
9
+ end
10
+
11
+ def self.configure(&block)
12
+ @config = Config::Builder.new(&block).build
13
+ end
14
+
15
+ def self.configuration
16
+ @config || raise(MissingConfiguration)
17
+ end
18
+
19
+ class Config
20
+ class Builder
21
+ def initialize(&block)
22
+ @config = Config.new
23
+ instance_eval(&block)
24
+ end
25
+
26
+ def build
27
+ @config
28
+ end
29
+
30
+ def use_application_secret(value)
31
+ @config.instance_variable_set("@use_application_secret", value)
32
+ end
33
+
34
+ def secret_key(value)
35
+ @config.instance_variable_set("@secret_key", value)
36
+ end
37
+
38
+ def secret_key_path(value)
39
+ @config.instance_variable_set("@secret_key_path", value)
40
+ end
41
+
42
+ def encryption_method(value)
43
+ @config.instance_variable_set("@encryption_method", value)
44
+ end
45
+ end
46
+
47
+ module Option
48
+ # Defines configuration options.
49
+ #
50
+ # When you call option, it defines two methods. One method will take
51
+ # place in the +Config+ class and the other method will take place in
52
+ # the +Builder+ class.
53
+ #
54
+ # The +name+ parameter will set both builder method and config
55
+ # attribute. If the +:as+ option is defined, the builder method will be
56
+ # the specified option while the config attribute will be the +name+
57
+ # parameter.
58
+ #
59
+ # If you want to introduce another level of config DSL you can define
60
+ # +builder_class+ parameter. Builder should take a block as the
61
+ # initializer parameter and respond to function +build+ that returns the
62
+ # value of the config attribute.
63
+ #
64
+ # ==== Options
65
+ #
66
+ # * [+:as+] Set the builder method that goes inside +configure+ block.
67
+ # * [+:default+] The default value in case no option was set.
68
+ #
69
+ # ==== Examples
70
+ #
71
+ # option :name
72
+ # option :name, as: :set_name
73
+ # option :name, default: 'My Name'
74
+ # option :scopes, builder_class: ScopesBuilder
75
+ def option(name, options = {})
76
+ attribute = options[:as] || name
77
+ attribute_builder = options[:builder_class]
78
+ attribute_symbol = :"@#{attribute}"
79
+
80
+ Builder.instance_eval do
81
+ define_method name do |*args, &block|
82
+ # TODO: is builder_class option being used?
83
+ value =
84
+ if attribute_builder
85
+ attribute_builder.new(&block).build
86
+ else
87
+ block || args.first
88
+ end
89
+
90
+ @config.instance_variable_set(attribute_symbol, value)
91
+ end
92
+ end
93
+
94
+ define_method attribute do |*|
95
+ if instance_variable_defined?(attribute_symbol)
96
+ instance_variable_get(attribute_symbol)
97
+ else
98
+ options[:default]
99
+ end
100
+ end
101
+
102
+ public attribute
103
+ end
104
+
105
+ def extended(base)
106
+ base.send(:private, :option)
107
+ end
108
+ end
109
+
110
+ extend Option
111
+
112
+ option(
113
+ :token_payload,
114
+ default: proc { { token: SecureRandom.method(:hex) } }
115
+ )
116
+
117
+ option :token_headers, default: proc { {} }
118
+ option :use_application_secret, default: false
119
+ option :secret_key, default: nil
120
+ option :secret_key_path, default: nil
121
+ option :encryption_method, default: nil
122
+
123
+ def use_application_secret
124
+ @use_application_secret ||= false
125
+ end
126
+
127
+ def secret_key
128
+ @secret_key ||= nil
129
+ end
130
+
131
+ def secret_key_path
132
+ @secret_key_path ||= nil
133
+ end
134
+
135
+ def encryption_method
136
+ @encryption_method ||= nil
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Doorkeeper
4
+ module JWT
5
+ def self.gem_version
6
+ Gem::Version.new VERSION::STRING
7
+ end
8
+
9
+ module VERSION
10
+ # Semantic versioning
11
+ MAJOR = 0
12
+ MINOR = 4
13
+ TINY = 1
14
+ PRE = nil
15
+
16
+ # Full version number
17
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
18
+ end
19
+ end
20
+ end
@@ -1,6 +1,8 @@
1
- require "doorkeeper-jwt/version"
2
- require "doorkeeper-jwt/config"
3
- require 'jwt'
1
+ # frozen_string_literal: true
2
+
3
+ require "doorkeeper/jwt/version"
4
+ require "doorkeeper/jwt/config"
5
+ require "jwt"
4
6
 
5
7
  module Doorkeeper
6
8
  module JWT
@@ -17,11 +19,11 @@ module Doorkeeper
17
19
  private
18
20
 
19
21
  def token_payload(opts = {})
20
- Doorkeeper::JWT.configuration.token_payload.call opts
22
+ Doorkeeper::JWT.configuration.token_payload.call(opts)
21
23
  end
22
24
 
23
25
  def token_headers(opts = {})
24
- Doorkeeper::JWT.configuration.token_headers.call opts
26
+ Doorkeeper::JWT.configuration.token_headers.call(opts)
25
27
  end
26
28
 
27
29
  def secret_key(opts)
@@ -31,6 +33,7 @@ module Doorkeeper
31
33
  return secret_key_file unless secret_key_file.nil?
32
34
  return rsa_key if rsa_encryption?
33
35
  return ecdsa_key if ecdsa_encryption?
36
+
34
37
  Doorkeeper::JWT.configuration.secret_key
35
38
  end
36
39
 
@@ -41,7 +44,8 @@ module Doorkeeper
41
44
  end
42
45
 
43
46
  def encryption_method
44
- return nil unless Doorkeeper::JWT.configuration.encryption_method
47
+ return "none" unless Doorkeeper::JWT.configuration.encryption_method
48
+
45
49
  Doorkeeper::JWT.configuration.encryption_method.to_s.upcase
46
50
  end
47
51
 
@@ -51,17 +55,32 @@ module Doorkeeper
51
55
 
52
56
  def application_secret(opts)
53
57
  if opts[:application].nil?
54
- fail "JWT `use_application_secret` is enabled but application is " \
55
- "nil. This can happen if `client_id` was absent in the request " \
56
- "params."
58
+ raise(
59
+ "JWT `use_application_secret` is enabled, but application is nil." \
60
+ " This can happen if `client_id` was absent in the request params."
61
+ )
57
62
  end
58
63
 
59
- if opts[:application][:secret].nil?
60
- fail "JWT `use_application_secret` is enabled but the application " \
61
- "secret is nil."
64
+ secret = if opts[:application].respond_to?(:plaintext_secret)
65
+ unless opts[:application].secret_strategy.allows_restoring_secrets?
66
+ raise(
67
+ "JWT `use_application_secret` is enabled, but secret strategy " \
68
+ "doesn't allow plaintext secret restoring"
69
+ )
70
+ end
71
+ opts[:application].plaintext_secret
72
+ else
73
+ opts[:application][:secret]
74
+ end
75
+
76
+ if secret.nil?
77
+ raise(
78
+ "JWT `use_application_secret` is enabled, but the application" \
79
+ " secret is nil."
80
+ )
62
81
  end
63
82
 
64
- opts[:application][:secret]
83
+ secret
65
84
  end
66
85
 
67
86
  def rsa_encryption?
metadata CHANGED
@@ -1,109 +1,92 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doorkeeper-jwt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Warren
8
+ - Nikita Bulai
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2017-06-08 00:00:00.000000000 Z
12
+ date: 2022-02-23 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: jwt
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 1.5.2
20
18
  - - ">="
21
19
  - !ruby/object:Gem::Version
22
- version: 1.5.2
20
+ version: '2.1'
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
24
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: 1.5.2
30
25
  - - ">="
31
26
  - !ruby/object:Gem::Version
32
- version: 1.5.2
27
+ version: '2.1'
33
28
  - !ruby/object:Gem::Dependency
34
29
  name: bundler
35
30
  requirement: !ruby/object:Gem::Requirement
36
31
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '1.8'
40
32
  - - ">="
41
33
  - !ruby/object:Gem::Version
42
- version: '1.8'
34
+ version: '1.16'
35
+ - - "<"
36
+ - !ruby/object:Gem::Version
37
+ version: '3'
43
38
  type: :development
44
39
  prerelease: false
45
40
  version_requirements: !ruby/object:Gem::Requirement
46
41
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '1.8'
50
42
  - - ">="
51
43
  - !ruby/object:Gem::Version
52
- version: '1.8'
44
+ version: '1.16'
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '3'
53
48
  - !ruby/object:Gem::Dependency
54
- name: rake
49
+ name: pry
55
50
  requirement: !ruby/object:Gem::Requirement
56
51
  requirements:
57
52
  - - "~>"
58
53
  - !ruby/object:Gem::Version
59
- version: '10.0'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '10.0'
54
+ version: '0'
63
55
  type: :development
64
56
  prerelease: false
65
57
  version_requirements: !ruby/object:Gem::Requirement
66
58
  requirements:
67
59
  - - "~>"
68
60
  - !ruby/object:Gem::Version
69
- version: '10.0'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: '10.0'
61
+ version: '0'
73
62
  - !ruby/object:Gem::Dependency
74
- name: rspec
63
+ name: rake
75
64
  requirement: !ruby/object:Gem::Requirement
76
65
  requirements:
77
66
  - - "~>"
78
67
  - !ruby/object:Gem::Version
79
- version: 3.2.0
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '3.2'
68
+ version: '13.0'
83
69
  type: :development
84
70
  prerelease: false
85
71
  version_requirements: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 3.2.0
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: '3.2'
75
+ version: '13.0'
93
76
  - !ruby/object:Gem::Dependency
94
- name: pry
77
+ name: rspec
95
78
  requirement: !ruby/object:Gem::Requirement
96
79
  requirements:
97
80
  - - "~>"
98
81
  - !ruby/object:Gem::Version
99
- version: '0'
82
+ version: '3.8'
100
83
  type: :development
101
84
  prerelease: false
102
85
  version_requirements: !ruby/object:Gem::Requirement
103
86
  requirements:
104
87
  - - "~>"
105
88
  - !ruby/object:Gem::Version
106
- version: '0'
89
+ version: '3.8'
107
90
  description: JWT token generator extension for Doorkeeper
108
91
  email:
109
92
  - chris@expectless.com
@@ -111,9 +94,12 @@ executables: []
111
94
  extensions: []
112
95
  extra_rdoc_files: []
113
96
  files:
97
+ - ".github/dependabot.yml"
98
+ - ".github/workflows/ci.yml"
114
99
  - ".gitignore"
100
+ - ".hound.yml"
115
101
  - ".rspec"
116
- - ".travis.yml"
102
+ - ".rubocop.yml"
117
103
  - CHANGELOG.md
118
104
  - Gemfile
119
105
  - LICENSE.txt
@@ -122,10 +108,9 @@ files:
122
108
  - bin/console
123
109
  - bin/setup
124
110
  - doorkeeper-jwt.gemspec
125
- - lib/doorkeeper-jwt.rb
126
- - lib/doorkeeper-jwt/config.rb
127
- - lib/doorkeeper-jwt/doorkeeper-jwt.rb
128
- - lib/doorkeeper-jwt/version.rb
111
+ - lib/doorkeeper/jwt.rb
112
+ - lib/doorkeeper/jwt/config.rb
113
+ - lib/doorkeeper/jwt/version.rb
129
114
  homepage: https://github.com/chriswarren/doorkeeper-jwt
130
115
  licenses:
131
116
  - MIT
@@ -145,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
130
  - !ruby/object:Gem::Version
146
131
  version: '0'
147
132
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.6.4
133
+ rubygems_version: 3.0.8
150
134
  signing_key:
151
135
  specification_version: 4
152
136
  summary: JWT token generator for Doorkeeper
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.1
4
- addons:
5
- code_climate:
6
- repo_token: a44faab4cd18aeb4898a374736ac95bbb1de26015e9f53d5c809109e11df1149
@@ -1,137 +0,0 @@
1
- module Doorkeeper
2
- module JWT
3
- class MissingConfiguration < StandardError
4
- def initialize
5
- super('Configuration for doorkeeper-jwt missing.')
6
- end
7
- end
8
-
9
- def self.configure(&block)
10
- @config = Config::Builder.new(&block).build
11
- end
12
-
13
- def self.configuration
14
- @config || (fail MissingConfiguration.new)
15
- end
16
-
17
- class Config
18
- class Builder
19
- def initialize(&block)
20
- @config = Config.new
21
- instance_eval(&block)
22
- end
23
-
24
- def build
25
- @config
26
- end
27
-
28
- def use_application_secret(use_application_secret)
29
- @config.instance_variable_set(
30
- "@use_application_secret",
31
- use_application_secret
32
- )
33
- end
34
-
35
- def secret_key(secret_key)
36
- @config.instance_variable_set('@secret_key', secret_key)
37
- end
38
-
39
- def secret_key_path(secret_key_path)
40
- @config.instance_variable_set('@secret_key_path', secret_key_path)
41
- end
42
-
43
- def encryption_method(encryption_method)
44
- @config.instance_variable_set(
45
- '@encryption_method', encryption_method)
46
- end
47
- end
48
-
49
- module Option
50
- # Defines configuration option
51
- #
52
- # When you call option, it defines two methods. One method will take place
53
- # in the +Config+ class and the other method will take place in the
54
- # +Builder+ class.
55
- #
56
- # The +name+ parameter will set both builder method and config attribute.
57
- # If the +:as+ option is defined, the builder method will be the specified
58
- # option while the config attribute will be the +name+ parameter.
59
- #
60
- # If you want to introduce another level of config DSL you can
61
- # define +builder_class+ parameter.
62
- # Builder should take a block as the initializer parameter and respond to function +build+
63
- # that returns the value of the config attribute.
64
- #
65
- # ==== Options
66
- #
67
- # * [:+as+] Set the builder method that goes inside +configure+ block
68
- # * [+:default+] The default value in case no option was set
69
- #
70
- # ==== Examples
71
- #
72
- # option :name
73
- # option :name, as: :set_name
74
- # option :name, default: 'My Name'
75
- # option :scopes builder_class: ScopesBuilder
76
- #
77
- def option(name, options = {})
78
- attribute = options[:as] || name
79
- attribute_builder = options[:builder_class]
80
-
81
- Builder.instance_eval do
82
- define_method name do |*args, &block|
83
- # TODO: is builder_class option being used?
84
- value = unless attribute_builder
85
- block ? block : args.first
86
- else
87
- attribute_builder.new(&block).build
88
- end
89
-
90
- @config.instance_variable_set(:"@#{attribute}", value)
91
- end
92
- end
93
-
94
- define_method attribute do |*args|
95
- if instance_variable_defined?(:"@#{attribute}")
96
- instance_variable_get(:"@#{attribute}")
97
- else
98
- options[:default]
99
- end
100
- end
101
-
102
- public attribute
103
- end
104
-
105
- def extended(base)
106
- base.send(:private, :option)
107
- end
108
- end
109
-
110
- extend Option
111
-
112
- option :token_payload,
113
- default: proc{ { token: SecureRandom.method(:hex) } }
114
- option :token_headers, default: proc { {} }
115
- option :use_application_secret, default: false
116
- option :secret_key, default: nil
117
- option :secret_key_path, default: nil
118
- option :encryption_method, default: nil
119
-
120
- def use_application_secret
121
- @use_application_secret ||= false
122
- end
123
-
124
- def secret_key
125
- @secret_key ||= nil
126
- end
127
-
128
- def secret_key_path
129
- @secret_key_path ||= nil
130
- end
131
-
132
- def encryption_method
133
- @encryption_method ||= nil
134
- end
135
- end
136
- end
137
- end
@@ -1 +0,0 @@
1
- require "doorkeeper-jwt/version"
@@ -1,5 +0,0 @@
1
- module Doorkeeper
2
- module JWT
3
- VERSION = "0.2.1".freeze
4
- end
5
- end