omniauth-slack 2.0.1 → 2.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 +4 -4
- data/README.md +4 -0
- data/Rakefile +7 -0
- data/lib/omniauth-slack/version.rb +1 -1
- data/lib/omniauth/strategies/slack.rb +6 -2
- data/omniauth-slack.gemspec +2 -0
- data/test/helper.rb +56 -0
- data/test/support/shared_examples.rb +85 -0
- data/test/test.rb +100 -0
- metadata +37 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e89b915cc602370b6fe4e45701064d3d8e6d815
|
4
|
+
data.tar.gz: a7d0bb3eb0f63b4db69e5264129040624d4a18af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 506559336073e79071574d5d439bd58deba9338a50140f328598da93fe813188d1655194835086cf2b8e4a8f58caa98cc5bfaa5acd2f32786f9a9144df139499
|
7
|
+
data.tar.gz: 260f4fdaa573c204d6e152f3aecf28965ed075e4496d872650940baa918217ae1033fc7a7d159a1cefe4950a0ac8d62a3fd5b83789d44a5352b0160af352e67e
|
data/README.md
CHANGED
@@ -96,3 +96,7 @@ end
|
|
96
96
|
|
97
97
|
|
98
98
|
[](https://bitdeli.com/free "Bitdeli Badge")
|
99
|
+
|
100
|
+
|
101
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
102
|
+
|
data/Rakefile
CHANGED
@@ -34,6 +34,7 @@ module OmniAuth
|
|
34
34
|
team: raw_info['team'],
|
35
35
|
user: raw_info['user'],
|
36
36
|
team_id: raw_info['team_id'],
|
37
|
+
team_domain: team_info['team']['domain'],
|
37
38
|
user_id: raw_info['user_id'],
|
38
39
|
is_admin: user_info['user']['is_admin'],
|
39
40
|
is_owner: user_info['user']['is_owner'],
|
@@ -42,17 +43,20 @@ module OmniAuth
|
|
42
43
|
end
|
43
44
|
|
44
45
|
extra do
|
45
|
-
{:raw_info => raw_info, :user_info => user_info}
|
46
|
+
{:raw_info => raw_info, :user_info => user_info, :team_info => team_info}
|
46
47
|
end
|
47
48
|
|
48
49
|
def user_info
|
49
50
|
@user_info ||= access_token.get("/api/users.info?user=#{raw_info['user_id']}").parsed
|
50
51
|
end
|
51
52
|
|
53
|
+
def team_info
|
54
|
+
@team_info ||= access_token.get("/api/team.info").parsed
|
55
|
+
end
|
56
|
+
|
52
57
|
def raw_info
|
53
58
|
@raw_info ||= access_token.get("/api/auth.test").parsed
|
54
59
|
end
|
55
|
-
|
56
60
|
end
|
57
61
|
end
|
58
62
|
end
|
data/omniauth-slack.gemspec
CHANGED
data/test/helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "mocha/setup"
|
4
|
+
require "omniauth/strategies/slack"
|
5
|
+
|
6
|
+
OmniAuth.config.test_mode = true
|
7
|
+
|
8
|
+
module BlockTestHelper
|
9
|
+
def test(name, &blk)
|
10
|
+
method_name = "test_#{name.gsub(/\s+/, "_")}"
|
11
|
+
raise "Method already defined: #{method_name}" if instance_methods.include?(method_name.to_sym)
|
12
|
+
define_method method_name, &blk
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module CustomAssertions
|
17
|
+
def assert_has_key(key, hash, msg = nil)
|
18
|
+
msg = message(msg) { "Expected #{hash.inspect} to have key #{key.inspect}" }
|
19
|
+
assert hash.has_key?(key), msg
|
20
|
+
end
|
21
|
+
|
22
|
+
def refute_has_key(key, hash, msg = nil)
|
23
|
+
msg = message(msg) { "Expected #{hash.inspect} not to have key #{key.inspect}" }
|
24
|
+
refute hash.has_key?(key), msg
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class TestCase < Minitest::Test
|
29
|
+
extend BlockTestHelper
|
30
|
+
include CustomAssertions
|
31
|
+
end
|
32
|
+
|
33
|
+
class StrategyTestCase < TestCase
|
34
|
+
def setup
|
35
|
+
@request = stub("Request")
|
36
|
+
@request.stubs(:params).returns({})
|
37
|
+
@request.stubs(:cookies).returns({})
|
38
|
+
@request.stubs(:env).returns({})
|
39
|
+
@request.stubs(:scheme).returns({})
|
40
|
+
@request.stubs(:ssl?).returns(false)
|
41
|
+
|
42
|
+
@client_id = "123"
|
43
|
+
@client_secret = "53cr3tz"
|
44
|
+
end
|
45
|
+
|
46
|
+
def strategy
|
47
|
+
@strategy ||= begin
|
48
|
+
args = [@client_id, @client_secret, @options].compact
|
49
|
+
OmniAuth::Strategies::Slack.new(nil, *args).tap do |strategy|
|
50
|
+
strategy.stubs(:request).returns(@request)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Dir[File.expand_path("../support/**/*", __FILE__)].each &method(:require)
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# NOTE it would be useful if this lived in omniauth-oauth2 eventually
|
2
|
+
module OAuth2StrategyTests
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
include ClientTests
|
6
|
+
include AuthorizeParamsTests
|
7
|
+
include CSRFAuthorizeParamsTests
|
8
|
+
include TokenParamsTests
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClientTests
|
13
|
+
extend BlockTestHelper
|
14
|
+
|
15
|
+
test "should be initialized with symbolized client_options" do
|
16
|
+
@options = { :client_options => { "authorize_url" => "https://example.com" } }
|
17
|
+
assert_equal "https://example.com", strategy.client.options[:authorize_url]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module AuthorizeParamsTests
|
22
|
+
extend BlockTestHelper
|
23
|
+
|
24
|
+
test "should include any authorize params passed in the :authorize_params option" do
|
25
|
+
@options = { :authorize_params => { :foo => "bar", :baz => "zip" } }
|
26
|
+
assert_equal "bar", strategy.authorize_params["foo"]
|
27
|
+
assert_equal "zip", strategy.authorize_params["baz"]
|
28
|
+
end
|
29
|
+
|
30
|
+
test "should include top-level options that are marked as :authorize_options" do
|
31
|
+
@options = { :authorize_options => [:scope, :foo], :scope => "bar", :foo => "baz" }
|
32
|
+
assert_equal "bar", strategy.authorize_params["scope"]
|
33
|
+
assert_equal "baz", strategy.authorize_params["foo"]
|
34
|
+
end
|
35
|
+
|
36
|
+
test "should exclude top-level options that are not passed" do
|
37
|
+
@options = { :authorize_options => [:bar] }
|
38
|
+
refute_has_key :bar, strategy.authorize_params
|
39
|
+
refute_has_key "bar", strategy.authorize_params
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module CSRFAuthorizeParamsTests
|
44
|
+
extend BlockTestHelper
|
45
|
+
|
46
|
+
test "should store random state in the session when none is present in authorize or request params" do
|
47
|
+
assert_includes strategy.authorize_params.keys, "state"
|
48
|
+
refute_empty strategy.authorize_params["state"]
|
49
|
+
refute_empty strategy.session["omniauth.state"]
|
50
|
+
assert_equal strategy.authorize_params["state"], strategy.session["omniauth.state"]
|
51
|
+
end
|
52
|
+
|
53
|
+
test "should not store state in the session when present in authorize params vs. a random one" do
|
54
|
+
@options = { :authorize_params => { :state => "bar" } }
|
55
|
+
refute_empty strategy.authorize_params["state"]
|
56
|
+
refute_equal "bar", strategy.authorize_params[:state]
|
57
|
+
refute_empty strategy.session["omniauth.state"]
|
58
|
+
refute_equal "bar", strategy.session["omniauth.state"]
|
59
|
+
end
|
60
|
+
|
61
|
+
test "should not store state in the session when present in request params vs. a random one" do
|
62
|
+
@request.stubs(:params).returns({ "state" => "foo" })
|
63
|
+
refute_empty strategy.authorize_params["state"]
|
64
|
+
refute_equal "foo", strategy.authorize_params[:state]
|
65
|
+
refute_empty strategy.session["omniauth.state"]
|
66
|
+
refute_equal "foo", strategy.session["omniauth.state"]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
module TokenParamsTests
|
71
|
+
extend BlockTestHelper
|
72
|
+
|
73
|
+
test "should include any authorize params passed in the :token_params option" do
|
74
|
+
@options = { :token_params => { :foo => "bar", :baz => "zip" } }
|
75
|
+
assert_equal "bar", strategy.token_params["foo"]
|
76
|
+
assert_equal "zip", strategy.token_params["baz"]
|
77
|
+
end
|
78
|
+
|
79
|
+
test "should include top-level options that are marked as :token_options" do
|
80
|
+
@options = { :token_options => [:scope, :foo], :scope => "bar", :foo => "baz" }
|
81
|
+
assert_equal "bar", strategy.token_params["scope"]
|
82
|
+
assert_equal "baz", strategy.token_params["foo"]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/test/test.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require "helper"
|
2
|
+
require "omniauth-slack"
|
3
|
+
|
4
|
+
class StrategyTest < StrategyTestCase
|
5
|
+
include OAuth2StrategyTests
|
6
|
+
end
|
7
|
+
|
8
|
+
class ClientTest < StrategyTestCase
|
9
|
+
test "has correct Slack site" do
|
10
|
+
assert_equal "https://slack.com", strategy.client.site
|
11
|
+
end
|
12
|
+
|
13
|
+
test "has correct authorize url" do
|
14
|
+
assert_equal "/oauth/authorize", strategy.client.options[:authorize_url]
|
15
|
+
end
|
16
|
+
|
17
|
+
test "has correct token url" do
|
18
|
+
assert_equal "/api/oauth.access", strategy.client.options[:token_url]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class CallbackUrlTest < StrategyTestCase
|
23
|
+
test "returns the default callback url" do
|
24
|
+
url_base = "http://auth.request.com"
|
25
|
+
@request.stubs(:url).returns("#{url_base}/some/page")
|
26
|
+
strategy.stubs(:script_name).returns("") # as not to depend on Rack env
|
27
|
+
assert_equal "#{url_base}/auth/slack/callback", strategy.callback_url
|
28
|
+
end
|
29
|
+
|
30
|
+
test "returns path from callback_path option" do
|
31
|
+
@options = { :callback_path => "/auth/slack/done"}
|
32
|
+
url_base = "http://auth.request.com"
|
33
|
+
@request.stubs(:url).returns("#{url_base}/page/path")
|
34
|
+
strategy.stubs(:script_name).returns("") # as not to depend on Rack env
|
35
|
+
assert_equal "#{url_base}/auth/slack/done", strategy.callback_url
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class UidTest < StrategyTestCase
|
40
|
+
def setup
|
41
|
+
super
|
42
|
+
strategy.stubs(:raw_info).returns("user_id" => "U123")
|
43
|
+
end
|
44
|
+
|
45
|
+
test "returns the user ID from raw_info" do
|
46
|
+
assert_equal "U123", strategy.uid
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class CredentialsTest < StrategyTestCase
|
51
|
+
def setup
|
52
|
+
super
|
53
|
+
@access_token = stub("OAuth2::AccessToken")
|
54
|
+
@access_token.stubs(:token)
|
55
|
+
@access_token.stubs(:expires?)
|
56
|
+
@access_token.stubs(:expires_at)
|
57
|
+
@access_token.stubs(:refresh_token)
|
58
|
+
strategy.stubs(:access_token).returns(@access_token)
|
59
|
+
end
|
60
|
+
|
61
|
+
test "returns a Hash" do
|
62
|
+
assert_kind_of Hash, strategy.credentials
|
63
|
+
end
|
64
|
+
|
65
|
+
test "returns the token" do
|
66
|
+
@access_token.stubs(:token).returns("123")
|
67
|
+
assert_equal "123", strategy.credentials["token"]
|
68
|
+
end
|
69
|
+
|
70
|
+
test "returns the expiry status" do
|
71
|
+
@access_token.stubs(:expires?).returns(true)
|
72
|
+
assert strategy.credentials["expires"]
|
73
|
+
|
74
|
+
@access_token.stubs(:expires?).returns(false)
|
75
|
+
refute strategy.credentials["expires"]
|
76
|
+
end
|
77
|
+
|
78
|
+
test "returns the refresh token and expiry time when expiring" do
|
79
|
+
ten_mins_from_now = (Time.now + 600).to_i
|
80
|
+
@access_token.stubs(:expires?).returns(true)
|
81
|
+
@access_token.stubs(:refresh_token).returns("321")
|
82
|
+
@access_token.stubs(:expires_at).returns(ten_mins_from_now)
|
83
|
+
assert_equal "321", strategy.credentials["refresh_token"]
|
84
|
+
assert_equal ten_mins_from_now, strategy.credentials["expires_at"]
|
85
|
+
end
|
86
|
+
|
87
|
+
test "does not return the refresh token when test is nil and expiring" do
|
88
|
+
@access_token.stubs(:expires?).returns(true)
|
89
|
+
@access_token.stubs(:refresh_token).returns(nil)
|
90
|
+
assert_nil strategy.credentials["refresh_token"]
|
91
|
+
refute_has_key "refresh_token", strategy.credentials
|
92
|
+
end
|
93
|
+
|
94
|
+
test "does not return the refresh token when not expiring" do
|
95
|
+
@access_token.stubs(:expires?).returns(false)
|
96
|
+
@access_token.stubs(:refresh_token).returns("XXX")
|
97
|
+
assert_nil strategy.credentials["refresh_token"]
|
98
|
+
refute_has_key "refresh_token", strategy.credentials
|
99
|
+
end
|
100
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-slack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kimura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth-oauth2
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
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: mocha
|
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'
|
55
83
|
description: OmniAuth strategy for Slack
|
56
84
|
email:
|
57
85
|
- kimura@enigmo.co.jp
|
@@ -68,6 +96,9 @@ files:
|
|
68
96
|
- lib/omniauth-slack/version.rb
|
69
97
|
- lib/omniauth/strategies/slack.rb
|
70
98
|
- omniauth-slack.gemspec
|
99
|
+
- test/helper.rb
|
100
|
+
- test/support/shared_examples.rb
|
101
|
+
- test/test.rb
|
71
102
|
homepage: https://github.com/kmrshntr/omniauth-slack.git
|
72
103
|
licenses:
|
73
104
|
- MIT
|
@@ -92,4 +123,7 @@ rubygems_version: 2.4.3
|
|
92
123
|
signing_key:
|
93
124
|
specification_version: 4
|
94
125
|
summary: OmniAuth strategy for Slack
|
95
|
-
test_files:
|
126
|
+
test_files:
|
127
|
+
- test/helper.rb
|
128
|
+
- test/support/shared_examples.rb
|
129
|
+
- test/test.rb
|