minato-rails-auth 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +40 -0
- data/README.md +139 -0
- data/Rakefile +12 -0
- data/compose.yml +12 -0
- data/lib/minato/rails/auth/configuration.rb +22 -0
- data/lib/minato/rails/auth/jwt/configuration.rb +51 -0
- data/lib/minato/rails/auth/jwt/decode.rb +18 -0
- data/lib/minato/rails/auth/jwt/spec/contexts.rb +69 -0
- data/lib/minato/rails/auth/jwt/user.rb +35 -0
- data/lib/minato/rails/auth/jwt.rb +35 -0
- data/lib/minato/rails/auth/spec.rb +3 -0
- data/lib/minato/rails/auth/version.rb +9 -0
- data/lib/minato/rails/auth.rb +18 -0
- data/lib/object_hash.rb +35 -0
- data/minato-rails-auth.gemspec +41 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f230a5cc5a2ed2896b958555a3d1df46afdb1ff882d7a781b98415e91c47bf31
|
4
|
+
data.tar.gz: c0cda43ffd8b1385efb1fcfba78fd04dece987e19c9882b3b82b9e75b9096fa3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 889f2d69ba35ebdea6e1ff24f2d278977ba907b294678955afc2af748092716c361311914ef2f8e4617e0846d09f405a1675832da9c222ff6989dc3bf78f2da8
|
7
|
+
data.tar.gz: aaeb0db38de916e67427c617325ff610020155ec4a659ccb6de393f79a2fc4d11d81151efb53bc418f27922a7b15fa8391878982f639910162b8a78b30f3f9ff
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-rails
|
3
|
+
- rubocop-rspec
|
4
|
+
- rubocop-rake
|
5
|
+
|
6
|
+
AllCops:
|
7
|
+
DisplayCopNames: true
|
8
|
+
DisplayStyleGuide: true
|
9
|
+
ExtraDetails: false
|
10
|
+
NewCops: enable
|
11
|
+
TargetRubyVersion: 2.7.3
|
12
|
+
|
13
|
+
Metrics/BlockLength:
|
14
|
+
AllowedMethods: ['describe', 'it', 'context']
|
15
|
+
Max: 50
|
16
|
+
|
17
|
+
RSpec/EmptyExampleGroup:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
RSpec/ExampleLength:
|
21
|
+
Max: 50
|
22
|
+
|
23
|
+
RSpec/ImplicitExpect:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
RSpec/MultipleExpectations:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
RSpec/VerifiedDoubleReference:
|
30
|
+
EnforcedStyle: string
|
31
|
+
|
32
|
+
Style/Documentation:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
Layout/HashAlignment:
|
36
|
+
EnforcedColonStyle: table
|
37
|
+
EnforcedHashRocketStyle: table
|
38
|
+
|
39
|
+
RSpec/MultipleMemoizedHelpers:
|
40
|
+
Max: 7
|
data/README.md
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
# Minato::Rails::Auth
|
2
|
+
|
3
|
+
Minato Rails Auth is a library designed to be an authentication layer in Rails applications. It has a JWT module, that can be included in Rails Controllers to authenticate requests. And has a RSpec shared contexts, to simplify authentication in automated tests.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
The recommended installation way is by [Gem](https://guides.rubygems.org/rubygems-basics/#installing-gems) or [Bundler](https://bundler.io/):
|
8
|
+
|
9
|
+
### By Gem
|
10
|
+
|
11
|
+
$ gem install minato-rails-auth
|
12
|
+
|
13
|
+
### By Bundler
|
14
|
+
|
15
|
+
$ bundle add minato-rails-auth
|
16
|
+
|
17
|
+
Or just add the following line on your `Gemfile` file:
|
18
|
+
|
19
|
+
gem 'minato-rails-auth'
|
20
|
+
|
21
|
+
And you can specify the version:
|
22
|
+
|
23
|
+
gem 'minato-rails-auth', '~> 0.1.0'
|
24
|
+
|
25
|
+
## Configuration
|
26
|
+
|
27
|
+
To configure the Minato Rails Auth lib on your Rails application, is necessary to follow the steps:
|
28
|
+
|
29
|
+
1. Create a configuration file:
|
30
|
+
|
31
|
+
[rails-app]/config/initializers/minato_rails_auth.rb
|
32
|
+
|
33
|
+
2. Add the following content in the file:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
require 'minato/rails/auth'
|
37
|
+
|
38
|
+
Minato::Rails::Auth.configure do |conf|
|
39
|
+
conf.jwt.issuer = Settings.api.secure.issuer
|
40
|
+
conf.jwt.jwks_uri = Settings.api.secure.jwks_uri
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
- Each option specs:
|
45
|
+
|
46
|
+
- `conf.jwt`
|
47
|
+
- stores all jwt configuration
|
48
|
+
- `conf.jwt.issuer`
|
49
|
+
- example: 'http://localhost'
|
50
|
+
- is the jwt issuer, when the system uses Ory, it's the gateway host
|
51
|
+
- `conf.jwt.jwks_uri`
|
52
|
+
- example: 'http://localhost:4456/.well-known/jwks.json'
|
53
|
+
- is the jwks obtetion uri, when the system uses Ory, it's the direct gateway host
|
54
|
+
- `conf.jwt.jwks`
|
55
|
+
- default: nil
|
56
|
+
- this is the jwks data, if this is specified it will not be necessary the conf.jwt.jwks_uri attribute
|
57
|
+
- `conf.jwt.algorithms`
|
58
|
+
- default: 'RS256'
|
59
|
+
- alghorithm used to decode the jwt
|
60
|
+
- `conf.jwt.verify_iss`
|
61
|
+
- default: true
|
62
|
+
- this specify if the issuer should be checked
|
63
|
+
- `conf.jwt.verify_token_signature`
|
64
|
+
- default: true
|
65
|
+
- this specify if the token signature should be checked
|
66
|
+
- `conf.jwt.hmac_secret`
|
67
|
+
- default: nil
|
68
|
+
- hmac secret, is necessary only in HMAC algorithms
|
69
|
+
- `conf.jwt.additional_params`
|
70
|
+
- default: {}
|
71
|
+
- is JWT.decode additional options
|
72
|
+
- docs: https://github.com/jwt/ruby-jwt/blob/main/README.md
|
73
|
+
|
74
|
+
And now, the library was configured in your Rails application.
|
75
|
+
|
76
|
+
## Usage
|
77
|
+
|
78
|
+
### Auth system
|
79
|
+
|
80
|
+
To add the JWT authentication system in your Rails application, just follow the steps:
|
81
|
+
|
82
|
+
1. Include the JWT module in your `ApplicationController`:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
class ApplicationController < ActionController::API
|
86
|
+
include Minato::Rails::Auth::JWT
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
2. Now it is available the method `authenticate_request!` in your controllers, and you can call it when you want to auth a controller:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
class FooController < ApplicationController
|
94
|
+
before_action :authenticate_request!
|
95
|
+
end
|
96
|
+
```
|
97
|
+
|
98
|
+
3. Now the variable `current_user` is availabe in your controller, containing the following methods:
|
99
|
+
|
100
|
+
- `.machine?`
|
101
|
+
- This will return a boolean value that will tell you if the client is a machine or not
|
102
|
+
|
103
|
+
- `.human?`
|
104
|
+
- This works like the `.machine?` method, but tells you if the client is human.
|
105
|
+
|
106
|
+
- `.session`
|
107
|
+
- This returns a hash with the JWT payload, if the client is human.
|
108
|
+
|
109
|
+
- `.machine`
|
110
|
+
- This returns a string with the machine name, when the client is a machine.
|
111
|
+
|
112
|
+
### Testing tools
|
113
|
+
|
114
|
+
The Minato Rails Auth makes available the RSpec shared contexts, to make it available you can include the module in your `[rails-app]/spec/spec_helper.rb`:
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
require 'minato/rails/auth/spec'
|
118
|
+
```
|
119
|
+
|
120
|
+
And now it will be available the following shared contexts, that you can use following [the docs](https://rspec.info/features/3-12/rspec-core/example-groups/shared-context/):
|
121
|
+
|
122
|
+
- `with jwt authentication`:
|
123
|
+
- Just create a jwt with empty payload. To set the payload you should create a `jwt_payload` variable using `let`.
|
124
|
+
- `with human jwt authentication`:
|
125
|
+
- Creates a jwt with human payload. You set the user attributes with variables `jwt_email`, `jwt_account_id`, `jwt_session_id`, `jwt_identity_id` and `jwt_payload`.
|
126
|
+
- `with machine jwt authentication`:
|
127
|
+
- Creates a jwt with machine payload. You can set the machine name with the variable `jwt_machine`.
|
128
|
+
- `with missing jwt authentication`:
|
129
|
+
- Raise a `::JWT::VerificationError`, simulating when the user is not authenticated.
|
130
|
+
|
131
|
+
## Development
|
132
|
+
|
133
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
134
|
+
|
135
|
+
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`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
136
|
+
|
137
|
+
## Contributing
|
138
|
+
|
139
|
+
Bug reports and pull requests are welcome on GitLab at https://gitlab.com/ferreri/minato/minato-rails-auth.
|
data/Rakefile
ADDED
data/compose.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'jwt/configuration'
|
4
|
+
require 'active_support'
|
5
|
+
|
6
|
+
module Minato
|
7
|
+
module Rails
|
8
|
+
module Auth
|
9
|
+
class Configuration
|
10
|
+
attr_accessor :jwt
|
11
|
+
|
12
|
+
def initialize(jwt = Auth::JWT::Configuration.new)
|
13
|
+
@jwt = jwt
|
14
|
+
end
|
15
|
+
|
16
|
+
def configure
|
17
|
+
yield(self) if block_given?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'user'
|
4
|
+
require 'active_support'
|
5
|
+
|
6
|
+
module Minato
|
7
|
+
module Rails
|
8
|
+
module Auth
|
9
|
+
module JWT
|
10
|
+
class Configuration
|
11
|
+
attr_accessor :issuer, :jwks_uri, :verify_token_signature, :algorithms, :verify_iss, :hmac_secret,
|
12
|
+
:additional_params
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@verify_token_signature = true
|
16
|
+
@algorithms = 'RS256'
|
17
|
+
@verify_iss = true
|
18
|
+
@hmac_secret = nil
|
19
|
+
@decode_params = nil
|
20
|
+
@additional_params = {}
|
21
|
+
@jwks = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_writer :decode_params, :jwks
|
25
|
+
|
26
|
+
def decode_params
|
27
|
+
return @decode_params.merge(additional_params || {}) if @decode_params.present?
|
28
|
+
|
29
|
+
{
|
30
|
+
algorithms: algorithms,
|
31
|
+
iss: issuer,
|
32
|
+
verify_iss: verify_iss,
|
33
|
+
jwks: jwks
|
34
|
+
}.merge(additional_params || {})
|
35
|
+
end
|
36
|
+
|
37
|
+
def configure
|
38
|
+
yield(self) if block_given?
|
39
|
+
end
|
40
|
+
|
41
|
+
def jwks
|
42
|
+
return @jwks if @jwks.present?
|
43
|
+
|
44
|
+
jwks_raw = Net::HTTP.get URI(jwks_uri)
|
45
|
+
JSON.parse(jwks_raw, symbolize_names: true)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Minato
|
4
|
+
module Rails
|
5
|
+
module Auth
|
6
|
+
module JWT
|
7
|
+
class Decode
|
8
|
+
def self.call(jwt)
|
9
|
+
::JWT.decode(jwt,
|
10
|
+
Auth::CONFIG.jwt.hmac_secret,
|
11
|
+
Auth::CONFIG.jwt.verify_token_signature,
|
12
|
+
Auth::CONFIG.jwt.decode_params).first
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Minato
|
4
|
+
module Rails
|
5
|
+
module Auth
|
6
|
+
module JWT
|
7
|
+
module Contexts
|
8
|
+
RSpec.shared_context 'with jwt authentication', shared_context: :metadata do
|
9
|
+
let(:jwt_payload) do
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
let(:Authorization) { 'Bearer token' }
|
13
|
+
before do
|
14
|
+
allow(Decode).to receive(:call).and_return(jwt_payload)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.shared_context 'with human jwt authentication', shared_context: :metadata do
|
19
|
+
let(:jwt_email) { 'test@email.com' }
|
20
|
+
let(:jwt_account_id) { '555' }
|
21
|
+
let(:jwt_session_id) { '67cf621f-4f49-4ca5-9365-62520849170b' }
|
22
|
+
let(:jwt_identity_id) { 'adb1e688-17c0-4241-bc24-912fa6b5f6c3' }
|
23
|
+
let(:jwt_payload) do
|
24
|
+
{
|
25
|
+
'session' => {
|
26
|
+
'id' => jwt_session_id,
|
27
|
+
'expires_at' => '2021-09-29T20:15:44.731576Z',
|
28
|
+
'identity' => {
|
29
|
+
'id' => jwt_identity_id,
|
30
|
+
'traits' => {
|
31
|
+
'email' => jwt_email
|
32
|
+
},
|
33
|
+
'metadata_public' => {
|
34
|
+
'account_id' => jwt_account_id
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
let(:Authorization) { 'Bearer token' }
|
41
|
+
before do
|
42
|
+
allow(Decode).to receive(:call).and_return(jwt_payload)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
RSpec.shared_context 'with machine jwt authentication', shared_context: :metadata do
|
47
|
+
let(:jwt_machine) { 'foo-svc' }
|
48
|
+
let(:jwt_payload) do
|
49
|
+
{
|
50
|
+
'sub' => jwt_machine
|
51
|
+
}
|
52
|
+
end
|
53
|
+
let(:Authorization) { 'Bearer token' }
|
54
|
+
before do
|
55
|
+
allow(Decode).to receive(:call).and_return(jwt_payload)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
RSpec.shared_context 'with missing jwt authentication', shared_context: :metadata do
|
60
|
+
let(:Authorization) { nil }
|
61
|
+
before do
|
62
|
+
allow(Decode).to receive(:call).and_raise(::JWT::VerificationError)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'object_hash'
|
4
|
+
|
5
|
+
module Minato
|
6
|
+
module Rails
|
7
|
+
module Auth
|
8
|
+
module JWT
|
9
|
+
class User
|
10
|
+
attr_reader :token_payload
|
11
|
+
|
12
|
+
def initialize(token_payload)
|
13
|
+
@token_payload = ObjectHash.new(token_payload)
|
14
|
+
end
|
15
|
+
|
16
|
+
def human?
|
17
|
+
@human ||= @token_payload.respond_to?(:session)
|
18
|
+
end
|
19
|
+
|
20
|
+
def machine?
|
21
|
+
@machine ||= !human?
|
22
|
+
end
|
23
|
+
|
24
|
+
def session
|
25
|
+
@token_payload.session
|
26
|
+
end
|
27
|
+
|
28
|
+
def subject
|
29
|
+
@token_payload.sub
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'jwt/user'
|
4
|
+
require_relative 'configuration'
|
5
|
+
require_relative 'jwt/decode'
|
6
|
+
require 'active_support'
|
7
|
+
require 'net/http'
|
8
|
+
require 'uri'
|
9
|
+
require 'jwt'
|
10
|
+
|
11
|
+
module Minato
|
12
|
+
module Rails
|
13
|
+
module Auth
|
14
|
+
module JWT
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def authenticate_request!
|
20
|
+
@current_user = User.new(auth_token)
|
21
|
+
end
|
22
|
+
|
23
|
+
def http_token
|
24
|
+
return nil if request.headers['Authorization'].blank?
|
25
|
+
|
26
|
+
request.headers['Authorization'].split.last
|
27
|
+
end
|
28
|
+
|
29
|
+
def auth_token
|
30
|
+
@auth_token ||= Decode.call(http_token)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'auth/version'
|
4
|
+
require_relative 'auth/jwt'
|
5
|
+
|
6
|
+
module Minato
|
7
|
+
module Rails
|
8
|
+
module Auth
|
9
|
+
CONFIG = Configuration.new
|
10
|
+
class << self
|
11
|
+
def configure
|
12
|
+
yield(CONFIG) if block_given?
|
13
|
+
CONFIG
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/object_hash.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ObjectHash
|
4
|
+
def initialize(hash)
|
5
|
+
@hash = hash
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_missing(name)
|
9
|
+
find_hash_value(name)
|
10
|
+
end
|
11
|
+
|
12
|
+
def respond_to_missing?(name, include_private = false)
|
13
|
+
return true if @hash.keys.include?(name.to_s)
|
14
|
+
return true if @hash.keys.include?(name.to_sym)
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def find_hash_value(name)
|
22
|
+
value = @hash[name.to_s] || @hash[name.to_sym]
|
23
|
+
return ObjectHash.new(value) if value.instance_of?(Hash)
|
24
|
+
|
25
|
+
if value.instance_of?(Array)
|
26
|
+
return value.map do |item|
|
27
|
+
next ObjectHash.new(item) if item.instance_of?(Hash)
|
28
|
+
|
29
|
+
item
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
value
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/minato/rails/auth/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'minato-rails-auth'
|
7
|
+
spec.version = Minato::Rails::Auth::VERSION
|
8
|
+
spec.authors = ['Ferreri']
|
9
|
+
spec.email = ['contato@ferreri.co']
|
10
|
+
|
11
|
+
spec.summary = 'Minato Rails Auth'
|
12
|
+
spec.description = 'Library to create an authentication layer in Rails applications'
|
13
|
+
spec.homepage = 'https://gitlab.com/ferreri/minato/minato-rails-auth'
|
14
|
+
spec.required_ruby_version = '>= 2.7'
|
15
|
+
|
16
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
17
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
18
|
+
spec.metadata['changelog_uri'] = 'https://gitlab.com/ferreri/minato/minato-rails-auth/-/commits/main?ref_type=heads'
|
19
|
+
|
20
|
+
# Specify which files should be added to the gem when it is released.
|
21
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
22
|
+
spec.files = Dir.chdir(__dir__) do
|
23
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
24
|
+
(File.expand_path(f) == __FILE__) ||
|
25
|
+
f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
spec.bindir = 'exe'
|
29
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
30
|
+
spec.require_paths = ['lib']
|
31
|
+
|
32
|
+
spec.add_dependency 'activesupport', '~> 7.0.4'
|
33
|
+
spec.add_dependency 'jwt', '~> 2.9'
|
34
|
+
|
35
|
+
# Uncomment to register a new dependency of your gem
|
36
|
+
# spec.add_dependency "example-gem", "~> 1.0"
|
37
|
+
|
38
|
+
# For more information and examples about making a new gem, check out our
|
39
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
40
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minato-rails-auth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ferreri
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-10-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 7.0.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 7.0.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jwt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.9'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.9'
|
41
|
+
description: Library to create an authentication layer in Rails applications
|
42
|
+
email:
|
43
|
+
- contato@ferreri.co
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".rspec"
|
49
|
+
- ".rubocop.yml"
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
52
|
+
- compose.yml
|
53
|
+
- lib/minato/rails/auth.rb
|
54
|
+
- lib/minato/rails/auth/configuration.rb
|
55
|
+
- lib/minato/rails/auth/jwt.rb
|
56
|
+
- lib/minato/rails/auth/jwt/configuration.rb
|
57
|
+
- lib/minato/rails/auth/jwt/decode.rb
|
58
|
+
- lib/minato/rails/auth/jwt/spec/contexts.rb
|
59
|
+
- lib/minato/rails/auth/jwt/user.rb
|
60
|
+
- lib/minato/rails/auth/spec.rb
|
61
|
+
- lib/minato/rails/auth/version.rb
|
62
|
+
- lib/object_hash.rb
|
63
|
+
- minato-rails-auth.gemspec
|
64
|
+
homepage: https://gitlab.com/ferreri/minato/minato-rails-auth
|
65
|
+
licenses: []
|
66
|
+
metadata:
|
67
|
+
homepage_uri: https://gitlab.com/ferreri/minato/minato-rails-auth
|
68
|
+
source_code_uri: https://gitlab.com/ferreri/minato/minato-rails-auth
|
69
|
+
changelog_uri: https://gitlab.com/ferreri/minato/minato-rails-auth/-/commits/main?ref_type=heads
|
70
|
+
rubygems_mfa_required: 'true'
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '2.7'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubygems_version: 3.1.6
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Minato Rails Auth
|
90
|
+
test_files: []
|