omniauth-digitalocean 0.0.1 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yaml +36 -0
- data/.github/workflows/release.yaml +38 -0
- data/README.md +2 -2
- data/examples/sinatra/README.md +7 -0
- data/examples/sinatra/config.ru +18 -14
- data/lib/omniauth-digitalocean/version.rb +1 -1
- data/lib/omniauth/strategies/digitalocean.rb +20 -3
- data/omniauth-digitalocean.gemspec +7 -7
- data/spec/omniauth/strategies/digitalocean_spec.rb +46 -5
- metadata +15 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 570bb5803a60b925bc0e4887acd7357ef6a06a5e99743d9bfad405ed89bc9ea4
|
4
|
+
data.tar.gz: 7fd81e141f01263a8ecc20e1e962246bbb564be8f220dd8aa6630943aa55b41e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 393b6e6920c1ffe5a99a7768415edb2857d6a8b15f8bac34b511c34d8e6de47e75b31053b710f039cf44c90ea761c7736b7b496aaef115e9f1cf9fb9b07705f5
|
7
|
+
data.tar.gz: cd004a7c54f78e04fe77e1083c1721c4acf67b028569ae6c7dcc14c0ee7ec77872874dadbea4b57ac7b1768efa84225a08783889ef9f88f477d3a51f9d0f08ae
|
@@ -0,0 +1,36 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
strategy:
|
12
|
+
fail-fast: true
|
13
|
+
matrix:
|
14
|
+
os: [ ubuntu-latest, macos-latest ]
|
15
|
+
ruby: [ 2.5, 2.6, 2.7 ]
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
- uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby }}
|
22
|
+
|
23
|
+
# Cache dependencies.
|
24
|
+
- uses: actions/cache@v1
|
25
|
+
with:
|
26
|
+
path: vendor/bundle
|
27
|
+
key: bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/Gemfile.lock') }}
|
28
|
+
restore-keys: |
|
29
|
+
bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-
|
30
|
+
- name: Setup
|
31
|
+
run: |
|
32
|
+
gem install bundler
|
33
|
+
bundle install --jobs 4 --retry 3
|
34
|
+
- name: Test
|
35
|
+
run: |
|
36
|
+
bundle exec rspec ./spec
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Publishes Ruby Gem for release when a tag is created
|
2
|
+
# that matches the pattern "v*" (ie. v0.1.0).
|
3
|
+
name: Publish Ruby Gem
|
4
|
+
|
5
|
+
on:
|
6
|
+
push:
|
7
|
+
tags:
|
8
|
+
- 'v*'
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
build:
|
12
|
+
name: Build + Publish
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v2
|
17
|
+
|
18
|
+
- uses: actions/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: 2.6
|
21
|
+
|
22
|
+
- uses: actions/cache@v1
|
23
|
+
with:
|
24
|
+
path: vendor/bundle
|
25
|
+
key: bundle-use-ruby-ubuntu-latest-2.6-${{ hashFiles('**/Gemfile.lock') }}
|
26
|
+
restore-keys: |
|
27
|
+
bundle-use-ruby-ubuntu-latest-2.6-
|
28
|
+
|
29
|
+
- name: Publish to RubyGems
|
30
|
+
run: |
|
31
|
+
mkdir -p $HOME/.gem
|
32
|
+
touch $HOME/.gem/credentials
|
33
|
+
chmod 0600 $HOME/.gem/credentials
|
34
|
+
printf -- "---\n:rubygems_api_key: ${RUBYGEMS_AUTH_TOKEN}\n" > $HOME/.gem/credentials
|
35
|
+
gem build *.gemspec
|
36
|
+
gem push *.gem
|
37
|
+
env:
|
38
|
+
RUBYGEMS_AUTH_TOKEN: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
|
data/README.md
CHANGED
@@ -36,9 +36,9 @@ end
|
|
36
36
|
|
37
37
|
For additional information, refer to the [OmniAuth wiki](https://github.com/intridea/omniauth/wiki).
|
38
38
|
|
39
|
-
See the [example](https://github.com/digitaloceancloud/omniauth-digitalocean/blob/master/
|
39
|
+
See the [example](https://github.com/digitaloceancloud/omniauth-digitalocean/blob/master/examples/sinatra/config.ru) Sinatra app for full examples
|
40
40
|
|
41
|
-
Note: before running example app, please add your
|
41
|
+
Note: before running example app, please add your application id and secret to ` example/config.ru ` file.
|
42
42
|
|
43
43
|
## License
|
44
44
|
|
data/examples/sinatra/config.ru
CHANGED
@@ -3,22 +3,26 @@ require 'bundler/setup'
|
|
3
3
|
require 'sinatra'
|
4
4
|
require 'omniauth-digitalocean'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
6
|
+
class DigitalOceanExample < Sinatra::Base
|
7
|
+
use Rack::Session::Cookie
|
9
8
|
|
10
|
-
get '/
|
11
|
-
|
12
|
-
|
13
|
-
end
|
9
|
+
get '/' do
|
10
|
+
redirect '/auth/digitalocean'
|
11
|
+
end
|
14
12
|
|
15
|
-
get '/auth/
|
16
|
-
|
17
|
-
|
18
|
-
end
|
13
|
+
get '/auth/:provider/callback' do
|
14
|
+
content_type 'text/plain'
|
15
|
+
request.env['omniauth.auth'].to_hash.inspect rescue "No Data"
|
16
|
+
end
|
19
17
|
|
20
|
-
|
18
|
+
get '/auth/failure' do
|
19
|
+
content_type 'text/plain'
|
20
|
+
request.env['omniauth.auth'].to_hash.inspect rescue "No Data"
|
21
|
+
end
|
21
22
|
|
22
|
-
use OmniAuth::Builder do
|
23
|
-
|
23
|
+
use OmniAuth::Builder do
|
24
|
+
provider OmniAuth::Strategies::Digitalocean, ENV["DIGITALOCEAN_APP_ID"], ENV["DIGITALOCEAN_SECRET"], scope: "read write"
|
25
|
+
end
|
24
26
|
end
|
27
|
+
|
28
|
+
run DigitalOceanExample.run!
|
@@ -9,10 +9,11 @@ module OmniAuth
|
|
9
9
|
# use OmniAuth::Strategies::Digitalocean, 'consumerkey', 'consumersecret', :scope => 'read write', :display => 'plain'
|
10
10
|
#
|
11
11
|
class Digitalocean < OmniAuth::Strategies::OAuth2
|
12
|
-
AUTHENTICATION_PARAMETERS = %w(display state scope)
|
12
|
+
AUTHENTICATION_PARAMETERS = %w(display account state scope)
|
13
13
|
BASE_URL = "https://cloud.digitalocean.com"
|
14
|
+
API_URL = "https://api.digitalocean.com"
|
14
15
|
|
15
|
-
option :name,
|
16
|
+
option :name, "digitalocean"
|
16
17
|
|
17
18
|
unless OmniAuth.config.test_mode
|
18
19
|
option :client_options, {
|
@@ -30,14 +31,26 @@ module OmniAuth
|
|
30
31
|
|
31
32
|
option :authorize_options, AUTHENTICATION_PARAMETERS
|
32
33
|
|
34
|
+
extra do
|
35
|
+
raw_info.parsed['account']
|
36
|
+
end
|
37
|
+
|
33
38
|
uid do
|
34
|
-
access_token.params['
|
39
|
+
access_token.params['info']['uuid']
|
35
40
|
end
|
36
41
|
|
37
42
|
info do
|
38
43
|
access_token.params['info']
|
39
44
|
end
|
40
45
|
|
46
|
+
# Over-ride callback_url definition to maintain
|
47
|
+
# compatability with omniauth-oauth2 >= 1.4.0
|
48
|
+
#
|
49
|
+
# See: https://github.com/intridea/omniauth-oauth2/issues/81
|
50
|
+
def callback_url
|
51
|
+
full_host + script_name + callback_path
|
52
|
+
end
|
53
|
+
|
41
54
|
# Hook useful for appending parameters into the auth url before sending
|
42
55
|
# to provider.
|
43
56
|
def request_phase
|
@@ -50,6 +63,10 @@ module OmniAuth
|
|
50
63
|
super
|
51
64
|
end
|
52
65
|
|
66
|
+
def raw_info
|
67
|
+
@raw_info ||= access_token.get("#{API_URL}/v2/account")
|
68
|
+
end
|
69
|
+
|
53
70
|
##
|
54
71
|
# You can pass +display+, +state+ or +scope+ params to the auth request, if
|
55
72
|
# you need to set them dynamically. You can also set these options
|
@@ -5,11 +5,11 @@ require 'omniauth-digitalocean/version'
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "omniauth-digitalocean"
|
7
7
|
spec.version = Omniauth::Digitalocean::VERSION
|
8
|
-
spec.authors = ["
|
9
|
-
spec.email = ["
|
10
|
-
spec.summary = %q{
|
11
|
-
spec.description = %q{
|
12
|
-
spec.homepage = ""
|
8
|
+
spec.authors = ["DigitalOcean API Engineering team"]
|
9
|
+
spec.email = ["api-engineering@digitalocean.com"]
|
10
|
+
spec.summary = %q{Official OmniAuth strategy for Digitalocean}
|
11
|
+
spec.description = %q{Official OmniAuth strategy for Digitalocean}
|
12
|
+
spec.homepage = "https://github.com/digitalocean/omniauth-digitalocean"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
15
|
spec.files = `git ls-files`.split($/)
|
@@ -17,10 +17,10 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency "omniauth", "~>
|
20
|
+
spec.add_dependency "omniauth", "~> 2.0"
|
21
21
|
spec.add_dependency "omniauth-oauth2", "~> 1.0"
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler", "~>
|
23
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rspec", "~> 2.7"
|
26
26
|
spec.add_development_dependency "rack-test"
|
@@ -1,16 +1,57 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe OmniAuth::Strategies::
|
3
|
+
describe OmniAuth::Strategies::Digitalocean do
|
4
4
|
subject do
|
5
|
-
|
5
|
+
described_class.new({})
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
it { expect(subject.options.name).to eq(
|
8
|
+
describe "production client options" do
|
9
|
+
it { expect(subject.options.name).to eq("digitalocean") }
|
10
10
|
|
11
11
|
it { expect(subject.options.client_options.site).to eq("https://cloud.digitalocean.com") }
|
12
12
|
it { expect(subject.options.client_options.authorize_url).to eq("https://cloud.digitalocean.com/v1/oauth/authorize") }
|
13
13
|
it { expect(subject.options.client_options.token_url).to eq("https://cloud.digitalocean.com/v1/oauth/token") }
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
describe "callback phase instance methods" do
|
17
|
+
let(:uuid) { 123 }
|
18
|
+
let(:response_params) {
|
19
|
+
{
|
20
|
+
'info' => {
|
21
|
+
'uuid' => uuid
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
let(:account_response) {
|
26
|
+
{ 'account' =>
|
27
|
+
{
|
28
|
+
'droplet_limit' => 25,
|
29
|
+
'email' => 'foo@example.com',
|
30
|
+
'uuid' => 'b6fc48dbf6d990634ce5f3c78dc9851e757381ef',
|
31
|
+
'email_verified' => true
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
let(:account_json) { double(:json, parsed: account_response) }
|
36
|
+
let(:access_token) { double('AccessToken', params: response_params, get: account_json) }
|
37
|
+
|
38
|
+
before do
|
39
|
+
allow(subject).to receive(:access_token).and_return(access_token)
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#uid" do
|
43
|
+
it "returns uuid from the info hash" do
|
44
|
+
expect(subject.uid).to eq(uuid)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#extra' do
|
49
|
+
it 'includes the information returned from the account endpoint' do
|
50
|
+
expect(subject.extra['droplet_limit']).to eq(25)
|
51
|
+
expect(subject.extra['email']).to eq("foo@example.com")
|
52
|
+
expect(subject.extra['uuid']).to eq("b6fc48dbf6d990634ce5f3c78dc9851e757381ef")
|
53
|
+
expect(subject.extra['email_verified']).to eq(true)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-digitalocean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- DigitalOcean API Engineering team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: omniauth-oauth2
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,19 +122,22 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
-
description:
|
125
|
+
description: Official OmniAuth strategy for Digitalocean
|
126
126
|
email:
|
127
|
-
-
|
127
|
+
- api-engineering@digitalocean.com
|
128
128
|
executables: []
|
129
129
|
extensions: []
|
130
130
|
extra_rdoc_files: []
|
131
131
|
files:
|
132
|
+
- ".github/workflows/ci.yaml"
|
133
|
+
- ".github/workflows/release.yaml"
|
132
134
|
- ".gitignore"
|
133
135
|
- Gemfile
|
134
136
|
- LICENSE.txt
|
135
137
|
- README.md
|
136
138
|
- Rakefile
|
137
139
|
- examples/sinatra/Gemfile
|
140
|
+
- examples/sinatra/README.md
|
138
141
|
- examples/sinatra/config.ru
|
139
142
|
- lib/omniauth-digitalocean.rb
|
140
143
|
- lib/omniauth-digitalocean/version.rb
|
@@ -142,7 +145,7 @@ files:
|
|
142
145
|
- omniauth-digitalocean.gemspec
|
143
146
|
- spec/omniauth/strategies/digitalocean_spec.rb
|
144
147
|
- spec/spec_helper.rb
|
145
|
-
homepage:
|
148
|
+
homepage: https://github.com/digitalocean/omniauth-digitalocean
|
146
149
|
licenses:
|
147
150
|
- MIT
|
148
151
|
metadata: {}
|
@@ -161,11 +164,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
164
|
- !ruby/object:Gem::Version
|
162
165
|
version: '0'
|
163
166
|
requirements: []
|
164
|
-
|
165
|
-
rubygems_version: 2.2.0
|
167
|
+
rubygems_version: 3.0.3.1
|
166
168
|
signing_key:
|
167
169
|
specification_version: 4
|
168
|
-
summary:
|
170
|
+
summary: Official OmniAuth strategy for Digitalocean
|
169
171
|
test_files:
|
170
172
|
- spec/omniauth/strategies/digitalocean_spec.rb
|
171
173
|
- spec/spec_helper.rb
|