openshift-origin-auth-remote-user 1.2.3

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.
Files changed (59) hide show
  1. data/COPYRIGHT +1 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +11 -0
  4. data/README-KERB +66 -0
  5. data/README-LDAP +25 -0
  6. data/README.md +3 -0
  7. data/Rakefile +11 -0
  8. data/conf/openshift-origin-auth-remote-user-basic.conf.sample +37 -0
  9. data/conf/openshift-origin-auth-remote-user-kerberos.conf.sample +41 -0
  10. data/conf/openshift-origin-auth-remote-user-ldap.conf.sample +46 -0
  11. data/conf/openshift-origin-auth-remote-user.conf.example +1 -0
  12. data/config/initializers/openshift-origin-auth-remote-user.rb +16 -0
  13. data/config/routes.rb +9 -0
  14. data/lib/openshift-origin-auth-remote-user.rb +8 -0
  15. data/lib/openshift/remote_user_auth_service.rb +40 -0
  16. data/lib/remote_user_auth_engine.rb +7 -0
  17. data/openshift-origin-auth-remote-user.gemspec +33 -0
  18. data/rubygem-openshift-origin-auth-remote-user.spec +110 -0
  19. data/test/dummy/Gemfile +32 -0
  20. data/test/dummy/README +256 -0
  21. data/test/dummy/Rakefile +7 -0
  22. data/test/dummy/app/controllers/application_controller.rb +3 -0
  23. data/test/dummy/app/helpers/application_helper.rb +2 -0
  24. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  25. data/test/dummy/config.ru +4 -0
  26. data/test/dummy/config/application.rb +42 -0
  27. data/test/dummy/config/boot.rb +6 -0
  28. data/test/dummy/config/database.yml +5 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/test.rb +53 -0
  31. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  32. data/test/dummy/config/initializers/inflections.rb +10 -0
  33. data/test/dummy/config/initializers/mime_types.rb +5 -0
  34. data/test/dummy/config/initializers/secret_token.rb +7 -0
  35. data/test/dummy/config/initializers/session_store.rb +8 -0
  36. data/test/dummy/config/locales/en.yml +5 -0
  37. data/test/dummy/config/routes.rb +58 -0
  38. data/test/dummy/db/seeds.rb +7 -0
  39. data/test/dummy/doc/README_FOR_APP +2 -0
  40. data/test/dummy/public/404.html +26 -0
  41. data/test/dummy/public/422.html +26 -0
  42. data/test/dummy/public/500.html +26 -0
  43. data/test/dummy/public/favicon.ico +0 -0
  44. data/test/dummy/public/images/rails.png +0 -0
  45. data/test/dummy/public/index.html +239 -0
  46. data/test/dummy/public/javascripts/application.js +2 -0
  47. data/test/dummy/public/javascripts/controls.js +965 -0
  48. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  49. data/test/dummy/public/javascripts/effects.js +1123 -0
  50. data/test/dummy/public/javascripts/prototype.js +6001 -0
  51. data/test/dummy/public/javascripts/rails.js +191 -0
  52. data/test/dummy/public/robots.txt +5 -0
  53. data/test/dummy/script/rails +6 -0
  54. data/test/dummy/test/performance/browsing_test.rb +9 -0
  55. data/test/dummy/test/test_helper.rb +13 -0
  56. data/test/functional/authenticate_test.rb +23 -0
  57. data/test/test_helper.rb +15 -0
  58. data/test/unit/broker_auth_test.rb +28 -0
  59. metadata +244 -0
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env oo-ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'rails/performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionDispatch::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
7
+ #
8
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
9
+ # -- they do not yet inherit this setting
10
+ fixtures :all
11
+
12
+ # Add more helper methods to be used by all tests here...
13
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class RemoteUserAuthServiceTest < ActionController::TestCase
4
+
5
+ def setup
6
+ @auth_service = OpenShift::RemoteUserAuthService.new
7
+
8
+ @request.env["Accept"] = "application/json"
9
+ end
10
+
11
+ def test_authenticate_success
12
+ @request.env["REMOTE_USER"] = "test"
13
+ data = @auth_service.authenticate(@request, "test", "test")
14
+ assert_equal data[:auth_method], :login
15
+ assert_equal data[:username], "test"
16
+ end
17
+
18
+ def test_authenticate_failure
19
+ assert_raise OpenShift::AccessDeniedException do
20
+ data = @auth_service.authenticate(@request, "foo", "bar")
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ # I wasn't able to get the tests to run in isolation without defining these
2
+ # constants
3
+ module Broker
4
+ class Application
5
+ def self.method_missing(meth, *args, &block)
6
+ puts "Skipping #{meth}"
7
+ end
8
+ end
9
+ end
10
+
11
+ ENV['RAILS_ENV'] = 'test'
12
+ require "dummy/config/environment"
13
+ require "rails/test_help"
14
+ require "rubygems"
15
+ require "mocha"
@@ -0,0 +1,28 @@
1
+ require 'test/unit'
2
+ require 'test_helper'
3
+
4
+ class BrokerAuthTest < Test::Unit::TestCase
5
+ def setup
6
+ test_key_dir = "#{File.dirname(__FILE__)}/../dummy/config/"
7
+ system "/usr/bin/openssl genrsa -out #{test_key_dir}/server_priv.pem 2048"
8
+ system "/usr/bin/openssl rsa -in #{test_key_dir}/server_priv.pem -pubout > #{test_key_dir}/server_pub.pem"
9
+ @auth_service = OpenShift::MongoAuthService.new
10
+ end
11
+
12
+ def test_broker_auth
13
+ app = Mocha::Mock.new
14
+ user = Mocha::Mock.new
15
+ t = Time.new
16
+
17
+ user.expects(:login).returns("foo@example.com")
18
+ app.expects(:name).at_least_once.returns("foo")
19
+ app.expects(:user).returns(user)
20
+ app.expects(:creation_time).at_least_once.returns(t)
21
+
22
+ CloudUser.expects(:find).at_least_once.returns(user)
23
+ user.expects(:applications).at_least_once.returns([app])
24
+
25
+ iv,token = @auth_service.generate_broker_key(app)
26
+ @auth_service.validate_broker_key(iv,token)
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,244 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openshift-origin-auth-remote-user
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 2
9
+ - 3
10
+ version: 1.2.3
11
+ platform: ruby
12
+ authors:
13
+ - Brenton Leanhardt
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-12-05 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: openshift-origin-controller
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: json
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 49
58
+ segments:
59
+ - 0
60
+ - 8
61
+ - 7
62
+ version: 0.8.7
63
+ - - <=
64
+ - !ruby/object:Gem::Version
65
+ hash: 11
66
+ segments:
67
+ - 0
68
+ - 9
69
+ - 2
70
+ - 2
71
+ version: 0.9.2.2
72
+ type: :development
73
+ version_requirements: *id003
74
+ - !ruby/object:Gem::Dependency
75
+ name: bundler
76
+ prerelease: false
77
+ requirement: &id004 !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ type: :development
87
+ version_requirements: *id004
88
+ - !ruby/object:Gem::Dependency
89
+ name: mocha
90
+ prerelease: false
91
+ requirement: &id005 !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ hash: 3
97
+ segments:
98
+ - 0
99
+ version: "0"
100
+ type: :development
101
+ version_requirements: *id005
102
+ description: Provides
103
+ email:
104
+ - bleanhar@redhat.com
105
+ executables: []
106
+
107
+ extensions: []
108
+
109
+ extra_rdoc_files: []
110
+
111
+ files:
112
+ - lib/openshift/remote_user_auth_service.rb
113
+ - lib/openshift-origin-auth-remote-user.rb
114
+ - lib/remote_user_auth_engine.rb
115
+ - conf/openshift-origin-auth-remote-user.conf.example
116
+ - conf/openshift-origin-auth-remote-user-kerberos.conf.sample
117
+ - conf/openshift-origin-auth-remote-user-ldap.conf.sample
118
+ - conf/openshift-origin-auth-remote-user-basic.conf.sample
119
+ - config/routes.rb
120
+ - config/initializers/openshift-origin-auth-remote-user.rb
121
+ - test/unit/broker_auth_test.rb
122
+ - test/functional/authenticate_test.rb
123
+ - test/dummy/app/views/layouts/application.html.erb
124
+ - test/dummy/app/controllers/application_controller.rb
125
+ - test/dummy/app/helpers/application_helper.rb
126
+ - test/dummy/config/application.rb
127
+ - test/dummy/config/routes.rb
128
+ - test/dummy/config/initializers/inflections.rb
129
+ - test/dummy/config/initializers/secret_token.rb
130
+ - test/dummy/config/initializers/backtrace_silencers.rb
131
+ - test/dummy/config/initializers/mime_types.rb
132
+ - test/dummy/config/initializers/session_store.rb
133
+ - test/dummy/config/environments/test.rb
134
+ - test/dummy/config/boot.rb
135
+ - test/dummy/config/environment.rb
136
+ - test/dummy/config/database.yml
137
+ - test/dummy/config/locales/en.yml
138
+ - test/dummy/doc/README_FOR_APP
139
+ - test/dummy/script/rails
140
+ - test/dummy/Gemfile
141
+ - test/dummy/config.ru
142
+ - test/dummy/Rakefile
143
+ - test/dummy/public/images/rails.png
144
+ - test/dummy/public/index.html
145
+ - test/dummy/public/404.html
146
+ - test/dummy/public/favicon.ico
147
+ - test/dummy/public/422.html
148
+ - test/dummy/public/500.html
149
+ - test/dummy/public/robots.txt
150
+ - test/dummy/public/javascripts/application.js
151
+ - test/dummy/public/javascripts/dragdrop.js
152
+ - test/dummy/public/javascripts/controls.js
153
+ - test/dummy/public/javascripts/prototype.js
154
+ - test/dummy/public/javascripts/rails.js
155
+ - test/dummy/public/javascripts/effects.js
156
+ - test/dummy/db/seeds.rb
157
+ - test/dummy/test/performance/browsing_test.rb
158
+ - test/dummy/test/test_helper.rb
159
+ - test/dummy/README
160
+ - test/test_helper.rb
161
+ - README.md
162
+ - Rakefile
163
+ - Gemfile
164
+ - rubygem-openshift-origin-auth-remote-user.spec
165
+ - openshift-origin-auth-remote-user.gemspec
166
+ - LICENSE
167
+ - COPYRIGHT
168
+ - README-LDAP
169
+ - README-KERB
170
+ has_rdoc: true
171
+ homepage: http://openshift.redhat.com
172
+ licenses:
173
+ - ASL
174
+ post_install_message:
175
+ rdoc_options: []
176
+
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ hash: 3
185
+ segments:
186
+ - 0
187
+ version: "0"
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ hash: 3
194
+ segments:
195
+ - 0
196
+ version: "0"
197
+ requirements: []
198
+
199
+ rubyforge_project: openshift-origin-auth-remote-user
200
+ rubygems_version: 1.3.7
201
+ signing_key:
202
+ specification_version: 3
203
+ summary: Provides
204
+ test_files:
205
+ - test/unit/broker_auth_test.rb
206
+ - test/functional/authenticate_test.rb
207
+ - test/dummy/app/views/layouts/application.html.erb
208
+ - test/dummy/app/controllers/application_controller.rb
209
+ - test/dummy/app/helpers/application_helper.rb
210
+ - test/dummy/config/application.rb
211
+ - test/dummy/config/routes.rb
212
+ - test/dummy/config/initializers/inflections.rb
213
+ - test/dummy/config/initializers/secret_token.rb
214
+ - test/dummy/config/initializers/backtrace_silencers.rb
215
+ - test/dummy/config/initializers/mime_types.rb
216
+ - test/dummy/config/initializers/session_store.rb
217
+ - test/dummy/config/environments/test.rb
218
+ - test/dummy/config/boot.rb
219
+ - test/dummy/config/environment.rb
220
+ - test/dummy/config/database.yml
221
+ - test/dummy/config/locales/en.yml
222
+ - test/dummy/doc/README_FOR_APP
223
+ - test/dummy/script/rails
224
+ - test/dummy/Gemfile
225
+ - test/dummy/config.ru
226
+ - test/dummy/Rakefile
227
+ - test/dummy/public/images/rails.png
228
+ - test/dummy/public/index.html
229
+ - test/dummy/public/404.html
230
+ - test/dummy/public/favicon.ico
231
+ - test/dummy/public/422.html
232
+ - test/dummy/public/500.html
233
+ - test/dummy/public/robots.txt
234
+ - test/dummy/public/javascripts/application.js
235
+ - test/dummy/public/javascripts/dragdrop.js
236
+ - test/dummy/public/javascripts/controls.js
237
+ - test/dummy/public/javascripts/prototype.js
238
+ - test/dummy/public/javascripts/rails.js
239
+ - test/dummy/public/javascripts/effects.js
240
+ - test/dummy/db/seeds.rb
241
+ - test/dummy/test/performance/browsing_test.rb
242
+ - test/dummy/test/test_helper.rb
243
+ - test/dummy/README
244
+ - test/test_helper.rb