env.rb
1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Based on code from the oa-env gem
require 'pg'
require 'omniauth'
require 'omniauth-ldap/adaptor'
module OmniAuth
module Strategies
class Env
include OmniAuth::Strategy
def env_user
if env['HTTP_REMOTE_USER'] && env['HTTP_REMOTE_USER'] != ''
env['HTTP_REMOTE_USER']
else
env['HTTP_X_FORWARDED_USER']
end
end
def request_phase
@user_data = {}
return fail!(:no_user) unless env_user
@uid = env_user.gsub(/@.*/, '')
# fill in some defaults
@user_data[:name] = @uid
@user_data[:email] = env_user
fill_ldap_info unless @options.empty?
@env['omniauth.auth'] = auth_hash
@env['REQUEST_METHOD'] = 'GET'
@env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback"
call_app!
end
uid { @uid }
info { @user_data }
private
def fill_ldap_info
conn = PG::Connection.open(
:dbname => Gitlab.config.env['database_name'],
:host => Gitlab.config.env['host'],
:user => Gitlab.config.env['user'],
:password => Gitlab.config.env['password'],
)
res = conn.exec("select email, first_name from accounts_user where username='#{@uid}';")
@user_data[:email] = res[0]['email']
@user_data[:name] = res[0]['first_name']
end
end
end
end