devise-jira-authenticable 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +104 -0
- data/Rakefile +6 -0
- data/devise-jira-authenticable.gemspec +42 -0
- data/lib/devise-jira-authenticable.rb +1 -0
- data/lib/devise/jira_authenticable.rb +28 -0
- data/lib/devise/jira_authenticable/version.rb +5 -0
- data/lib/devise/models/jira_authenticable.rb +90 -0
- data/lib/devise/strategies/jira_authenticable.rb +27 -0
- data/lib/generators/devise_jira_authenticable/install_generator.rb +59 -0
- metadata +303 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bafd1e409aa04147e2d5dcddfd52334038604fc0
|
4
|
+
data.tar.gz: 76b1a215d43773824ff54c8d897107939926f040
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 217e5ea46b6ae4ab49f4f517ec315f069f24b2abcf0d8dbce6a8ad4af92ea5092e573136b27138f64e8af9d8c3b084e083f5b7da55d00963439a7c08fa16704b
|
7
|
+
data.tar.gz: a05940bc9793e4ad31da67454bfc1b1ee121ab8fbda9df9bddfb6d6b983cde70bf8572a170da9fe741227d949826d57bacafffa5257c215c6374e05f7bbd008d
|
data/.gitignore
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
/.idea/
|
2
|
+
/.bundle/
|
3
|
+
/.yardoc/
|
4
|
+
/Gemfile.lock
|
5
|
+
/_yardoc/
|
6
|
+
/coverage/
|
7
|
+
/doc/
|
8
|
+
/pkg/
|
9
|
+
/spec/reports/
|
10
|
+
/tmp/
|
11
|
+
|
12
|
+
# rspec failure tracking
|
13
|
+
.rspec_status
|
14
|
+
/spec/rails_app/log/
|
15
|
+
/.env
|
16
|
+
|
17
|
+
/spec/rails_app/spec/
|
18
|
+
/spec/rails_app/test/
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 peter.bell215
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
# Devise::Jira::Authenticable
|
2
|
+
|
3
|
+
This provides a mechanism to allow devise to authenticate using a JIRA instance. It integrates with the jira-ruby.gem. Even if you intend only to use a `jira-authenticable` strategy within Devise, I suggest starting by getting Devise going with the `database-authenticable` strategy.
|
4
|
+
|
5
|
+
|
6
|
+
The following instructions assume that you want to use the `jira-authenticable strategy` alongside another strategy such as `database-authenticatable`.
|
7
|
+
|
8
|
+
## Devise Preparation
|
9
|
+
|
10
|
+
As JIRA uses usernames rather than email addresses for login credentials I would also make the changes to your app to use a username within Devise before adding adding this Gem. That way you can test that you have successfully implemented the user authentication before worrying about the JIRA interface.
|
11
|
+
|
12
|
+
The process is well documented [here](https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-with-something-other-than-their-email-address). Personally, I found the simplest was to replace:
|
13
|
+
|
14
|
+
config.authentication_keys = [:email]
|
15
|
+
|
16
|
+
with
|
17
|
+
|
18
|
+
config.authentication_keys = [:username]
|
19
|
+
|
20
|
+
You will also need to add a simple migration to add the username to your users table (assuming that is where you store user login details):
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
class AmendUser < ActiveRecord::Migration[5.1]
|
24
|
+
def change
|
25
|
+
add_column :users, :username, :string, index: true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
You clearly need to then populate the username field. The following example code creates usernames based on the current users email address:
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
# Static function to add usernames based on existing email addresses.
|
34
|
+
def self.add_usernames
|
35
|
+
User.transaction do
|
36
|
+
User.all.each do |user|
|
37
|
+
user.update!(username: /(\A[[:alpha:]]{2,}\.[a-z\-]{2,})@companyname\.com\z/.match(user.email)[1])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
Personally, I like to run something like the above script directly from the Rails console:
|
44
|
+
|
45
|
+
# rails console
|
46
|
+
Loading development environment (Rails 5.1.2)
|
47
|
+
2.4.1 :001 > User.add_usernames
|
48
|
+
|
49
|
+
You also need to create the views as per the Devise instructions, and amend the views to use username rather than email.
|
50
|
+
|
51
|
+
## Installation
|
52
|
+
|
53
|
+
So your app now uses Devise for authentication, and you have switched to using usernames rather than emails. Simply, add this line to your application's Gemfile:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
gem 'devise-jira-authenticable'
|
57
|
+
```
|
58
|
+
|
59
|
+
And then execute:
|
60
|
+
|
61
|
+
$ bundle install
|
62
|
+
|
63
|
+
Or install it yourself as:
|
64
|
+
|
65
|
+
$ gem install devise-jira-authenticatable
|
66
|
+
|
67
|
+
## Setting up the database
|
68
|
+
|
69
|
+
You then need to add `devise-jira-authenticable` as a strategy to your rails app. Therefore, run:
|
70
|
+
|
71
|
+
$ rails generate devise_jira_authenticable:install jira_site:https://jira-url/
|
72
|
+
|
73
|
+
This adds various configuration items to the `config/initializers/devise.rb` file.
|
74
|
+
|
75
|
+
## Changes to the Rails App
|
76
|
+
|
77
|
+
Amend the `jira_authenticable` configuration items in the Devise configuration file (`config/initializers/devise.rb`). The key one, if you didn't already do so when running the generator is to make sure your URL is correctly defined. The other one is the context path. Many JIRA sites have a path to their JIRA system of the form: `company_url/dev_jira`. The second part (`/dev_jira`) is set using the context path property in the config file.
|
78
|
+
|
79
|
+
Once correctly configured, simply add the `:jira_authenticable` strategy to the Devise user model and
|
80
|
+
you are good to go. Assuming you want users to be authenticated against against JIRA first, then the devise line looks like:
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
class User < ApplicationRecord
|
84
|
+
|
85
|
+
devise :jira_authenticable, :database_authenticatable, :recoverable, :rememberable,
|
86
|
+
:trackable, :validatable, :registerable
|
87
|
+
```
|
88
|
+
|
89
|
+
|
90
|
+
## Development
|
91
|
+
|
92
|
+
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.
|
93
|
+
|
94
|
+
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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
95
|
+
|
96
|
+
## Contributing
|
97
|
+
|
98
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/trapeze-bell-peter/devise-jira-authenticable]. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
99
|
+
|
100
|
+
|
101
|
+
## License
|
102
|
+
|
103
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
104
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'devise/jira_authenticable/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'devise-jira-authenticable'
|
8
|
+
spec.version = Devise::JiraAuthenticable::VERSION
|
9
|
+
spec.authors = ['trapeze.bell.peter']
|
10
|
+
spec.email = ['peter.bell@trapezegroup.com']
|
11
|
+
|
12
|
+
spec.summary = 'Provide Devise authentication using a JIRA instance.'
|
13
|
+
spec.description = 'Interacts with the ruby-jira gem to provide authentication of a login against a JIRA system.'
|
14
|
+
spec.homepage = 'https://github.com/trapeze-bell-peter/devise-jira-authenticable'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_dependency('devise', '~> 4.2')
|
23
|
+
spec.add_dependency('jira-ruby', '~> 1.4.0')
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.14'
|
26
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
27
|
+
|
28
|
+
spec.add_development_dependency 'rails', '~> 5.1.1'
|
29
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3'
|
30
|
+
spec.add_development_dependency 'puma', '~> 3.7'
|
31
|
+
spec.add_development_dependency 'sass-rails', '~> 5.0'
|
32
|
+
spec.add_development_dependency 'jquery-rails', '~> 4.3'
|
33
|
+
|
34
|
+
spec.add_development_dependency 'rspec', '~> 3.6'
|
35
|
+
spec.add_development_dependency 'rspec-rails', '~> 3.6'
|
36
|
+
spec.add_development_dependency 'capybara', '~> 2.13'
|
37
|
+
spec.add_development_dependency 'selenium-webdriver'
|
38
|
+
spec.add_development_dependency "chromedriver-helper", "1.0.0"
|
39
|
+
spec.add_development_dependency 'factory_girl_rails', '~> 4.8'
|
40
|
+
spec.add_development_dependency 'webmock', '~> 1.18', '>= 1.18.0'
|
41
|
+
spec.add_development_dependency 'ammeter', '~> 1.1.4'
|
42
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'devise/jira_authenticable'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'devise'
|
4
|
+
|
5
|
+
require 'devise/jira_authenticable/version'
|
6
|
+
require 'devise/models/jira_authenticable'
|
7
|
+
require 'devise/strategies/jira_authenticable'
|
8
|
+
|
9
|
+
module Devise
|
10
|
+
# authentication_keys = [ :username ]
|
11
|
+
|
12
|
+
# The URL of the JIRA server.
|
13
|
+
mattr_accessor :jira_site
|
14
|
+
|
15
|
+
# The context path for the JIRA server ()
|
16
|
+
mattr_accessor :jira_context_path
|
17
|
+
@@jira_context_path = ''
|
18
|
+
|
19
|
+
# The timeout in seconds for JIRA requests
|
20
|
+
mattr_accessor :jira_read_timeout
|
21
|
+
@@jira_read_timeout = 120
|
22
|
+
|
23
|
+
# Option to handle radius timeout as authentication failure
|
24
|
+
mattr_accessor :handle_jira_timeout_as_failure
|
25
|
+
@@handle_jira_timeout_as_failure = false
|
26
|
+
end
|
27
|
+
|
28
|
+
Devise.add_module(:jira_authenticable, route: :session, strategy: true, controller: :sessions, model: true)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'jira-ruby'
|
2
|
+
require 'devise/strategies/jira_authenticable'
|
3
|
+
|
4
|
+
module Devise
|
5
|
+
module Models
|
6
|
+
# The JiraAuthenticable module is responsible for validating a user's credentials
|
7
|
+
# against the configured JIRA server. When authentication is successful, the
|
8
|
+
# attributes returned by the JIRA server are made available via the
|
9
|
+
# +jira_attributes+ accessor in the user model.
|
10
|
+
#
|
11
|
+
# The JiraAuthenticable module works by checking if the requested username already exists.
|
12
|
+
# If it does, radius authentication proceeds through that
|
13
|
+
# user record. Otherwise, a new user record is built and authentication proceeds.
|
14
|
+
# If authentication is successful, the +after_jira_authentication+ callback is
|
15
|
+
# invoked, the default implementation of which simply saves the user record with
|
16
|
+
# validations disabled.
|
17
|
+
#
|
18
|
+
# The radius username is extracted from the parameters hash by using the first
|
19
|
+
# configured value in the +Devise.authentication_keys+ array. If the authentication
|
20
|
+
# key is in the list of case insensitive keys, the username will be converted to
|
21
|
+
# lowercase prior to authentication.
|
22
|
+
#
|
23
|
+
# == Options
|
24
|
+
#
|
25
|
+
# JiraAuthenticable adds the following options to devise_for:
|
26
|
+
# * +jira_site+: The URL for the JIRA server.
|
27
|
+
# * +jira_context_path+: the context path for JIRA.
|
28
|
+
# * +jira_read_timeout+: The time we wait for a response from JIRA.
|
29
|
+
#
|
30
|
+
# == Callbacks
|
31
|
+
#
|
32
|
+
# The +after_jira_authentication+ callback is invoked on the user record when
|
33
|
+
# JIRA authentication succeeds for that user but prior to Devise checking if the
|
34
|
+
# user is active for authentication. Its default implementation simply saves the
|
35
|
+
# user record with validations disabled. This method should be overriden if further
|
36
|
+
# actions should be taken to make the user valid or active for authentication. If
|
37
|
+
# you override it, be sure to either call super to save the record or to save the
|
38
|
+
# record yourself.
|
39
|
+
module JiraAuthenticable
|
40
|
+
extend ActiveSupport::Concern
|
41
|
+
|
42
|
+
included do
|
43
|
+
attr_accessor :jira_client
|
44
|
+
attr_accessor :password
|
45
|
+
end
|
46
|
+
|
47
|
+
# Use the currently configured JIRA server to attempt to authenticate the
|
48
|
+
# supplied username and password. If authentication succeeds, make the JIRA
|
49
|
+
# attributes returned by the server available via the radius_attributes accessor.
|
50
|
+
# Returns true if authentication was successful and false otherwise.
|
51
|
+
#
|
52
|
+
# Parameters::
|
53
|
+
# * +username+: The username to send to the radius server
|
54
|
+
# * +password+: The password to send to the radius server
|
55
|
+
def valid_jira_password?(username, password)
|
56
|
+
self.jira_client = JIRA::Client.new(
|
57
|
+
username: username,
|
58
|
+
password: password,
|
59
|
+
site: self.class.jira_site,
|
60
|
+
context_path: self.class.jira_context_path,
|
61
|
+
auth_type: :cookie,
|
62
|
+
use_cookies: true,
|
63
|
+
read_timeout: self.class.jira_read_timeout
|
64
|
+
)
|
65
|
+
self.jira_client.authenticated?
|
66
|
+
rescue Timeout::Error
|
67
|
+
raise Timeout::Error unless self.class.handle_jira_timeout_as_failure
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
|
71
|
+
module ClassMethods
|
72
|
+
Devise::Models.config(self, :jira_site, :jira_context_path, :jira_read_timeout, :handle_jira_timeout_as_failure)
|
73
|
+
|
74
|
+
# Invoked by the JiraAuthenticatable strategy to perform the authentication
|
75
|
+
# against the JIRA server. The username is extracted from the authentication hash.
|
76
|
+
# We then search for an existing resource using the username. If no resource
|
77
|
+
# is found, a new resource is built (not created). If authentication is
|
78
|
+
# successful the callback is responsible for saving the resource. Returns the
|
79
|
+
# resource if authentication succeeds and nil if it does not.
|
80
|
+
def find_for_jira_authentication(authentication_hash)
|
81
|
+
username, password = authentication_hash[:username], authentication_hash[:password]
|
82
|
+
|
83
|
+
resource = find_for_authentication( username: username )
|
84
|
+
|
85
|
+
resource&.valid_jira_password?(username, password) ? resource : nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'devise/strategies/authenticatable'
|
2
|
+
|
3
|
+
module Devise
|
4
|
+
module Strategies
|
5
|
+
# Strategy for authenticating users with a JIRA server. If authentication with
|
6
|
+
# the JIRA server fails, allow warden to move on to the next strategy. When
|
7
|
+
# authentication succeeds and Devise indicates that the resource has been
|
8
|
+
# successfully validated, invoke the +after_jira_authentication+ callback on the
|
9
|
+
# resource and let warden know we were successful and not to continue with executing
|
10
|
+
# further strategies.
|
11
|
+
class JiraAuthenticable < Authenticatable
|
12
|
+
# Invoked by warden to execute the strategy.
|
13
|
+
def authenticate!
|
14
|
+
auth_params = authentication_hash.merge(:password => password)
|
15
|
+
resource = valid_password? &&
|
16
|
+
mapping.to.find_for_jira_authentication(auth_params)
|
17
|
+
return fail(:invalid) unless resource
|
18
|
+
|
19
|
+
if validate(resource)
|
20
|
+
success!(resource)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Warden::Strategies.add(:jira_authenticable, Devise::Strategies::JiraAuthenticable)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/active_record'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
|
5
|
+
module DeviseJiraAuthenticable
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
source_root File.expand_path("../templates", __FILE__)
|
10
|
+
|
11
|
+
desc <<-DESC.gsub(/ {6}/, '')
|
12
|
+
Description:
|
13
|
+
Adds jira_authenticable strategy to the devise initializer
|
14
|
+
<JIRA SITE> - The URL address of the JIRA server
|
15
|
+
DESC
|
16
|
+
|
17
|
+
argument(:jira_site, banner: '<URL>', desc: 'The URL of the JIRA server')
|
18
|
+
class_option(:timeout, default: '120', desc: 'How long to wait for a response from the JIRA server')
|
19
|
+
|
20
|
+
def install
|
21
|
+
inject_into_file("config/initializers/devise.rb", default_devise_settings,
|
22
|
+
before: /^\s*.*==> Scopes configuration/)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.next_migration_number(path)
|
26
|
+
ActiveRecord::Generators::Base.next_migration_number(path)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def default_devise_settings
|
32
|
+
<<-CONFIG.gsub(/ {6}/, '')
|
33
|
+
# ==> Configuration for jira_authenticable
|
34
|
+
# The jira_authenticable strategy can be used in place of the
|
35
|
+
# database_authenticatable strategy or alongside it. The default order of the
|
36
|
+
# strategies is the reverse of how they were loaded. You can control this
|
37
|
+
# order by explicitly telling warden the order in which to apply the strategies.
|
38
|
+
# See the Warden Configuration section for further details.
|
39
|
+
#
|
40
|
+
# Configure the URL of the JIRA server to use.
|
41
|
+
config.jira_site = '#{jira_site}'
|
42
|
+
# Configure the context path for the JIRA server. Default is blank.
|
43
|
+
# config.jira_context_path = '/jira_context_path'
|
44
|
+
# Configure the standard timeout period for JIRA server requests for authentication. Default is 60
|
45
|
+
# config.jira_read_timeout = 99
|
46
|
+
# Configure whether a timeout is handled as an error or simply as a failed validation. Default is false
|
47
|
+
# config.handle_jira_timeout_as_failure = true
|
48
|
+
CONFIG
|
49
|
+
end
|
50
|
+
|
51
|
+
def devise_in_model
|
52
|
+
'devise :jira_authenticable, authentication_keys: [ :username ]'
|
53
|
+
end
|
54
|
+
|
55
|
+
def migration_version
|
56
|
+
Rails.version.start_with?('5') ? "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" : ''
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,303 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: devise-jira-authenticable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- trapeze.bell.peter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: devise
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jira-ruby
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.4.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.14'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.14'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '12.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '12.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rails
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 5.1.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 5.1.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.3'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.3'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: puma
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sass-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '5.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '5.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: jquery-rails
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '4.3'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '4.3'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rspec
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.6'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.6'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rspec-rails
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '3.6'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '3.6'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: capybara
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '2.13'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '2.13'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: selenium-webdriver
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: chromedriver-helper
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - '='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 1.0.0
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - '='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 1.0.0
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: factory_girl_rails
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '4.8'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '4.8'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: webmock
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '1.18'
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: 1.18.0
|
233
|
+
type: :development
|
234
|
+
prerelease: false
|
235
|
+
version_requirements: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - "~>"
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '1.18'
|
240
|
+
- - ">="
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: 1.18.0
|
243
|
+
- !ruby/object:Gem::Dependency
|
244
|
+
name: ammeter
|
245
|
+
requirement: !ruby/object:Gem::Requirement
|
246
|
+
requirements:
|
247
|
+
- - "~>"
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
version: 1.1.4
|
250
|
+
type: :development
|
251
|
+
prerelease: false
|
252
|
+
version_requirements: !ruby/object:Gem::Requirement
|
253
|
+
requirements:
|
254
|
+
- - "~>"
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
version: 1.1.4
|
257
|
+
description: Interacts with the ruby-jira gem to provide authentication of a login
|
258
|
+
against a JIRA system.
|
259
|
+
email:
|
260
|
+
- peter.bell@trapezegroup.com
|
261
|
+
executables: []
|
262
|
+
extensions: []
|
263
|
+
extra_rdoc_files: []
|
264
|
+
files:
|
265
|
+
- ".gitignore"
|
266
|
+
- ".rspec"
|
267
|
+
- ".travis.yml"
|
268
|
+
- Gemfile
|
269
|
+
- LICENSE.txt
|
270
|
+
- README.md
|
271
|
+
- Rakefile
|
272
|
+
- devise-jira-authenticable.gemspec
|
273
|
+
- lib/devise-jira-authenticable.rb
|
274
|
+
- lib/devise/jira_authenticable.rb
|
275
|
+
- lib/devise/jira_authenticable/version.rb
|
276
|
+
- lib/devise/models/jira_authenticable.rb
|
277
|
+
- lib/devise/strategies/jira_authenticable.rb
|
278
|
+
- lib/generators/devise_jira_authenticable/install_generator.rb
|
279
|
+
homepage: https://github.com/trapeze-bell-peter/devise-jira-authenticable
|
280
|
+
licenses:
|
281
|
+
- MIT
|
282
|
+
metadata: {}
|
283
|
+
post_install_message:
|
284
|
+
rdoc_options: []
|
285
|
+
require_paths:
|
286
|
+
- lib
|
287
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
288
|
+
requirements:
|
289
|
+
- - ">="
|
290
|
+
- !ruby/object:Gem::Version
|
291
|
+
version: '0'
|
292
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
293
|
+
requirements:
|
294
|
+
- - ">="
|
295
|
+
- !ruby/object:Gem::Version
|
296
|
+
version: '0'
|
297
|
+
requirements: []
|
298
|
+
rubyforge_project:
|
299
|
+
rubygems_version: 2.6.12
|
300
|
+
signing_key:
|
301
|
+
specification_version: 4
|
302
|
+
summary: Provide Devise authentication using a JIRA instance.
|
303
|
+
test_files: []
|