tiddle 1.5.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +53 -0
- data/.rubocop.yml +67 -9
- data/CHANGELOG.md +26 -0
- data/CONTRIBUTING.md +1 -2
- data/README.md +2 -6
- data/Rakefile +1 -6
- data/gemfiles/rails5.2.gemfile +0 -3
- data/gemfiles/rails6.0.gemfile +0 -3
- data/gemfiles/rails6.1.gemfile +7 -0
- data/gemfiles/rails7.0.gemfile +7 -0
- data/lib/tiddle/model_name.rb +7 -1
- data/lib/tiddle/token_issuer.rb +9 -4
- data/lib/tiddle/version.rb +1 -1
- data/spec/rails_app_active_record/app/controllers/namespaced_users_controller.rb +7 -0
- data/spec/rails_app_active_record/app/models/namespace/namespaced_user.rb +9 -0
- data/spec/rails_app_active_record/config/application.rb +3 -2
- data/spec/rails_app_active_record/config/boot.rb +1 -1
- data/spec/rails_app_active_record/config/environment.rb +1 -1
- data/spec/rails_app_active_record/config/routes.rb +2 -0
- data/spec/rails_app_active_record/db/migrate/20150217000000_create_tables.rb +23 -7
- data/spec/rails_app_mongoid/app/controllers/namespaced_users_controller.rb +7 -0
- data/spec/rails_app_mongoid/app/models/authentication_token.rb +1 -0
- data/spec/rails_app_mongoid/app/models/namespace/namespaced_user.rb +4 -0
- data/spec/rails_app_mongoid/app/models/user.rb +1 -1
- data/spec/rails_app_mongoid/config/application.rb +2 -2
- data/spec/rails_app_mongoid/config/boot.rb +1 -1
- data/spec/rails_app_mongoid/config/environment.rb +1 -1
- data/spec/rails_app_mongoid/config/routes.rb +2 -0
- data/spec/spec_helper.rb +0 -5
- data/spec/strategy_spec.rb +33 -12
- data/spec/support/backend.rb +2 -7
- data/spec/support/fake_request.rb +1 -3
- data/spec/tiddle_spec.rb +5 -0
- data/tiddle.gemspec +5 -6
- metadata +22 -31
- data/.travis.yml +0 -27
- data/Appraisals +0 -17
- data/Gemfile +0 -6
- data/gemfiles/rails4.2.gemfile +0 -10
- data/spec/support/warningless_get.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a348d248985933eddf79f194679aa3c1ee6724006f3386a88d143efff7080b0d
|
4
|
+
data.tar.gz: 36f11c54b9cb1829fbbe07e200f404bb8958265582854dd71583a4f90565ef4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2001e1d59b7fe3596dd7727477e3315f7bc91d4725653ace774bdce0804dd11dceded3908d8be15bf05f8bbcb30e29b90ea8e99366069e693e2eb1ed7526960
|
7
|
+
data.tar.gz: 34064918737c1c9d1da935488fee01b711823cedc9c5b7ccfd411b30a94390b241ca7a9f6106ecb8c9acb7a6847a475ad2f9930a431d39417a495e7a9a4df812
|
@@ -0,0 +1,53 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [main]
|
6
|
+
pull_request:
|
7
|
+
branches: [main]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
gemfile:
|
15
|
+
- rails5.2
|
16
|
+
- rails6.0
|
17
|
+
- rails6.1
|
18
|
+
- rails7.0
|
19
|
+
ruby:
|
20
|
+
- "2.7"
|
21
|
+
- "3.0"
|
22
|
+
- "3.1"
|
23
|
+
backend:
|
24
|
+
- active_record
|
25
|
+
- mongoid
|
26
|
+
exclude:
|
27
|
+
- gemfile: rails5.2
|
28
|
+
ruby: "3.0"
|
29
|
+
- gemfile: rails5.2
|
30
|
+
ruby: "3.1"
|
31
|
+
- gemfile: rails6.0
|
32
|
+
ruby: "3.1"
|
33
|
+
- gemfile: rails6.1
|
34
|
+
ruby: "3.1"
|
35
|
+
name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}, ${{ matrix.backend }}
|
36
|
+
runs-on: ubuntu-latest
|
37
|
+
env:
|
38
|
+
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
|
39
|
+
BACKEND: ${{ matrix.backend }}
|
40
|
+
|
41
|
+
steps:
|
42
|
+
- uses: actions/checkout@v2
|
43
|
+
- name: Set up Ruby
|
44
|
+
uses: ruby/setup-ruby@v1
|
45
|
+
with:
|
46
|
+
bundler-cache: true
|
47
|
+
ruby-version: ${{ matrix.ruby }}
|
48
|
+
- name: Start MongoDB
|
49
|
+
uses: supercharge/mongodb-github-action@1.3.0
|
50
|
+
if: ${{ matrix.backend == 'mongoid' }}
|
51
|
+
- name: Run tests
|
52
|
+
run: |
|
53
|
+
bundle exec rake spec
|
data/.rubocop.yml
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 2.
|
2
|
+
TargetRubyVersion: 2.6
|
3
3
|
Include:
|
4
|
-
- 'lib'
|
5
|
-
- 'spec'
|
4
|
+
- 'lib/**/*.rb'
|
5
|
+
- 'spec/**/*.rb'
|
6
6
|
Exclude:
|
7
7
|
- 'spec/rails_app/**/*'
|
8
8
|
- 'spec/spec_helper.rb'
|
9
|
+
- 'vendor/bundle/**/*'
|
10
|
+
SuggestExtensions: false
|
9
11
|
Style/StringLiterals:
|
10
12
|
Enabled: false
|
11
13
|
Style/Documentation:
|
@@ -14,17 +16,73 @@ Style/FrozenStringLiteralComment:
|
|
14
16
|
Enabled: false
|
15
17
|
Style/SignalException:
|
16
18
|
Enabled: false
|
17
|
-
|
19
|
+
Layout/LineLength:
|
18
20
|
Max: 100
|
19
21
|
Gemspec/OrderedDependencies:
|
20
22
|
Enabled: false
|
21
|
-
Naming/FileName:
|
22
|
-
Exclude:
|
23
|
-
- 'Rakefile'
|
24
|
-
- 'Gemfile'
|
25
|
-
- 'Appraisals'
|
26
23
|
Metrics/BlockLength:
|
27
24
|
Exclude:
|
28
25
|
- 'spec/**/*'
|
29
26
|
Metrics/MethodLength:
|
30
27
|
Max: 15
|
28
|
+
|
29
|
+
Gemspec/DateAssignment:
|
30
|
+
Enabled: true
|
31
|
+
Layout/SpaceBeforeBrackets:
|
32
|
+
Enabled: true
|
33
|
+
Lint/AmbiguousAssignment:
|
34
|
+
Enabled: true
|
35
|
+
Lint/DeprecatedConstants:
|
36
|
+
Enabled: true
|
37
|
+
Lint/DuplicateBranch:
|
38
|
+
Enabled: true
|
39
|
+
Lint/DuplicateRegexpCharacterClassElement:
|
40
|
+
Enabled: true
|
41
|
+
Lint/EmptyBlock:
|
42
|
+
Enabled: true
|
43
|
+
Lint/EmptyClass:
|
44
|
+
Enabled: true
|
45
|
+
Lint/LambdaWithoutLiteralBlock:
|
46
|
+
Enabled: true
|
47
|
+
Lint/NoReturnInBeginEndBlocks:
|
48
|
+
Enabled: true
|
49
|
+
Lint/NumberedParameterAssignment:
|
50
|
+
Enabled: true
|
51
|
+
Lint/OrAssignmentToConstant:
|
52
|
+
Enabled: true
|
53
|
+
Lint/RedundantDirGlobSort:
|
54
|
+
Enabled: true
|
55
|
+
Lint/SymbolConversion:
|
56
|
+
Enabled: true
|
57
|
+
Lint/ToEnumArguments:
|
58
|
+
Enabled: true
|
59
|
+
Lint/TripleQuotes:
|
60
|
+
Enabled: true
|
61
|
+
Lint/UnexpectedBlockArity:
|
62
|
+
Enabled: true
|
63
|
+
Lint/UnmodifiedReduceAccumulator:
|
64
|
+
Enabled: true
|
65
|
+
Style/ArgumentsForwarding:
|
66
|
+
Enabled: true
|
67
|
+
Style/CollectionCompact:
|
68
|
+
Enabled: true
|
69
|
+
Style/DocumentDynamicEvalDefinition:
|
70
|
+
Enabled: true
|
71
|
+
Style/EndlessMethod:
|
72
|
+
Enabled: true
|
73
|
+
Style/HashConversion:
|
74
|
+
Enabled: true
|
75
|
+
Style/HashExcept:
|
76
|
+
Enabled: true
|
77
|
+
Style/IfWithBooleanLiteralBranches:
|
78
|
+
Enabled: true
|
79
|
+
Style/NegatedIfElseCondition:
|
80
|
+
Enabled: true
|
81
|
+
Style/NilLambda:
|
82
|
+
Enabled: true
|
83
|
+
Style/RedundantArgument:
|
84
|
+
Enabled: true
|
85
|
+
Style/StringChars:
|
86
|
+
Enabled: true
|
87
|
+
Style/SwapValues:
|
88
|
+
Enabled: true
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
### 1.7.1
|
2
|
+
|
3
|
+
Fix invalid headers generated when model is namespaced (Ariel Agne da Silveira)
|
4
|
+
|
5
|
+
Add Rails 7.0 support
|
6
|
+
|
7
|
+
Add Ruby 3.1 support
|
8
|
+
|
9
|
+
Remove Ruby 2.6 support
|
10
|
+
|
11
|
+
### 1.7.0
|
12
|
+
|
13
|
+
Add ability to track additional info in tokens (Marcelo Silveira)
|
14
|
+
|
15
|
+
Remove Ruby 2.5 support
|
16
|
+
|
17
|
+
### 1.6.0
|
18
|
+
|
19
|
+
Add Rails 6.1 support
|
20
|
+
|
21
|
+
Add Ruby 3.0 support
|
22
|
+
|
23
|
+
Remove Rails 4.2 support
|
24
|
+
|
25
|
+
Remove Ruby 2.4 support
|
26
|
+
|
1
27
|
### 1.5.0
|
2
28
|
|
3
29
|
Add Rails 6 support
|
data/CONTRIBUTING.md
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
# Tiddle
|
2
2
|
|
3
|
-
[](https://travis-ci.org/adamniedzielski/tiddle)
|
4
|
-
[](https://coveralls.io/r/adamniedzielski/tiddle?branch=master)
|
5
|
-
[](https://codeclimate.com/github/adamniedzielski/tiddle)
|
6
|
-
|
7
3
|
Tiddle provides Devise strategy for token authentication in API-only Ruby on Rails applications. Its main feature is **support for multiple tokens per user**.
|
8
4
|
|
9
5
|
Tiddle is lightweight and non-configurable. It does what it has to do and leaves some manual implementation to you.
|
@@ -85,7 +81,7 @@ end
|
|
85
81
|
|
86
82
|
5) Send ```X-USER-EMAIL``` and ```X-USER-TOKEN``` as headers of every request which requires authentication.
|
87
83
|
|
88
|
-
You can read more in a blog post dedicated to Tiddle -
|
84
|
+
You can read more in a blog post dedicated to Tiddle - https://blog.sundaycoding.com/blog/2015/04/04/token-authentication-with-tiddle/
|
89
85
|
|
90
86
|
## Note on Rails session
|
91
87
|
|
@@ -95,7 +91,7 @@ The safest solution in API-only application is not to rely on Rails session at a
|
|
95
91
|
config.middleware.delete ActionDispatch::Session::CookieStore
|
96
92
|
```
|
97
93
|
|
98
|
-
More:
|
94
|
+
More: https://blog.sundaycoding.com/blog/2015/04/04/token-authentication-with-tiddle/#rails-session
|
99
95
|
|
100
96
|
## Using field other than email
|
101
97
|
|
data/Rakefile
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require 'rspec/core/rake_task'
|
3
3
|
require 'rubocop/rake_task'
|
4
|
-
require 'appraisal'
|
5
4
|
|
6
5
|
RSpec::Core::RakeTask.new(spec: :rubocop)
|
7
6
|
RuboCop::RakeTask.new(:rubocop)
|
8
7
|
|
9
|
-
|
10
|
-
task default: :appraisal
|
11
|
-
else
|
12
|
-
task default: :spec
|
13
|
-
end
|
8
|
+
task default: :spec
|
data/gemfiles/rails5.2.gemfile
CHANGED
data/gemfiles/rails6.0.gemfile
CHANGED
data/lib/tiddle/model_name.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
module Tiddle
|
2
2
|
class ModelName
|
3
3
|
def with_underscores(model)
|
4
|
-
model.
|
4
|
+
colon_to_underscore(model).underscore.upcase
|
5
5
|
end
|
6
6
|
|
7
7
|
def with_dashes(model)
|
8
8
|
with_underscores(model).dasherize
|
9
9
|
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def colon_to_underscore(model)
|
14
|
+
model.model_name.to_s.tr(':', '_')
|
15
|
+
end
|
10
16
|
end
|
11
17
|
end
|
data/lib/tiddle/token_issuer.rb
CHANGED
@@ -12,12 +12,17 @@ module Tiddle
|
|
12
12
|
self.maximum_tokens_per_user = maximum_tokens_per_user
|
13
13
|
end
|
14
14
|
|
15
|
-
def create_and_return_token(resource, request, expires_in: nil)
|
15
|
+
def create_and_return_token(resource, request, expires_in: nil, metadata: {})
|
16
16
|
token_class = authentication_token_class(resource)
|
17
17
|
token, token_body = Devise.token_generator.generate(token_class, :body)
|
18
18
|
|
19
19
|
resource.authentication_tokens.create!(
|
20
|
-
token_attributes(
|
20
|
+
token_attributes(
|
21
|
+
token_body: token_body,
|
22
|
+
request: request,
|
23
|
+
expires_in: expires_in,
|
24
|
+
metadata: metadata
|
25
|
+
)
|
21
26
|
)
|
22
27
|
|
23
28
|
token
|
@@ -56,13 +61,13 @@ module Tiddle
|
|
56
61
|
end
|
57
62
|
end
|
58
63
|
|
59
|
-
def token_attributes(token_body
|
64
|
+
def token_attributes(token_body:, request:, expires_in:, metadata: {})
|
60
65
|
attributes = {
|
61
66
|
body: token_body,
|
62
67
|
last_used_at: Time.current,
|
63
68
|
ip_address: request.remote_ip,
|
64
69
|
user_agent: request.user_agent
|
65
|
-
}
|
70
|
+
}.merge(metadata)
|
66
71
|
|
67
72
|
if expires_in
|
68
73
|
attributes.merge(expires_in: expires_in)
|
data/lib/tiddle/version.rb
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('boot', __dir__)
|
2
2
|
|
3
3
|
require "active_model/railtie"
|
4
4
|
require "active_record/railtie"
|
5
5
|
require "action_controller/railtie"
|
6
6
|
require "action_view/railtie"
|
7
|
+
require "action_mailer/railtie"
|
7
8
|
|
8
9
|
module RailsApp
|
9
10
|
class Application < Rails::Application
|
10
11
|
config.eager_load = true
|
11
|
-
config.root = File.expand_path('
|
12
|
+
config.root = File.expand_path('..', __dir__)
|
12
13
|
config.consider_all_requests_local = true
|
13
14
|
config.active_record.sqlite3.represent_boolean_as_integer = true if config.active_record.sqlite3
|
14
15
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
ENV['BUNDLE_GEMFILE'] = File.expand_path('
|
1
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../Gemfile', __dir__)
|
2
2
|
require 'bundler/setup'
|
@@ -1,6 +1,8 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
devise_for :users
|
3
3
|
devise_for :admin_users
|
4
|
+
devise_for :namespaced_user, class_name: 'Namespace::NamespacedUser'
|
4
5
|
resources :secrets, only: [:index], defaults: { format: 'json' }
|
5
6
|
resources :long_secrets, only: [:index], defaults: { format: 'json' }
|
7
|
+
resources :namespaced_users, only: [:index], defaults: { format: 'json' }
|
6
8
|
end
|
@@ -1,10 +1,4 @@
|
|
1
|
-
|
2
|
-
ActiveRecord::Migration[4.2]
|
3
|
-
else
|
4
|
-
ActiveRecord::Migration
|
5
|
-
end
|
6
|
-
|
7
|
-
class CreateTables < migration_class
|
1
|
+
class CreateTables < ActiveRecord::Migration[4.2]
|
8
2
|
# rubocop:disable Metrics/AbcSize
|
9
3
|
# rubocop:disable Metrics/MethodLength
|
10
4
|
def change
|
@@ -61,6 +55,28 @@ class CreateTables < migration_class
|
|
61
55
|
t.integer :expires_in, null: false, default: 0
|
62
56
|
t.string :ip_address
|
63
57
|
t.string :user_agent
|
58
|
+
t.string :metadata_attr1
|
59
|
+
|
60
|
+
t.timestamps null: false
|
61
|
+
end
|
62
|
+
|
63
|
+
create_table(:namespaced_users) do |t|
|
64
|
+
## Database authenticatable
|
65
|
+
t.string :email, null: false, default: ""
|
66
|
+
t.string :encrypted_password, null: false, default: ""
|
67
|
+
|
68
|
+
## Recoverable
|
69
|
+
t.string :reset_password_token
|
70
|
+
t.datetime :reset_password_sent_at
|
71
|
+
|
72
|
+
## Trackable
|
73
|
+
t.integer :sign_in_count, default: 0, null: false
|
74
|
+
t.datetime :current_sign_in_at
|
75
|
+
t.datetime :last_sign_in_at
|
76
|
+
t.string :current_sign_in_ip
|
77
|
+
t.string :last_sign_in_ip
|
78
|
+
|
79
|
+
t.string :nick_name
|
64
80
|
|
65
81
|
t.timestamps null: false
|
66
82
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('boot', __dir__)
|
2
2
|
|
3
3
|
require "active_model/railtie"
|
4
4
|
require "active_job/railtie"
|
@@ -9,7 +9,7 @@ require "action_view/railtie"
|
|
9
9
|
module RailsApp
|
10
10
|
class Application < Rails::Application
|
11
11
|
config.eager_load = true
|
12
|
-
config.root = File.expand_path('
|
12
|
+
config.root = File.expand_path('..', __dir__)
|
13
13
|
config.consider_all_requests_local = true
|
14
14
|
end
|
15
15
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
ENV['BUNDLE_GEMFILE'] = File.expand_path('
|
1
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../../Gemfile', __dir__)
|
2
2
|
require 'bundler/setup'
|
@@ -1,6 +1,8 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
devise_for :users
|
3
3
|
devise_for :admin_users
|
4
|
+
devise_for :namespaced_user, class_name: 'Namespace::NamespacedUser'
|
4
5
|
resources :secrets, only: [:index], defaults: { format: 'json' }
|
5
6
|
resources :long_secrets, only: [:index], defaults: { format: 'json' }
|
7
|
+
resources :namespaced_users, only: [:index], defaults: { format: 'json' }
|
6
8
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'simplecov'
|
3
|
-
require 'coveralls'
|
4
3
|
|
5
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
|
6
|
-
SimpleCov::Formatter::HTMLFormatter,
|
7
|
-
Coveralls::SimpleCov::Formatter
|
8
|
-
])
|
9
4
|
SimpleCov.start do
|
10
5
|
add_filter "/spec/"
|
11
6
|
end
|
data/spec/strategy_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it "allows to access endpoints which require authentication" do
|
9
|
-
|
9
|
+
get(
|
10
10
|
secrets_path,
|
11
11
|
headers: {
|
12
12
|
"X-USER-EMAIL" => "test@example.com",
|
@@ -25,7 +25,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
25
25
|
|
26
26
|
it "updates last_used_at field" do
|
27
27
|
expect do
|
28
|
-
|
28
|
+
get(
|
29
29
|
secrets_path,
|
30
30
|
headers: {
|
31
31
|
"X-USER-EMAIL" => "test@example.com",
|
@@ -43,7 +43,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
43
43
|
|
44
44
|
it "does not update last_used_at field" do
|
45
45
|
expect do
|
46
|
-
|
46
|
+
get(
|
47
47
|
secrets_path,
|
48
48
|
headers: {
|
49
49
|
"X-USER-EMAIL" => "test@example.com",
|
@@ -57,7 +57,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
57
57
|
|
58
58
|
context "when email contains uppercase letters" do
|
59
59
|
it "converts email to lower case and authenticates user" do
|
60
|
-
|
60
|
+
get(
|
61
61
|
secrets_path,
|
62
62
|
headers: {
|
63
63
|
"X-USER-EMAIL" => "TEST@example.com",
|
@@ -76,7 +76,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
it "does not allow to access endpoints which require authentication" do
|
79
|
-
|
79
|
+
get(
|
80
80
|
secrets_path,
|
81
81
|
headers: {
|
82
82
|
"X-USER-EMAIL" => "wrong@example.com",
|
@@ -94,7 +94,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
94
94
|
end
|
95
95
|
|
96
96
|
it "does not allow to access endpoints which require authentication" do
|
97
|
-
|
97
|
+
get(
|
98
98
|
secrets_path,
|
99
99
|
headers: {
|
100
100
|
"X-USER-EMAIL" => "test@example.com",
|
@@ -107,7 +107,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
107
107
|
|
108
108
|
context "when no headers are passed" do
|
109
109
|
it "does not allow to access endpoints which require authentication" do
|
110
|
-
|
110
|
+
get secrets_path, headers: {}
|
111
111
|
expect(response.status).to eq 401
|
112
112
|
end
|
113
113
|
end
|
@@ -119,7 +119,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
119
119
|
end
|
120
120
|
|
121
121
|
it "allows to access endpoints which require authentication" do
|
122
|
-
|
122
|
+
get(
|
123
123
|
long_secrets_path,
|
124
124
|
headers: {
|
125
125
|
"X-ADMIN-USER-EMAIL" => "test@example.com",
|
@@ -130,6 +130,27 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
+
context "when the model name is composed of a namespace" do
|
134
|
+
before do
|
135
|
+
@user = Namespace::NamespacedUser.create!(
|
136
|
+
email: "test@example.com",
|
137
|
+
password: "12345678"
|
138
|
+
)
|
139
|
+
@token = Tiddle.create_and_return_token(@user, FakeRequest.new)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "allows to access endpoints which require authentication" do
|
143
|
+
get(
|
144
|
+
namespaced_users_path,
|
145
|
+
headers: {
|
146
|
+
"X-NAMESPACE--NAMESPACED-USER-EMAIL" => "test@example.com",
|
147
|
+
"X-NAMESPACE--NAMESPACED-USER-TOKEN" => @token
|
148
|
+
}
|
149
|
+
)
|
150
|
+
expect(response.status).to eq 200
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
133
154
|
describe "using field other than email" do
|
134
155
|
before do
|
135
156
|
Devise.setup do |config|
|
@@ -152,7 +173,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
152
173
|
|
153
174
|
it "allows to access endpoints which require authentication with valid \
|
154
175
|
nick name and token" do
|
155
|
-
|
176
|
+
get(
|
156
177
|
secrets_path,
|
157
178
|
headers: { "X-USER-NICK-NAME" => "test", "X-USER-TOKEN" => @token }
|
158
179
|
)
|
@@ -168,7 +189,7 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
168
189
|
|
169
190
|
describe "token is not expired" do
|
170
191
|
it "does allow to access endpoints which require authentication" do
|
171
|
-
|
192
|
+
get(
|
172
193
|
secrets_path,
|
173
194
|
headers: {
|
174
195
|
"X-USER-EMAIL" => "test@example.com",
|
@@ -181,12 +202,12 @@ describe "Authentication using Tiddle strategy", type: :request do
|
|
181
202
|
|
182
203
|
describe "token is expired" do
|
183
204
|
before do
|
184
|
-
token = @user.authentication_tokens.
|
205
|
+
token = @user.authentication_tokens.max_by(&:id)
|
185
206
|
token.update_attribute(:last_used_at, 1.month.ago)
|
186
207
|
end
|
187
208
|
|
188
209
|
it "does not allow to access endpoints which require authentication" do
|
189
|
-
|
210
|
+
get(
|
190
211
|
secrets_path,
|
191
212
|
headers: {
|
192
213
|
"X-USER-EMAIL" => "test@example.com",
|
data/spec/support/backend.rb
CHANGED
@@ -23,18 +23,14 @@ module Backend
|
|
23
23
|
# Do initial migration
|
24
24
|
path = File.expand_path("../rails_app_active_record/db/migrate/", File.dirname(__FILE__))
|
25
25
|
|
26
|
-
# rubocop:disable Performance/RegexpMatch
|
27
26
|
if Gem::Requirement.new(">= 6.0.0") =~ Rails.gem_version
|
28
27
|
ActiveRecord::MigrationContext.new(
|
29
28
|
path,
|
30
29
|
ActiveRecord::SchemaMigration
|
31
30
|
).migrate
|
32
|
-
elsif Gem::Requirement.new(">= 5.2.0") =~ Rails.gem_version
|
33
|
-
ActiveRecord::MigrationContext.new(path).migrate
|
34
31
|
else
|
35
|
-
ActiveRecord::
|
32
|
+
ActiveRecord::MigrationContext.new(path).migrate
|
36
33
|
end
|
37
|
-
# rubocop:enable Performance/RegexpMatch
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
@@ -43,12 +39,11 @@ module Backend
|
|
43
39
|
require 'mongoid'
|
44
40
|
require 'devise/orm/mongoid'
|
45
41
|
require 'rails_app_mongoid/config/environment'
|
46
|
-
require 'database_cleaner'
|
42
|
+
require 'database_cleaner-mongoid'
|
47
43
|
end
|
48
44
|
|
49
45
|
def setup_database_cleaner
|
50
46
|
DatabaseCleaner.allow_remote_database_url = true
|
51
|
-
DatabaseCleaner[:mongoid].strategy = :truncation
|
52
47
|
end
|
53
48
|
|
54
49
|
def migrate!
|
data/spec/tiddle_spec.rb
CHANGED
@@ -38,6 +38,11 @@ describe Tiddle do
|
|
38
38
|
FakeRequest.new(user_agent: "Internet Explorer 4.0")
|
39
39
|
expect(@user.authentication_tokens.last.user_agent).to eq "Internet Explorer 4.0"
|
40
40
|
end
|
41
|
+
|
42
|
+
it "saves additional metadata" do
|
43
|
+
Tiddle.create_and_return_token @user, FakeRequest.new, metadata: { metadata_attr1: "abc" }
|
44
|
+
expect(@user.authentication_tokens.last.metadata_attr1).to eq "abc"
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
describe "find_token" do
|
data/tiddle.gemspec
CHANGED
@@ -16,15 +16,14 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
-
spec.required_ruby_version = '>= 2.
|
19
|
+
spec.required_ruby_version = '>= 2.7.0'
|
20
20
|
|
21
21
|
spec.add_dependency "devise", ">= 4.0.0.rc1", "< 5"
|
22
|
-
spec.add_dependency "activerecord", ">=
|
23
|
-
spec.add_development_dependency "rake"
|
22
|
+
spec.add_dependency "activerecord", ">= 5.2.0"
|
23
|
+
spec.add_development_dependency "rake"
|
24
24
|
spec.add_development_dependency "rspec-rails"
|
25
|
-
spec.add_development_dependency "appraisal"
|
26
|
-
spec.add_development_dependency "coveralls"
|
27
25
|
spec.add_development_dependency "simplecov"
|
28
26
|
spec.add_development_dependency "rubocop"
|
29
|
-
spec.add_development_dependency "database_cleaner"
|
27
|
+
spec.add_development_dependency "database_cleaner-active_record"
|
28
|
+
spec.add_development_dependency "database_cleaner-mongoid"
|
30
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tiddle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Niedzielski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|
@@ -36,30 +36,16 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: 5.2.0
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
46
|
+
version: 5.2.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '12.0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '12.0'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: rspec-rails
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
64
50
|
requirements:
|
65
51
|
- - ">="
|
@@ -73,7 +59,7 @@ dependencies:
|
|
73
59
|
- !ruby/object:Gem::Version
|
74
60
|
version: '0'
|
75
61
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
62
|
+
name: rspec-rails
|
77
63
|
requirement: !ruby/object:Gem::Requirement
|
78
64
|
requirements:
|
79
65
|
- - ">="
|
@@ -87,7 +73,7 @@ dependencies:
|
|
87
73
|
- !ruby/object:Gem::Version
|
88
74
|
version: '0'
|
89
75
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
76
|
+
name: simplecov
|
91
77
|
requirement: !ruby/object:Gem::Requirement
|
92
78
|
requirements:
|
93
79
|
- - ">="
|
@@ -101,7 +87,7 @@ dependencies:
|
|
101
87
|
- !ruby/object:Gem::Version
|
102
88
|
version: '0'
|
103
89
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
90
|
+
name: rubocop
|
105
91
|
requirement: !ruby/object:Gem::Requirement
|
106
92
|
requirements:
|
107
93
|
- - ">="
|
@@ -115,7 +101,7 @@ dependencies:
|
|
115
101
|
- !ruby/object:Gem::Version
|
116
102
|
version: '0'
|
117
103
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
104
|
+
name: database_cleaner-active_record
|
119
105
|
requirement: !ruby/object:Gem::Requirement
|
120
106
|
requirements:
|
121
107
|
- - ">="
|
@@ -129,7 +115,7 @@ dependencies:
|
|
129
115
|
- !ruby/object:Gem::Version
|
130
116
|
version: '0'
|
131
117
|
- !ruby/object:Gem::Dependency
|
132
|
-
name: database_cleaner
|
118
|
+
name: database_cleaner-mongoid
|
133
119
|
requirement: !ruby/object:Gem::Requirement
|
134
120
|
requirements:
|
135
121
|
- - ">="
|
@@ -149,21 +135,20 @@ executables: []
|
|
149
135
|
extensions: []
|
150
136
|
extra_rdoc_files: []
|
151
137
|
files:
|
138
|
+
- ".github/workflows/ruby.yml"
|
152
139
|
- ".gitignore"
|
153
140
|
- ".rspec"
|
154
141
|
- ".rubocop.yml"
|
155
|
-
- ".travis.yml"
|
156
|
-
- Appraisals
|
157
142
|
- CHANGELOG.md
|
158
143
|
- CONTRIBUTING.md
|
159
|
-
- Gemfile
|
160
144
|
- LICENSE.txt
|
161
145
|
- README.md
|
162
146
|
- Rakefile
|
163
147
|
- config/locales/en.yml
|
164
|
-
- gemfiles/rails4.2.gemfile
|
165
148
|
- gemfiles/rails5.2.gemfile
|
166
149
|
- gemfiles/rails6.0.gemfile
|
150
|
+
- gemfiles/rails6.1.gemfile
|
151
|
+
- gemfiles/rails7.0.gemfile
|
167
152
|
- lib/tiddle.rb
|
168
153
|
- lib/tiddle/model.rb
|
169
154
|
- lib/tiddle/model_name.rb
|
@@ -173,9 +158,11 @@ files:
|
|
173
158
|
- lib/tiddle/version.rb
|
174
159
|
- spec/rails_app_active_record/app/controllers/application_controller.rb
|
175
160
|
- spec/rails_app_active_record/app/controllers/long_secrets_controller.rb
|
161
|
+
- spec/rails_app_active_record/app/controllers/namespaced_users_controller.rb
|
176
162
|
- spec/rails_app_active_record/app/controllers/secrets_controller.rb
|
177
163
|
- spec/rails_app_active_record/app/models/admin_user.rb
|
178
164
|
- spec/rails_app_active_record/app/models/authentication_token.rb
|
165
|
+
- spec/rails_app_active_record/app/models/namespace/namespaced_user.rb
|
179
166
|
- spec/rails_app_active_record/app/models/user.rb
|
180
167
|
- spec/rails_app_active_record/config/application.rb
|
181
168
|
- spec/rails_app_active_record/config/boot.rb
|
@@ -185,9 +172,11 @@ files:
|
|
185
172
|
- spec/rails_app_active_record/db/migrate/20150217000000_create_tables.rb
|
186
173
|
- spec/rails_app_mongoid/app/controllers/application_controller.rb
|
187
174
|
- spec/rails_app_mongoid/app/controllers/long_secrets_controller.rb
|
175
|
+
- spec/rails_app_mongoid/app/controllers/namespaced_users_controller.rb
|
188
176
|
- spec/rails_app_mongoid/app/controllers/secrets_controller.rb
|
189
177
|
- spec/rails_app_mongoid/app/models/admin_user.rb
|
190
178
|
- spec/rails_app_mongoid/app/models/authentication_token.rb
|
179
|
+
- spec/rails_app_mongoid/app/models/namespace/namespaced_user.rb
|
191
180
|
- spec/rails_app_mongoid/app/models/user.rb
|
192
181
|
- spec/rails_app_mongoid/config/application.rb
|
193
182
|
- spec/rails_app_mongoid/config/boot.rb
|
@@ -199,7 +188,6 @@ files:
|
|
199
188
|
- spec/strategy_spec.rb
|
200
189
|
- spec/support/backend.rb
|
201
190
|
- spec/support/fake_request.rb
|
202
|
-
- spec/support/warningless_get.rb
|
203
191
|
- spec/tiddle_spec.rb
|
204
192
|
- tiddle.gemspec
|
205
193
|
homepage: ''
|
@@ -214,23 +202,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
202
|
requirements:
|
215
203
|
- - ">="
|
216
204
|
- !ruby/object:Gem::Version
|
217
|
-
version: 2.
|
205
|
+
version: 2.7.0
|
218
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
207
|
requirements:
|
220
208
|
- - ">="
|
221
209
|
- !ruby/object:Gem::Version
|
222
210
|
version: '0'
|
223
211
|
requirements: []
|
224
|
-
rubygems_version: 3.1.
|
212
|
+
rubygems_version: 3.1.6
|
225
213
|
signing_key:
|
226
214
|
specification_version: 4
|
227
215
|
summary: Token authentication for Devise which supports multiple tokens per model
|
228
216
|
test_files:
|
229
217
|
- spec/rails_app_active_record/app/controllers/application_controller.rb
|
230
218
|
- spec/rails_app_active_record/app/controllers/long_secrets_controller.rb
|
219
|
+
- spec/rails_app_active_record/app/controllers/namespaced_users_controller.rb
|
231
220
|
- spec/rails_app_active_record/app/controllers/secrets_controller.rb
|
232
221
|
- spec/rails_app_active_record/app/models/admin_user.rb
|
233
222
|
- spec/rails_app_active_record/app/models/authentication_token.rb
|
223
|
+
- spec/rails_app_active_record/app/models/namespace/namespaced_user.rb
|
234
224
|
- spec/rails_app_active_record/app/models/user.rb
|
235
225
|
- spec/rails_app_active_record/config/application.rb
|
236
226
|
- spec/rails_app_active_record/config/boot.rb
|
@@ -240,9 +230,11 @@ test_files:
|
|
240
230
|
- spec/rails_app_active_record/db/migrate/20150217000000_create_tables.rb
|
241
231
|
- spec/rails_app_mongoid/app/controllers/application_controller.rb
|
242
232
|
- spec/rails_app_mongoid/app/controllers/long_secrets_controller.rb
|
233
|
+
- spec/rails_app_mongoid/app/controllers/namespaced_users_controller.rb
|
243
234
|
- spec/rails_app_mongoid/app/controllers/secrets_controller.rb
|
244
235
|
- spec/rails_app_mongoid/app/models/admin_user.rb
|
245
236
|
- spec/rails_app_mongoid/app/models/authentication_token.rb
|
237
|
+
- spec/rails_app_mongoid/app/models/namespace/namespaced_user.rb
|
246
238
|
- spec/rails_app_mongoid/app/models/user.rb
|
247
239
|
- spec/rails_app_mongoid/config/application.rb
|
248
240
|
- spec/rails_app_mongoid/config/boot.rb
|
@@ -254,5 +246,4 @@ test_files:
|
|
254
246
|
- spec/strategy_spec.rb
|
255
247
|
- spec/support/backend.rb
|
256
248
|
- spec/support/fake_request.rb
|
257
|
-
- spec/support/warningless_get.rb
|
258
249
|
- spec/tiddle_spec.rb
|
data/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
branches:
|
3
|
-
only:
|
4
|
-
- master
|
5
|
-
before_install:
|
6
|
-
- gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
|
7
|
-
- gem install bundler -v '< 2'
|
8
|
-
services:
|
9
|
-
- mongodb
|
10
|
-
rvm:
|
11
|
-
- "2.4.6"
|
12
|
-
- "2.5.5"
|
13
|
-
- "2.6.3"
|
14
|
-
- "2.7.1"
|
15
|
-
gemfile:
|
16
|
-
- gemfiles/rails4.2.gemfile
|
17
|
-
- gemfiles/rails5.2.gemfile
|
18
|
-
- gemfiles/rails6.0.gemfile
|
19
|
-
env:
|
20
|
-
- BACKEND=mongoid
|
21
|
-
- BACKEND=active_record
|
22
|
-
jobs:
|
23
|
-
exclude:
|
24
|
-
- rvm: "2.4.6"
|
25
|
-
gemfile: gemfiles/rails6.0.gemfile
|
26
|
-
- rvm: "2.7.1"
|
27
|
-
gemfile: gemfiles/rails4.2.gemfile
|
data/Appraisals
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
appraise "rails4.2" do
|
2
|
-
gem "rails", "~> 4.2.0"
|
3
|
-
gem "mongoid", "~> 5"
|
4
|
-
gem "sqlite3", "~> 1.3.13"
|
5
|
-
end
|
6
|
-
|
7
|
-
appraise "rails5.2" do
|
8
|
-
gem "rails", "~> 5.2.1"
|
9
|
-
gem "mongoid", "~> 6"
|
10
|
-
gem "sqlite3", "~> 1.3.13"
|
11
|
-
end
|
12
|
-
|
13
|
-
appraise "rails6.0" do
|
14
|
-
gem "rails", "~> 6.0.0"
|
15
|
-
gem "mongoid", "~> 7"
|
16
|
-
gem "sqlite3"
|
17
|
-
end
|
data/Gemfile
DELETED
data/gemfiles/rails4.2.gemfile
DELETED