omniauth-sso 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 111da4779b9e7496a842be9b9ac7c59c8d1602a6
4
+ data.tar.gz: e891441a4686edf2bba54f8cd779df80633d33ed
5
+ SHA512:
6
+ metadata.gz: 0e681b20ce55b3a24f085918bcc908f5d938c23e7aab7535890dcca2a904826aef6eac85c7392ab5eecb2dfc352fd1bc872800f9250d936451afd5512e4d9f1d
7
+ data.tar.gz: 0bfff97cc8b8ce62c254703724b3fe7b710f90c572d51ee13f2aa0e167ae145d8ab1933ddebe20be32f26288ac369a3f3d5d38c8f774c28e9465f15f0813b387
@@ -0,0 +1,11 @@
1
+ <a name="0.1.0"></a>
2
+ ### 0.1.0 (2017-01-15)
3
+
4
+
5
+ #### Features
6
+
7
+ * use latest rbsso with checks for expiry and service_id ([ae91d93](/../../commit/ae91d93))
8
+ * initial Omniauth Strategy ([925f544](/../../commit/925f544))
9
+
10
+
11
+
@@ -0,0 +1,5 @@
1
+ Omniauth Strategy to use autistici / inventati sso.
2
+
3
+ Used like other omniauth strategies. Requires a key to validate signatures and a service_id to identify the service itself.
4
+
5
+ The constructor takes the service_id and the verification key as parameters. In comparison with other services they replace the id and the secret provided by the IDP.
@@ -0,0 +1,50 @@
1
+ require 'omniauth'
2
+ require 'rbsso/client'
3
+ require 'cgi'
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ class SSO
8
+ include OmniAuth::Strategy
9
+
10
+ args [:service_id, :client_key]
11
+ option :fields, [:name, :email]
12
+ option :uid_field, :email
13
+
14
+ SSO_URL = 'neststaging.riseup.net/sso_auth'
15
+
16
+ def request_phase
17
+ redirect authorize_url(options.authorize_params)
18
+ end
19
+
20
+ uid do
21
+ info_from_ticket[options.uid_field]
22
+ end
23
+
24
+ info do
25
+ info_from_ticket.select{|key,_val| options.fields.include? key}
26
+ end
27
+
28
+ def authorize_url(_params_from_options)
29
+ "https://#{SSO_URL}/?s=#{service_param}"
30
+ end
31
+
32
+ def service_param
33
+ CGI.escape options.service_id
34
+ end
35
+
36
+ def name
37
+ 'sso'
38
+ end
39
+
40
+ def info_from_ticket
41
+ @info_from_ticket ||= client.open request["t"]
42
+ end
43
+
44
+ def client
45
+ RbSSO::Client.new options.service_id, options.client_key
46
+ end
47
+ end
48
+ end
49
+ end
50
+ OmniAuth.config.add_camelization "sso" , "SSO"
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+ require 'bundler'
3
+
4
+ class GemspecTest < Minitest::Test
5
+
6
+ def test_valid
7
+ spec_path = File.expand_path('../../omniauth-sso.gemspec', __FILE__)
8
+ spec = Bundler.load_gemspec(spec_path)
9
+ spec.validate
10
+ end
11
+
12
+ end
@@ -0,0 +1,93 @@
1
+ require 'test_helper'
2
+ require 'omniauth'
3
+ require 'logger'
4
+ require 'rack/test'
5
+ require 'omniauth/strategies/sso'
6
+ require 'rbsso'
7
+
8
+ class OmniAuth::Strategies::SSOTest < Minitest::Test
9
+ include OmniAuth::Test::StrategyTestCase
10
+ include Rack::Test::Methods
11
+
12
+ def setup
13
+ OmniAuth.config.logger = Logger.new '/dev/null'
14
+ end
15
+
16
+ def strategy
17
+ [OmniAuth::Strategies::SSO, 'https://my.service.id/', verify_key]
18
+ end
19
+
20
+ def test_redirect
21
+ get 'auth/sso'
22
+ assert last_response.redirect?
23
+ assert_includes last_response.location,
24
+ 'https://neststaging.riseup.net/sso_auth'
25
+ assert_includes last_response.location,
26
+ "s=#{CGI.escape(service)}"
27
+ end
28
+
29
+ def test_valid_ticket
30
+ post '/auth/sso/callback', t: ticket
31
+ assert auth_hash
32
+ assert_equal 'sso', auth_hash['provider']
33
+ assert_equal 'user@domain', auth_hash['uid']
34
+ assert_equal 'user@domain', auth_hash['info'].email
35
+ assert_equal 'user', auth_hash['info'].name
36
+ end
37
+
38
+ def test_expired_ticket
39
+ assert_raises RuntimeError do
40
+ post '/auth/sso/callback', t: expired_ticket
41
+ end
42
+ assert_nil auth_hash
43
+ end
44
+
45
+ def test_invalid_ticket
46
+ post '/auth/my_strategy/callback', t: invalid_ticket
47
+ assert_nil auth_hash
48
+ end
49
+
50
+ def test_wrong_service
51
+ assert_raises RuntimeError do
52
+ post '/auth/sso/callback', t: ticket_for_other_service
53
+ end
54
+ assert_nil auth_hash
55
+ end
56
+
57
+ def auth_hash
58
+ last_request.env['omniauth.auth']
59
+ end
60
+
61
+ def expired_ticket
62
+ Time.stub :now, Time.at(123456) do
63
+ ticket
64
+ end
65
+ end
66
+
67
+ def ticket_for_other_service
68
+ server.ticket user: user, service: 'other_service', domain: domain
69
+ end
70
+
71
+ # We modify the content of the ticket so the signature becomes invalid.
72
+ # It still should have the right length and be Base64 compatible.
73
+ def invalid_ticket
74
+ ticket.tap do |string|
75
+ string[100..112] = '///invalid///'
76
+ end
77
+ end
78
+
79
+ def verify_key
80
+ server.verify_key
81
+ end
82
+
83
+ def ticket
84
+ server.ticket(user: user, service: service, domain: domain)
85
+ end
86
+
87
+ def server; RbSSO::Server.new seed; end
88
+ def seed; '1234567890ABCDEF' * 4; end
89
+ def user; 'user'; end
90
+ def service; 'https://my.service.id/'; end
91
+ def domain; 'domain'; end
92
+
93
+ end
@@ -0,0 +1,7 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter "/test/"
4
+ add_filter "/vendor/ruby"
5
+ end
6
+
7
+ require 'minitest/autorun'
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniauth-sso
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Azul
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-25 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.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rbsso
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '10'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '13'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '10'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '13'
61
+ - !ruby/object:Gem::Dependency
62
+ name: minitest
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '5.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: minitest-autotest
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: autotest-suffix
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.1'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.1'
103
+ - !ruby/object:Gem::Dependency
104
+ name: simplecov
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.11'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.11'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rack-test
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.6'
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 0.6.3
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '0.6'
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 0.6.3
137
+ - !ruby/object:Gem::Dependency
138
+ name: conventional-changelog
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '1.2'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '1.2'
151
+ description: 'Omniauth strategy for "ai''s sso"(https://git.autistici.org/ai/sso)
152
+ based on rbsso.
153
+
154
+ '
155
+ email: azul@riseup.net
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - CHANGELOG.md
161
+ - README.md
162
+ - lib/omniauth/strategies/sso.rb
163
+ - test/gemspec_test.rb
164
+ - test/omniauth/strategies/sso_test.rb
165
+ - test/test_helper.rb
166
+ homepage: https://0xacab.org/riseup/omniauth-sso
167
+ licenses:
168
+ - MIT
169
+ metadata: {}
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.5.1
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: Omniauth strategy for ai's sso
190
+ test_files:
191
+ - test/test_helper.rb
192
+ - test/gemspec_test.rb
193
+ - test/omniauth/strategies/sso_test.rb