omniauth-slack 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/kmrshntr/omniauth-slack/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
99
|
+
|
100
|
+
|
101
|
+
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/kmrshntr/omniauth-slack/trend.png)](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
|