diff options
author | Florian Unglaub <florian.unglaub@nix-wie-weg.de> | 2012-08-03 17:27:39 +0200 |
---|---|---|
committer | Florian Unglaub <florian.unglaub@nix-wie-weg.de> | 2012-08-17 15:20:55 +0200 |
commit | a64aff2f1c1ddc77b00211489d74fbc23c0c2fa2 (patch) | |
tree | 3d3511aaa5d59b098d87e209b96b7ca08b56e3f9 /app/controllers/omniauth_callbacks_controller.rb | |
parent | 4ce034ca6526e34d71fb1a483a82be2486237e6b (diff) | |
download | gitlab-ce-a64aff2f1c1ddc77b00211489d74fbc23c0c2fa2.tar.gz |
Omniauth Support
Diffstat (limited to 'app/controllers/omniauth_callbacks_controller.rb')
-rw-r--r-- | app/controllers/omniauth_callbacks_controller.rb | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index d19931e93d7..84e578a3865 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -9,7 +9,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController error ||= env["omniauth.error.type"].to_s error.to_s.humanize if error end - + def ldap # We only find ourselves here if the authentication to LDAP was successful. info = request.env["omniauth.auth"]["info"] @@ -20,4 +20,34 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController sign_in_and_redirect @user end + Settings.omniauth_providers.each do |provider| + define_method provider['name'] do + handle_omniauth + end + end + + private + + def handle_omniauth + oauth = request.env['omniauth.auth'] + provider, uid = oauth['provider'], oauth['uid'] + + if current_user + # Change a logged-in user's authentication method: + current_user.uid = uid + current_user.provider = provider + current_user.save + redirect_to profile_path + else + @user = User.find_by_provider_and_uid(provider, uid) + + if @user + sign_in_and_redirect @user + else + flash[:notice] = "There's no such user!" + redirect_to new_user_session_path + end + end + end + end |