omniauth-colorgy-oauth2 0.1.0
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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +206 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/colorgy_devise_sso_manager.rb +114 -0
- data/lib/flash_message_reporter.rb +20 -0
- data/lib/omniauth/colorgy_oauth2/version.rb +5 -0
- data/lib/omniauth/colorgy_oauth2.rb +8 -0
- data/lib/omniauth/strategies/colorgy.rb +40 -0
- data/lib/omniauth-colorgy-oauth2.rb +3 -0
- data/omniauth-colorgy-oauth2.gemspec +35 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 94da4a452dca3e370d41b977b59e8afb012dd302
|
4
|
+
data.tar.gz: 94012e54bf4185e77dd66a403627fecce3da70ec
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0abe4493c950009dfd16d859cefa94609563275b9f0b90c831d65c72a6fbcd97147af007c18476c6e996c5658fabd2085c63a720f3fb6bb9adefe65c71ccc6a9
|
7
|
+
data.tar.gz: d25810bfc07fb0790fe550e883f696dc2222e15e27b16920e3ee15ed1ecb35802b24fca8ebfc83762ff303e5e9a02dfcb665a951597bce11d85b644549527f6d
|
data/.gitignore
ADDED
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) 2015 Neson
|
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,206 @@
|
|
1
|
+
# OmniAuth Colorgy Strategy [](https://travis-ci.org/colorgy/omniauth-colorgy-oauth2)
|
2
|
+
|
3
|
+
Strategy to authenticate with Colorgy via OAuth2 in OmniAuth.
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'omniauth-colorgy-oauth2'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install omniauth-colorgy-oauth2
|
21
|
+
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
The OmniAuth strategy can be used just like many of the other strategies, like omniauth-facebook, omniauth-google-oauth2... etc. Here are some few examples:
|
26
|
+
|
27
|
+
### Rails middleware
|
28
|
+
|
29
|
+
An example for adding the middleware to a Rails app in `config/initializers/omniauth.rb`:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
33
|
+
provider :colorgy, ENV['APP_ID'], ENV['APP_SECRET'],
|
34
|
+
scope: 'public email identity offline_access',
|
35
|
+
fields: [:id, :uuid, :email, :avatar_url, :primary_identity],
|
36
|
+
includes: [:primary_identity],
|
37
|
+
client_options: { site: 'https://colorgy.io' }
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
> The configurations used in the above example are introduced in the `Configuration` section below.
|
42
|
+
|
43
|
+
### Devise
|
44
|
+
|
45
|
+
First define your **application id** and **secret** in `config/initializers/devise.rb`:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
config.omniauth :colorgy, "COLORGY_APP_ID", "COLORGY_APP_SECRET"
|
49
|
+
```
|
50
|
+
|
51
|
+
Then add the following to `config/routes.rb` so the callback routes are defined:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
# This controller will be setup later in `app/controllers/users/omniauth_callbacks_controller.rb`
|
55
|
+
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
|
56
|
+
```
|
57
|
+
|
58
|
+
Make sure your model is omniauthable. Generally this is `app/models/user.rb`:
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
devise :omniauthable, :omniauth_providers => [:colorgy]
|
62
|
+
```
|
63
|
+
|
64
|
+
Then make sure your callbacks controller is setup:
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
# app/controllers/users/omniauth_callbacks_controller.rb
|
68
|
+
|
69
|
+
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
70
|
+
def colorgy
|
71
|
+
auth = request.env['omniauth.auth']
|
72
|
+
|
73
|
+
# This method will be implement later in your model (e.g. app/models/user.rb)
|
74
|
+
@user = User.from_colorgy(auth, current_user)
|
75
|
+
|
76
|
+
if @user.persisted?
|
77
|
+
set_flash_message(:notice, :success, kind: 'Colorgy') if is_navigational_format?
|
78
|
+
sign_in_and_redirect @user, event: :authentication
|
79
|
+
else
|
80
|
+
session['devise.colorgy_data'] = auth
|
81
|
+
redirect_to new_user_registration_path
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
```
|
86
|
+
|
87
|
+
Finally, implement the `from_colorgy` method for the User model in `app/models/user.rb`
|
88
|
+
|
89
|
+
```ruby
|
90
|
+
def self.from_colorgy(auth, signed_in_resource=nil)
|
91
|
+
user = where(:email => auth.info.email).first_or_create! do |user|
|
92
|
+
user.password = Devise.friendly_token[0,20]
|
93
|
+
end
|
94
|
+
|
95
|
+
return user
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
Now you can add an login link in your view using:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
<%= link_to "Sign in with Colorgy", user_omniauth_authorize_path(:colorgy) %>
|
103
|
+
```
|
104
|
+
|
105
|
+
|
106
|
+
## Configuration
|
107
|
+
|
108
|
+
You can configure several options, which you pass into the provider method: `scope`, `fields`, `includes` and `client_options`.
|
109
|
+
|
110
|
+
An example using devise in `config/initializers/devise.rb` is like:
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
config.omniauth :colorgy, ENV['APP_ID'], ENV['APP_SECRET'],
|
114
|
+
scope: 'public email identity offline_access',
|
115
|
+
fields: [:id, :uuid, :email, :avatar_url, :primary_identity],
|
116
|
+
includes: [:primary_identity],
|
117
|
+
client_options: { site: 'https://colorgy.io' }
|
118
|
+
```
|
119
|
+
|
120
|
+
- `scope`: A space-separated list of permissions you want to request from the user. defaults to `public`, which only provides the user's `id`, `uuid`, `username`, `name` and profile pictures (`avatar_url` and `cover_photo_url`)
|
121
|
+
- `fields`: An array selecting the fields of user's infomation to be returned. This is really useful for making your API calls more efficient and fast.
|
122
|
+
- `includes`: An array to select includable related data (e.g. `primary_identity`, `organizations`) to be included with the user's infomation. It will be convenient that you won't have to make another API call to get the data.
|
123
|
+
- `client_options`: A hash to specify the client configurations. Set this to `{ site: 'https://server.url' }` to change the API server that you want to use.
|
124
|
+
|
125
|
+
|
126
|
+
## Single-Sign On/Off (SSO) Support
|
127
|
+
|
128
|
+
_(Optional)_
|
129
|
+
|
130
|
+
The Colorgy SSO system is implemented using **OAuth 2.0** as the authorization protocol and **Sign-on Status Tokens (SST)** as credential of the sign-on status of the user, achieving sign in and out seamlessly controlled by a central server.
|
131
|
+
|
132
|
+
The **Sign-on Status Token (SST)** is stored in an cross-domain cookie (`_sst`) to represent the sign on status of the current user. SSTs are trully [JSON Web Tokens (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token) containing identification information, signed by a RSA private key. Clients (other services under this SSO system) will be able to decode and verify the infomation using a corresponding RSA public key, and make reasonable reactions according to the infomation it provided.
|
133
|
+
|
134
|
+
This gem has implemented some solutions to cover certain use cases.
|
135
|
+
|
136
|
+
|
137
|
+
### Using Devise With Rails: `ColorgyDeviseSSOManager`
|
138
|
+
|
139
|
+
> Limitations: since this tactic relys on sharing a cookie accross Colorgy core and your app, your app should be running on a subdomain of Colorgy core to make this work.
|
140
|
+
|
141
|
+
First, make sure Devise is setup properly to OmniAuth with Colorgy - clicking the 'Sign in with Colorgy' link will sign you in with no doubts.
|
142
|
+
|
143
|
+
Then confirm that you have at least copy down the **`uuid`** (and accessable via `User#uuid`) or `id` (accessable via `User#sid` or `User#cid`) property of a user when they are signing in from Colorgy Core. A sample is as below:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
# /app/models/user.rb
|
147
|
+
|
148
|
+
# ...
|
149
|
+
|
150
|
+
def self.from_colorgy(auth, signed_in_resource=nil)
|
151
|
+
# The uuid is copied down during creation!
|
152
|
+
user = where(:uuid => auth.info.uuid).first_or_create! do |user|
|
153
|
+
user.email = auth.info.email
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
# ...
|
158
|
+
```
|
159
|
+
|
160
|
+
You might want your local user data to be updated automatically when the core data is. If so, add a **`refreshed_at`** column to your User model and let your application be able to determine whether a refresh is needed (comparing the `update_at` in SST and this column):
|
161
|
+
|
162
|
+
```bash
|
163
|
+
rails g migration add_refreshed_at_to_users refreshed_at:datetime
|
164
|
+
rake db:migrate
|
165
|
+
```
|
166
|
+
|
167
|
+
Then just include `ColorgyDeviseSSOManager` in your ApplicationController and all the rest is done:
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
# app/controllers/application_controller.rb
|
171
|
+
|
172
|
+
class ApplicationController < ActionController::Base
|
173
|
+
include ColorgyDeviseSSOManager
|
174
|
+
include FlashMessageReporter
|
175
|
+
end
|
176
|
+
```
|
177
|
+
|
178
|
+
_`FlashMessageReporter` is optional, include it if you want to relay flash messages from core to your app ._
|
179
|
+
|
180
|
+
One last step: unlike URL of the core SSO server can be guessed by OmniAuth and Devise configurations, the **RSA public key** used to verify SST isn't. So you need to pass it in manually using an environment variable called **`CORE_RSA_PUBLIC_KEY`**. Put it in your `.env` or export it like this: `export CORE_RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3D ... P2QIDAQAB\n-----END PUBLIC KEY-----\n'`. Make sure it's accessible via `ENV['CORE_RSA_PUBLIC_KEY']` in your app.
|
181
|
+
|
182
|
+
Now that users on your app will be signing in/out synchronizedly with Colorgy core, and is automatically reauthorized to get user's new data from core when updated.
|
183
|
+
|
184
|
+
`ColorgyDeviseSSOManager` also provide two URL helper methods: `sign_out_url`, `logout_url` pointed to the core sign out URL. You can replace your orginal logout link (maybe `destroy_user_session_path`) with these. (Since it's an SSO, signing out of the core server means to sign out of your application too.)
|
185
|
+
|
186
|
+
```ruby
|
187
|
+
<%= link_to("Log Out", sign_out_url, method: :delete) %>
|
188
|
+
```
|
189
|
+
|
190
|
+
|
191
|
+
## Development
|
192
|
+
|
193
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
194
|
+
|
195
|
+
The test suite can be run by executing `bundle exec rake`.
|
196
|
+
|
197
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
198
|
+
|
199
|
+
|
200
|
+
## Contributing
|
201
|
+
|
202
|
+
1. Fork it.
|
203
|
+
2. Create your feature branch (`git checkout -b my-new-feature`).
|
204
|
+
3. Commit your changes (`git commit -am 'Add some feature'`).
|
205
|
+
4. Push to the branch (`git push origin my-new-feature`).
|
206
|
+
5. Create a new Pull Request.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "omniauth/colorgy_oauth2"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
module ColorgyDeviseSSOManager
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
@@sst_verification_method = 'RS256'
|
5
|
+
|
6
|
+
included do
|
7
|
+
before_filter :verify_sst
|
8
|
+
helper_method :sign_out_url, :logout_url
|
9
|
+
end
|
10
|
+
|
11
|
+
# Helpers to get the core sign-out URL
|
12
|
+
def sign_out_url
|
13
|
+
"#{core_url}/logout"
|
14
|
+
end
|
15
|
+
|
16
|
+
def logout_url
|
17
|
+
sign_out_url
|
18
|
+
end
|
19
|
+
|
20
|
+
# Override the destroy_user_session_path to logout from core
|
21
|
+
def destroy_user_session_path
|
22
|
+
sign_out_url
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Getter of the core domain
|
28
|
+
def core_domain
|
29
|
+
@@core_domain ||= URI.parse(Devise.omniauth_configs[:colorgy].options[:client_options][:site]).host
|
30
|
+
end
|
31
|
+
|
32
|
+
# Getter of the core url
|
33
|
+
def core_url
|
34
|
+
@@core_url ||= Devise.omniauth_configs[:colorgy].options[:client_options][:site]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Getter of the core rsa public key
|
38
|
+
def core_rsa_public_key
|
39
|
+
@@core_rsa_public_key ||= OpenSSL::PKey::RSA.new(ENV['CORE_RSA_PUBLIC_KEY'].gsub(/\\n/, "\n"))
|
40
|
+
end
|
41
|
+
|
42
|
+
# Decode the sign-on status token (sst) string and return a hash
|
43
|
+
def decode_sst(token)
|
44
|
+
data = JWT.decode(token, core_rsa_public_key, @@sst_verification_method)[0]
|
45
|
+
|
46
|
+
data['issued_at'] = Time.at(data['iat'])
|
47
|
+
data['expired_at'] = Time.at(data['exp'])
|
48
|
+
data['updated_at'] = Time.at(data['updated_at'])
|
49
|
+
|
50
|
+
data
|
51
|
+
rescue JWT::DecodeError
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def verify_sst
|
56
|
+
# Skip this on test and auth callbacks
|
57
|
+
return if Rails.env.test?
|
58
|
+
return if controller_name == 'omniauth_callbacks'
|
59
|
+
|
60
|
+
# Get the sst string from cookie
|
61
|
+
sst_string = cookies[:_sst]
|
62
|
+
|
63
|
+
# If the user's session is valid but the sst is blank,
|
64
|
+
# sign out the user
|
65
|
+
if user_signed_in? && sst_string.blank?
|
66
|
+
sign_out current_user and return
|
67
|
+
end
|
68
|
+
|
69
|
+
# Decode the sign-on status token (sst)
|
70
|
+
sst = decode_sst(sst_string)
|
71
|
+
|
72
|
+
# Perform checks if the user is currently signed in
|
73
|
+
if user_signed_in?
|
74
|
+
|
75
|
+
# If the sst is invalid (expired or cannot be verified),
|
76
|
+
# sign out the user
|
77
|
+
sign_out current_user and return if sst.blank?
|
78
|
+
|
79
|
+
# If the sst isn't belongs to the current user, sign out the user and
|
80
|
+
# redirect to authorize path for re-authorization
|
81
|
+
unless current_user.try(:uuid) == sst['uuid'] ||
|
82
|
+
current_user.try(:sid) == sst['id'] ||
|
83
|
+
current_user.try(:cid) == sst['id'] ||
|
84
|
+
current_user.try(:id) == sst['id']
|
85
|
+
sign_out current_user
|
86
|
+
redirect_to user_omniauth_authorize_path(:colorgy)
|
87
|
+
return
|
88
|
+
end
|
89
|
+
|
90
|
+
# If current user's update time is before the token specified time,
|
91
|
+
# re-authentication to refresh the user's data, do this only on
|
92
|
+
# navigational GET requests
|
93
|
+
if sst['updated_at'].present? && request.get? && is_navigational_format?
|
94
|
+
current_user_refreshed_at = current_user.try(:refreshed_at) ||
|
95
|
+
current_user.try(:synced_at)
|
96
|
+
if current_user_refreshed_at.is_a?(Time) && sst['updated_at'] > current_user_refreshed_at
|
97
|
+
sign_out current_user
|
98
|
+
redirect_to user_omniauth_authorize_path(:colorgy) and return
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# If the token is about to expired then redirect to core to refresh it,
|
103
|
+
# and do this only on navigational GET requests
|
104
|
+
if (sst['expired_at'] - Time.now < 3.days) && request.get? && is_navigational_format?
|
105
|
+
redirect_to "#{core_url}/refresh_sst?redirect_to=#{CGI.escape(request.original_url)}" and return
|
106
|
+
end
|
107
|
+
|
108
|
+
# if the user isn't signed in but the sst isn't blank,
|
109
|
+
# redirect to core authorize path
|
110
|
+
elsif !sst.blank?
|
111
|
+
redirect_to user_omniauth_authorize_path(:colorgy) and return
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module FlashMessageReporter
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
before_filter :set_flash_message_from_params
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def set_flash_message_from_params
|
11
|
+
return if request.env["HTTP_REFERER"].blank?
|
12
|
+
referer_uri = URI.parse(request.env["HTTP_REFERER"])
|
13
|
+
return unless referer_uri.host.ends_with?(core_domain)
|
14
|
+
|
15
|
+
flash[:notice] = params[:flash][:notice] if params[:flash][:notice]
|
16
|
+
flash[:alert] = params[:flash][:alert] if params[:flash][:alert]
|
17
|
+
rescue
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.expand_path(File.join('..', '..', 'colorgy_oauth2'), __FILE__)
|
2
|
+
require 'omniauth-oauth2'
|
3
|
+
|
4
|
+
module OmniAuth
|
5
|
+
module Strategies
|
6
|
+
class Colorgy < OmniAuth::Strategies::OAuth2
|
7
|
+
include OmniAuth::Strategy
|
8
|
+
|
9
|
+
CORE_URL = 'https://colorgy.io'
|
10
|
+
|
11
|
+
option :includes, []
|
12
|
+
option :fields, []
|
13
|
+
|
14
|
+
option :client_options, {
|
15
|
+
:site => CORE_URL,
|
16
|
+
:authorize_url => "/oauth/authorize"
|
17
|
+
}
|
18
|
+
|
19
|
+
uid do
|
20
|
+
raw_info['uuid']
|
21
|
+
end
|
22
|
+
|
23
|
+
info do
|
24
|
+
raw_info
|
25
|
+
end
|
26
|
+
|
27
|
+
def raw_info
|
28
|
+
@raw_info ||= access_token.get("/api/v1/me.json?include=#{includes_url_param}&fields=#{fields_url_param}").parsed
|
29
|
+
end
|
30
|
+
|
31
|
+
def fields_url_param
|
32
|
+
@fields_url_param ||= options[:fields].is_a?(Array) ? options[:fields].join(',') : options[:fields]
|
33
|
+
end
|
34
|
+
|
35
|
+
def includes_url_param
|
36
|
+
@includes_url_param ||= options[:includes].is_a?(Array) ? options[:includes].join(',') : options[:includes]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'omniauth/colorgy_oauth2/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "omniauth-colorgy-oauth2"
|
8
|
+
spec.version = OmniAuth::ColorgyOauth2::VERSION
|
9
|
+
spec.authors = ["Neson"]
|
10
|
+
spec.email = ["neson@dex.tw"]
|
11
|
+
|
12
|
+
spec.summary = %q{A Colorgy OAuth2 strategy and SSO client helper for OmniAuth.}
|
13
|
+
spec.description = %q{A Colorgy OAuth2 strategy and SSO (Single Sign On/Out) client helper for OmniAuth.}
|
14
|
+
spec.homepage = "https://github.com/colorgy/omniauth-colorgy-oauth2"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
18
|
+
# delete this section to allow pushing this gem to any host.
|
19
|
+
# if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# else
|
22
|
+
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
23
|
+
# end
|
24
|
+
|
25
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_runtime_dependency 'omniauth', '>= 1.1.1'
|
31
|
+
spec.add_runtime_dependency 'omniauth-oauth2', '>= 1.1.1'
|
32
|
+
spec.add_development_dependency "bundler"
|
33
|
+
spec.add_development_dependency "rake"
|
34
|
+
spec.add_development_dependency "rspec"
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: omniauth-colorgy-oauth2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Neson
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: omniauth
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.1.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.1.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: omniauth-oauth2
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: A Colorgy OAuth2 strategy and SSO (Single Sign On/Out) client helper
|
84
|
+
for OmniAuth.
|
85
|
+
email:
|
86
|
+
- neson@dex.tw
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- ".rspec"
|
93
|
+
- ".travis.yml"
|
94
|
+
- Gemfile
|
95
|
+
- LICENSE.txt
|
96
|
+
- README.md
|
97
|
+
- Rakefile
|
98
|
+
- bin/console
|
99
|
+
- bin/setup
|
100
|
+
- lib/colorgy_devise_sso_manager.rb
|
101
|
+
- lib/flash_message_reporter.rb
|
102
|
+
- lib/omniauth-colorgy-oauth2.rb
|
103
|
+
- lib/omniauth/colorgy_oauth2.rb
|
104
|
+
- lib/omniauth/colorgy_oauth2/version.rb
|
105
|
+
- lib/omniauth/strategies/colorgy.rb
|
106
|
+
- omniauth-colorgy-oauth2.gemspec
|
107
|
+
homepage: https://github.com/colorgy/omniauth-colorgy-oauth2
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.4.6
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: A Colorgy OAuth2 strategy and SSO client helper for OmniAuth.
|
131
|
+
test_files: []
|