Commit b45e92646e3f91c60e25197d68f72f50b1754c99
1 parent
cdc4d64d
Exists in
master
and in
4 other branches
Added Gitlab::OAuth::User class
Authenticate or create users from OAuth providers
Showing
1 changed file
with
85 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,85 @@ | @@ -0,0 +1,85 @@ | ||
1 | +# OAuth extension for User model | ||
2 | +# | ||
3 | +# * Find GitLab user based on omniauth uid and provider | ||
4 | +# * Create new user from omniauth data | ||
5 | +# | ||
6 | +module Gitlab | ||
7 | + module OAuth | ||
8 | + class User | ||
9 | + class << self | ||
10 | + attr_reader :auth | ||
11 | + | ||
12 | + def find(auth) | ||
13 | + @auth = auth | ||
14 | + find_by_uid_and_provider | ||
15 | + end | ||
16 | + | ||
17 | + def create(auth) | ||
18 | + @auth = auth | ||
19 | + password = Devise.friendly_token[0, 8].downcase | ||
20 | + opts = { | ||
21 | + extern_uid: uid, | ||
22 | + provider: provider, | ||
23 | + name: name, | ||
24 | + username: username, | ||
25 | + email: email, | ||
26 | + password: password, | ||
27 | + password_confirmation: password, | ||
28 | + } | ||
29 | + | ||
30 | + user = model.new(opts, as: :admin).with_defaults | ||
31 | + user.save! | ||
32 | + log.info "(OAuth) Creating user #{email} from login with extern_uid => #{uid}" | ||
33 | + | ||
34 | + if Gitlab.config.omniauth['block_auto_created_users'] && !ldap? | ||
35 | + user.block | ||
36 | + end | ||
37 | + | ||
38 | + user | ||
39 | + end | ||
40 | + | ||
41 | + private | ||
42 | + | ||
43 | + def find_by_uid_and_provider | ||
44 | + model.where(provider: provider, extern_uid: uid).last | ||
45 | + end | ||
46 | + | ||
47 | + def uid | ||
48 | + auth.info.uid || auth.uid | ||
49 | + end | ||
50 | + | ||
51 | + def email | ||
52 | + auth.info.email.downcase unless auth.info.email.nil? | ||
53 | + end | ||
54 | + | ||
55 | + def name | ||
56 | + auth.info.name.to_s.force_encoding("utf-8") | ||
57 | + end | ||
58 | + | ||
59 | + def username | ||
60 | + email.match(/^[^@]*/)[0] | ||
61 | + end | ||
62 | + | ||
63 | + def provider | ||
64 | + auth.provider | ||
65 | + end | ||
66 | + | ||
67 | + def log | ||
68 | + Gitlab::AppLogger | ||
69 | + end | ||
70 | + | ||
71 | + def model | ||
72 | + ::User | ||
73 | + end | ||
74 | + | ||
75 | + def raise_error(message) | ||
76 | + raise OmniAuth::Error, "(OAuth) " + message | ||
77 | + end | ||
78 | + | ||
79 | + def ldap? | ||
80 | + provider == 'ldap' | ||
81 | + end | ||
82 | + end | ||
83 | + end | ||
84 | + end | ||
85 | +end |