Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/omniauth_crowd/lib/omniauth/strategies/crowd.rb')
-rwxr-xr-xvendor/gems/omniauth_crowd/lib/omniauth/strategies/crowd.rb97
1 files changed, 97 insertions, 0 deletions
diff --git a/vendor/gems/omniauth_crowd/lib/omniauth/strategies/crowd.rb b/vendor/gems/omniauth_crowd/lib/omniauth/strategies/crowd.rb
new file mode 100755
index 00000000000..7e3829b9b95
--- /dev/null
+++ b/vendor/gems/omniauth_crowd/lib/omniauth/strategies/crowd.rb
@@ -0,0 +1,97 @@
+require 'omniauth'
+require 'active_support'
+require 'active_support/core_ext/object'
+module OmniAuth
+ module Strategies
+ class Crowd
+ include OmniAuth::Strategy
+
+ autoload :Configuration, 'omniauth/strategies/crowd/configuration'
+ autoload :CrowdValidator, 'omniauth/strategies/crowd/crowd_validator'
+ def initialize(app, options = {}, &block)
+ options.symbolize_keys!()
+ super(app, {:name=> :crowd}.merge(options), &block)
+ @configuration = OmniAuth::Strategies::Crowd::Configuration.new(options)
+ end
+
+ protected
+
+ def request_phase
+ if env['REQUEST_METHOD'] == 'GET'
+
+ if @configuration.use_sessions? && request.cookies[@configuration.session_cookie]
+ redirect callback_url
+ else
+ get_credentials
+ end
+
+ elsif (env['REQUEST_METHOD'] == 'POST') && (not request.params['username'])
+ get_credentials
+ else
+ session['omniauth.crowd'] = {'username' => request['username'], 'password' => request['password']}
+ redirect callback_url
+ end
+ end
+
+ def get_client_ip
+ env['HTTP_X_FORWARDED_FOR'] ? env['HTTP_X_FORWARDED_FOR'] : env['REMOTE_ADDRESS']
+ end
+
+ def get_sso_tokens
+ env['HTTP_COOKIE'].split(';').select { |val|
+ val.strip.start_with?(@configuration.session_cookie)
+ }.map { |val|
+ val.strip.split('=').last
+ }
+ end
+
+ def get_credentials
+
+ configuration = @configuration
+
+ OmniAuth::Form.build(:title => (options[:title] || "Crowd Authentication")) do
+ text_field 'Login', 'username'
+ password_field 'Password', 'password'
+
+ if configuration.use_sessions? && configuration.sso_url
+ fieldset 'SSO' do
+ html "<a href=\"#{configuration.sso_url}/users/auth/crowd/callback\">" + (configuration.sso_url_image ? "<img src=\"#{configuration.sso_url_image}\" />" : '') + "</a>"
+ end
+ end
+
+ end.to_response
+
+ end
+
+ def callback_phase
+
+ creds = session.delete 'omniauth.crowd'
+ username = creds.nil? ? nil : creds['username']
+ password = creds.nil? ? nil : creds['password']
+
+ unless creds
+ if @configuration.use_sessions? && request.cookies[@configuration.session_cookie]
+ validator = CrowdValidator.new(@configuration, username, password, get_client_ip, get_sso_tokens)
+ else
+ return fail!(:no_credentials)
+ end
+ else
+ validator = CrowdValidator.new(@configuration, username, password, get_client_ip, nil)
+ end
+
+ @user_info = validator.user_info
+
+ return fail!(:invalid_credentials) if @user_info.nil? || @user_info.empty?
+
+ super
+ end
+
+ def auth_hash
+ OmniAuth::Utils.deep_merge(super, {
+ 'uid' => @user_info.delete("user"),
+ 'info' => @user_info
+ })
+ end
+ end
+ end
+end