mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-10 21:26:07 +10:00
Now you are able to specify LDAP user filter string in gitlab.yml. So its possible to exclude some users from accessing gitlab. If user with LDAP account not matching this filter will try to login or use gitlab he will get error message like 'Access denied for your LDAP account' and will be signed out.
64 lines
1.8 KiB
Ruby
64 lines
1.8 KiB
Ruby
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|
Gitlab.config.omniauth.providers.each do |provider|
|
|
define_method provider['name'] do
|
|
handle_omniauth
|
|
end
|
|
end
|
|
|
|
# Extend the standard message generation to accept our custom exception
|
|
def failure_message
|
|
exception = env["omniauth.error"]
|
|
error = exception.error_reason if exception.respond_to?(:error_reason)
|
|
error ||= exception.error if exception.respond_to?(:error)
|
|
error ||= exception.message if exception.respond_to?(:message)
|
|
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.
|
|
@user = Gitlab::LDAP::User.find_or_create(oauth)
|
|
@user.remember_me = true if @user.persisted?
|
|
|
|
if gitlab_ldap_access.allowed?(@user)
|
|
gitlab_ldap_access.update_permissions(@user)
|
|
sign_in_and_redirect(@user)
|
|
else
|
|
flash[:alert] = "Access denied for your LDAP account."
|
|
redirect_to new_user_session_path
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def handle_omniauth
|
|
if current_user
|
|
# Change a logged-in user's authentication method:
|
|
current_user.extern_uid = oauth['uid']
|
|
current_user.provider = oauth['provider']
|
|
current_user.save
|
|
redirect_to profile_path
|
|
else
|
|
@user = Gitlab::OAuth::User.find(oauth)
|
|
|
|
# Create user if does not exist
|
|
# and allow_single_sign_on is true
|
|
if Gitlab.config.omniauth['allow_single_sign_on']
|
|
@user ||= Gitlab::OAuth::User.create(oauth)
|
|
end
|
|
|
|
if @user
|
|
sign_in_and_redirect(@user)
|
|
else
|
|
flash[:notice] = "There's no such user!"
|
|
redirect_to new_user_session_path
|
|
end
|
|
end
|
|
end
|
|
|
|
def oauth
|
|
@oauth ||= request.env['omniauth.auth']
|
|
end
|
|
end
|