omniauth-multipassword 0.3.0 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +12 -0
- data/.github/workflows/test.yml +46 -0
- data/.rspec +1 -0
- data/.rubocop.yml +10 -0
- data/.travis.yml +10 -0
- data/CHANGELOG.md +18 -0
- data/Gemfile +16 -0
- data/README.md +5 -1
- data/Rakefile +7 -2
- data/lib/omniauth/multipassword/base.rb +16 -8
- data/lib/omniauth/multipassword/version.rb +5 -3
- data/lib/omniauth/strategies/multi_password.rb +20 -15
- data/lib/omniauth-multipassword.rb +5 -3
- data/omniauth-multipassword.gemspec +18 -11
- data/spec/omniauth/multipassword/base_spec.rb +72 -0
- data/spec/omniauth/strategy/multi_password_spec.rb +44 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/strategies.rb +27 -0
- metadata +32 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4c42cc59feffb560101a1ca960ea75b5099054097dc688570f814fde8a07d33a
|
4
|
+
data.tar.gz: d8a94787d62f2d9ab2a8435cbaa81d087a4a2332e703a560fa907e3da0c9f9d5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: caef3ce2da16ace112cb73c2f178fb3909ad5fe184f57912cc0ae50622511e6f581638c0f4ab79d84c39229486b2114cc4799d47ba1057e02129392f892e4173
|
7
|
+
data.tar.gz: 2bb20ced2304ba9496012e1b186619b7149fc4c19265b013305afb1ce68a3c76b12fa1d7300432f38851fe6d7e1c7fa21225f337b227da89662b47ace17d9937
|
data/.editorconfig
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
name: test
|
3
|
+
on: push
|
4
|
+
jobs:
|
5
|
+
rspec:
|
6
|
+
name: "Ruby ${{ matrix.ruby }}"
|
7
|
+
runs-on: ubuntu-20.04
|
8
|
+
|
9
|
+
strategy:
|
10
|
+
fail-fast: false
|
11
|
+
matrix:
|
12
|
+
ruby:
|
13
|
+
- "3.0"
|
14
|
+
- "2.7"
|
15
|
+
- "2.6"
|
16
|
+
- "2.5"
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@master
|
20
|
+
- uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: ${{ matrix.ruby }}
|
23
|
+
bundler-cache: True
|
24
|
+
env:
|
25
|
+
BUNDLE_WITHOUT: development
|
26
|
+
BUNDLE_JOBS: 4
|
27
|
+
BUNDLE_RETRY: 3
|
28
|
+
|
29
|
+
- run: bundle exec rspec --color
|
30
|
+
|
31
|
+
rubocop:
|
32
|
+
name: rubocop
|
33
|
+
runs-on: ubuntu-20.04
|
34
|
+
|
35
|
+
steps:
|
36
|
+
- uses: actions/checkout@master
|
37
|
+
- uses: ruby/setup-ruby@v1
|
38
|
+
with:
|
39
|
+
ruby-version: 3.0
|
40
|
+
bundler-cache: True
|
41
|
+
env:
|
42
|
+
BUNDLE_WITHOUT: development
|
43
|
+
BUNDLE_JOBS: 4
|
44
|
+
BUNDLE_RETRY: 3
|
45
|
+
|
46
|
+
- run: bundle exec rubocop --parallel --fail-level E
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--backtrace
|
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a Changelog](http://keepachangelog.com/).
|
5
|
+
|
6
|
+
## Unreleased
|
7
|
+
---
|
8
|
+
|
9
|
+
### New
|
10
|
+
|
11
|
+
### Changes
|
12
|
+
|
13
|
+
### Fixes
|
14
|
+
|
15
|
+
### Breaks
|
16
|
+
* Updated strategy to OmniAuth >= 2.0
|
17
|
+
|
18
|
+
|
data/Gemfile
CHANGED
@@ -1,4 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in omniauth-multipassword.gemspec
|
4
6
|
gemspec
|
7
|
+
|
8
|
+
gem 'rake'
|
9
|
+
gem 'rake-release'
|
10
|
+
|
11
|
+
group :test do
|
12
|
+
gem 'rack-test'
|
13
|
+
|
14
|
+
gem 'rspec', '~> 3.0'
|
15
|
+
|
16
|
+
gem 'codecov', require: false
|
17
|
+
gem 'simplecov', require: false
|
18
|
+
|
19
|
+
gem 'my-rubocop', github: 'jgraichen/my-rubocop', ref: 'v2'
|
20
|
+
end
|
data/README.md
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# Omniauth::Multipassword
|
2
2
|
|
3
|
+
[![Build Status](https://travis-ci.org/jgraichen/omniauth-multipassword.svg?branch=master)](https://travis-ci.org/jgraichen/omniauth-multipassword)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/jgraichen/omniauth-multipassword/badges/gpa.svg)](https://codeclimate.com/github/jgraichen/omniauth-multipassword)
|
5
|
+
[![Test Coverage](https://codeclimate.com/github/jgraichen/omniauth-multipassword/badges/coverage.svg)](https://codeclimate.com/github/jgraichen/omniauth-multipassword/coverage)
|
6
|
+
|
3
7
|
**omniauth-multipassword** is a [OmniAuth](https://github.com/intridea/omniauth)
|
4
|
-
strategy that allows to authenticate
|
8
|
+
strategy that allows to authenticate again different password strategies at once.
|
5
9
|
|
6
10
|
|
7
11
|
## Installation
|
data/Rakefile
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module OmniAuth
|
2
4
|
module MultiPassword
|
3
5
|
module Base
|
4
6
|
def self.included(base)
|
5
7
|
base.class_eval do
|
6
|
-
option :title,
|
7
|
-
option :fields, [
|
8
|
+
option :title, 'Restricted Access'
|
9
|
+
option :fields, %i[username password]
|
8
10
|
|
9
|
-
uid
|
11
|
+
uid { username }
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
15
|
def username_id
|
14
|
-
options[:fields][0] ||
|
16
|
+
options[:fields][0] || 'username'
|
15
17
|
end
|
16
18
|
|
17
19
|
def password_id
|
18
|
-
options[:fields][1] ||
|
20
|
+
options[:fields][1] || 'password'
|
19
21
|
end
|
20
22
|
|
21
23
|
def username
|
@@ -37,12 +39,18 @@ module OmniAuth
|
|
37
39
|
end
|
38
40
|
|
39
41
|
def request_phase
|
40
|
-
OmniAuth::Form.build(:
|
41
|
-
f.text_field
|
42
|
-
f.password_field
|
42
|
+
OmniAuth::Form.build(title: options.title, url: callback_url) do |f|
|
43
|
+
f.text_field 'Username', username_id
|
44
|
+
f.password_field 'Password', password_id
|
43
45
|
end.to_response
|
44
46
|
end
|
45
47
|
|
48
|
+
def other_phase
|
49
|
+
# OmniAuth, by default, disables "GET" requests for security reasons.
|
50
|
+
# This effectively disables showing a password form on a GET request to
|
51
|
+
# the `request_phase`. Instead, we hook the GET requests here.
|
52
|
+
return request_phase if on_request_path?
|
53
|
+
end
|
46
54
|
end
|
47
55
|
end
|
48
56
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Omniauth
|
2
4
|
module Multipassword
|
3
5
|
module VERSION
|
4
|
-
MAJOR =
|
5
|
-
MINOR =
|
6
|
+
MAJOR = 2
|
7
|
+
MINOR = 0
|
6
8
|
PATCH = 0
|
7
|
-
STAGE =
|
9
|
+
STAGE = 'rc1'
|
8
10
|
|
9
11
|
def self.to_s
|
10
12
|
[MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join '.'
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'omniauth'
|
4
|
+
require 'omniauth/multipassword/base'
|
3
5
|
|
4
6
|
module OmniAuth
|
5
7
|
module Strategies
|
@@ -8,12 +10,16 @@ module OmniAuth
|
|
8
10
|
include OmniAuth::MultiPassword::Base
|
9
11
|
|
10
12
|
def initialize(app, *args, &block)
|
11
|
-
super(app, *args) do
|
13
|
+
super(app, *args) do
|
14
|
+
# Do pass an empty block, as otherwise the captured block would be
|
15
|
+
# passed to `super`, but this needs to be evaluate inside this
|
16
|
+
# middleware, not omniauth's Rack builder instance.
|
17
|
+
end
|
12
18
|
|
13
|
-
if block.arity
|
14
|
-
instance_eval
|
19
|
+
if block.arity.zero?
|
20
|
+
instance_eval(&block)
|
15
21
|
else
|
16
|
-
|
22
|
+
yield self
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
@@ -25,16 +31,16 @@ module OmniAuth
|
|
25
31
|
def authenticator(klass, *args, &block)
|
26
32
|
unless klass.is_a?(Class)
|
27
33
|
begin
|
28
|
-
klass = OmniAuth::Strategies.const_get(
|
34
|
+
klass = OmniAuth::Strategies.const_get(OmniAuth::Utils.camelize(klass.to_s).to_s)
|
29
35
|
rescue NameError
|
30
|
-
raise LoadError
|
31
|
-
|
36
|
+
raise LoadError.new("Could not find matching strategy for #{klass.inspect}." \
|
37
|
+
"You may need to install an additional gem (such as omniauth-#{klass}).")
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
35
41
|
args << block if block
|
36
42
|
@authenticators ||= []
|
37
|
-
@authenticators << [
|
43
|
+
@authenticators << [klass, args]
|
38
44
|
end
|
39
45
|
|
40
46
|
def callback_phase
|
@@ -43,7 +49,7 @@ module OmniAuth
|
|
43
49
|
if authenticate(username, password)
|
44
50
|
super
|
45
51
|
else
|
46
|
-
|
52
|
+
fail!(:invalid_credentials)
|
47
53
|
end
|
48
54
|
end
|
49
55
|
|
@@ -52,11 +58,9 @@ module OmniAuth
|
|
52
58
|
begin
|
53
59
|
@authenticator = auth[0].new @app, *auth[1]
|
54
60
|
@authenticator.init_authenticator(@request, @env, username)
|
55
|
-
if @authenticator.authenticate(username, password)
|
56
|
-
return true
|
57
|
-
end
|
61
|
+
return true if @authenticator.authenticate(username, password)
|
58
62
|
rescue Error => e
|
59
|
-
OmniAuth.logger.warn "OmniAuth ERR >>> "
|
63
|
+
OmniAuth.logger.warn "OmniAuth ERR >>> #{e}"
|
60
64
|
end
|
61
65
|
@authenticator = nil
|
62
66
|
end
|
@@ -65,6 +69,7 @@ module OmniAuth
|
|
65
69
|
|
66
70
|
def name
|
67
71
|
return @authenticator.name if @authenticator
|
72
|
+
|
68
73
|
super
|
69
74
|
end
|
70
75
|
|
@@ -1,3 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'omniauth/multipassword/base'
|
4
|
+
require 'omniauth/multipassword/version'
|
5
|
+
require 'omniauth/strategies/multi_password'
|
@@ -1,19 +1,26 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('lib/omniauth/multipassword/version', __dir__)
|
3
4
|
|
4
5
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = [
|
6
|
-
gem.email = [
|
7
|
-
gem.description =
|
8
|
-
gem.summary =
|
9
|
-
gem.homepage =
|
6
|
+
gem.authors = ['Jan Graichen']
|
7
|
+
gem.email = ['jgraichen@altimos.de']
|
8
|
+
gem.description = 'A OmniAuth strategy to authenticate using different passwort strategies.'
|
9
|
+
gem.summary = 'A OmniAuth strategy to authenticate using different passwort strategies.'
|
10
|
+
gem.homepage = 'https://github.com/jgraichen/omniauth-multipassword'
|
11
|
+
gem.license = 'MIT'
|
12
|
+
|
13
|
+
gem.required_ruby_version = '>= 2.5'
|
14
|
+
gem.metadata = {
|
15
|
+
'rubygems_mfa_required' => 'true',
|
16
|
+
}
|
10
17
|
|
11
|
-
gem.executables = `git ls-files -- bin/*`.split("\n").map{
|
18
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map {|f| File.basename(f) }
|
12
19
|
gem.files = `git ls-files`.split("\n")
|
13
20
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
-
gem.name =
|
15
|
-
gem.require_paths = [
|
21
|
+
gem.name = 'omniauth-multipassword'
|
22
|
+
gem.require_paths = ['lib']
|
16
23
|
gem.version = Omniauth::Multipassword::VERSION
|
17
24
|
|
18
|
-
gem.add_dependency 'omniauth', '~>
|
25
|
+
gem.add_dependency 'omniauth', '~> 2.0'
|
19
26
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'rack/test'
|
5
|
+
|
6
|
+
describe OmniAuth::MultiPassword::Base do # rubocop:disable RSpec/FilePath
|
7
|
+
subject { strategy }
|
8
|
+
|
9
|
+
let(:app) { instance_double(Proc) }
|
10
|
+
let(:strategy) do
|
11
|
+
OmniAuth::Strategies::OneTest.new(app, *args, &block)
|
12
|
+
end
|
13
|
+
let(:args) { [] }
|
14
|
+
let(:block) { nil }
|
15
|
+
|
16
|
+
describe '#username_id' do
|
17
|
+
subject(:username_id) { strategy.username_id }
|
18
|
+
|
19
|
+
it 'defaults to :username' do
|
20
|
+
expect(username_id).to eq :username
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when configured' do
|
24
|
+
let(:args) { [{fields: %i[user pass]}] }
|
25
|
+
|
26
|
+
it { is_expected.to eq :user }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#password_id' do
|
31
|
+
subject(:password_id) { strategy.password_id }
|
32
|
+
|
33
|
+
it 'defaults to :password' do
|
34
|
+
expect(password_id).to eq :password
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when configured' do
|
38
|
+
let(:args) { [{fields: %i[user pass]}] }
|
39
|
+
|
40
|
+
it { is_expected.to eq :pass }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'single strategy' do
|
45
|
+
include Rack::Test::Methods
|
46
|
+
|
47
|
+
let(:app) do
|
48
|
+
Rack::Builder.new do
|
49
|
+
use OmniAuth::Test::PhonySession
|
50
|
+
use OmniAuth::Strategies::OneTest
|
51
|
+
run ->(env) { [404, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] }
|
52
|
+
end.to_app
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'shows login FORM' do
|
56
|
+
get '/auth/onetest'
|
57
|
+
|
58
|
+
expect(last_response.body).to include '<form'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'redirect on wrong password' do
|
62
|
+
post '/auth/onetest/callback', username: 'john', password: 'wrong'
|
63
|
+
expect(last_response).to be_redirect
|
64
|
+
expect(last_response.headers['Location']).to eq '/auth/failure?message=invalid_credentials&strategy=onetest'
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'authenticates john with correct password' do
|
68
|
+
post '/auth/onetest/callback', username: 'john', password: 'secret'
|
69
|
+
expect(last_response.body).to eq 'true'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'rack/test'
|
5
|
+
|
6
|
+
describe OmniAuth::Strategies::MultiPassword do # rubocop:disable RSpec/FilePath
|
7
|
+
include Rack::Test::Methods
|
8
|
+
|
9
|
+
let(:app) do
|
10
|
+
Rack::Builder.new do
|
11
|
+
use OmniAuth::Test::PhonySession
|
12
|
+
use OmniAuth::Strategies::MultiPassword do
|
13
|
+
authenticator :one_test
|
14
|
+
authenticator :two_test
|
15
|
+
end
|
16
|
+
run ->(env) { [404, {'Content-Type' => 'text/plain'}, [env['omniauth.auth']['uid'].to_s]] }
|
17
|
+
end.to_app
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'shows login FORM' do
|
21
|
+
get '/auth/multipassword'
|
22
|
+
|
23
|
+
expect(last_response.body).to include '<form'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'redirect on all failed strategies' do
|
27
|
+
post '/auth/multipassword/callback', username: 'paul', password: 'wrong'
|
28
|
+
|
29
|
+
expect(last_response).to be_redirect
|
30
|
+
expect(last_response.headers['Location']).to eq '/auth/failure?message=invalid_credentials&strategy=multipassword'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'authenticates john' do
|
34
|
+
post '/auth/multipassword/callback', username: 'john', password: 'secret'
|
35
|
+
|
36
|
+
expect(last_response.body).to eq 'john'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'authenticates jane' do
|
40
|
+
post '/auth/multipassword/callback', username: 'jane', password: '1234'
|
41
|
+
|
42
|
+
expect(last_response.body).to eq 'jane'
|
43
|
+
end
|
44
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'simplecov'
|
5
|
+
|
6
|
+
if ENV['CI']
|
7
|
+
require 'codecov'
|
8
|
+
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
9
|
+
end
|
10
|
+
|
11
|
+
SimpleCov.start do
|
12
|
+
add_filter 'spec'
|
13
|
+
end
|
14
|
+
|
15
|
+
require 'omniauth-multipassword'
|
16
|
+
|
17
|
+
Dir[File.expand_path('spec/support/**/*.rb')].sort.each {|f| require f }
|
18
|
+
|
19
|
+
RSpec.configure do |config|
|
20
|
+
config.order = 'random'
|
21
|
+
|
22
|
+
config.before do
|
23
|
+
OmniAuth.config.logger = Logger.new(IO::NULL)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OmniAuth
|
4
|
+
module Strategies
|
5
|
+
class OneTest
|
6
|
+
include OmniAuth::Strategy
|
7
|
+
include OmniAuth::MultiPassword::Base
|
8
|
+
|
9
|
+
def authenticate(username, password)
|
10
|
+
username == 'john' && password == 'secret'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module OmniAuth
|
17
|
+
module Strategies
|
18
|
+
class TwoTest
|
19
|
+
include OmniAuth::Strategy
|
20
|
+
include OmniAuth::MultiPassword::Base
|
21
|
+
|
22
|
+
def authenticate(username, password)
|
23
|
+
username == 'jane' && password == '1234'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-multipassword
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0.rc1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jan Graichen
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2021-11-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: omniauth
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '2.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
25
27
|
description: A OmniAuth strategy to authenticate using different passwort strategies.
|
26
28
|
email:
|
27
|
-
-
|
29
|
+
- jgraichen@altimos.de
|
28
30
|
executables: []
|
29
31
|
extensions: []
|
30
32
|
extra_rdoc_files: []
|
31
33
|
files:
|
32
|
-
- .
|
34
|
+
- ".editorconfig"
|
35
|
+
- ".github/workflows/test.yml"
|
36
|
+
- ".gitignore"
|
37
|
+
- ".rspec"
|
38
|
+
- ".rubocop.yml"
|
39
|
+
- ".travis.yml"
|
40
|
+
- CHANGELOG.md
|
33
41
|
- Gemfile
|
34
42
|
- LICENSE
|
35
43
|
- README.md
|
@@ -39,28 +47,32 @@ files:
|
|
39
47
|
- lib/omniauth/multipassword/version.rb
|
40
48
|
- lib/omniauth/strategies/multi_password.rb
|
41
49
|
- omniauth-multipassword.gemspec
|
50
|
+
- spec/omniauth/multipassword/base_spec.rb
|
51
|
+
- spec/omniauth/strategy/multi_password_spec.rb
|
52
|
+
- spec/spec_helper.rb
|
53
|
+
- spec/support/strategies.rb
|
42
54
|
homepage: https://github.com/jgraichen/omniauth-multipassword
|
43
|
-
licenses:
|
55
|
+
licenses:
|
56
|
+
- MIT
|
57
|
+
metadata:
|
58
|
+
rubygems_mfa_required: 'true'
|
44
59
|
post_install_message:
|
45
60
|
rdoc_options: []
|
46
61
|
require_paths:
|
47
62
|
- lib
|
48
63
|
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
64
|
requirements:
|
51
|
-
- -
|
65
|
+
- - ">="
|
52
66
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
67
|
+
version: '2.5'
|
54
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
69
|
requirements:
|
57
|
-
- -
|
70
|
+
- - ">"
|
58
71
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
72
|
+
version: 1.3.1
|
60
73
|
requirements: []
|
61
|
-
|
62
|
-
rubygems_version: 1.8.15
|
74
|
+
rubygems_version: 3.2.22
|
63
75
|
signing_key:
|
64
|
-
specification_version:
|
76
|
+
specification_version: 4
|
65
77
|
summary: A OmniAuth strategy to authenticate using different passwort strategies.
|
66
78
|
test_files: []
|