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:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-09-04 01:04:27 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-09-04 01:04:27 +0400
commitb45e92646e3f91c60e25197d68f72f50b1754c99 (patch)
treed3866ab441122d0e7bd02063f7390646f9e7e122
parentcdc4d64da6fc6fbb6c3b78c5e07cdddd91a4c900 (diff)
Added Gitlab::OAuth::User class
Authenticate or create users from OAuth providers
-rw-r--r--lib/gitlab/oauth/user.rb85
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/gitlab/oauth/user.rb b/lib/gitlab/oauth/user.rb
new file mode 100644
index 00000000000..515c5b769e5
--- /dev/null
+++ b/lib/gitlab/oauth/user.rb
@@ -0,0 +1,85 @@
+# OAuth extension for User model
+#
+# * Find GitLab user based on omniauth uid and provider
+# * Create new user from omniauth data
+#
+module Gitlab
+ module OAuth
+ class User
+ class << self
+ attr_reader :auth
+
+ def find(auth)
+ @auth = auth
+ find_by_uid_and_provider
+ end
+
+ def create(auth)
+ @auth = auth
+ password = Devise.friendly_token[0, 8].downcase
+ opts = {
+ extern_uid: uid,
+ provider: provider,
+ name: name,
+ username: username,
+ email: email,
+ password: password,
+ password_confirmation: password,
+ }
+
+ user = model.new(opts, as: :admin).with_defaults
+ user.save!
+ log.info "(OAuth) Creating user #{email} from login with extern_uid => #{uid}"
+
+ if Gitlab.config.omniauth['block_auto_created_users'] && !ldap?
+ user.block
+ end
+
+ user
+ end
+
+ private
+
+ def find_by_uid_and_provider
+ model.where(provider: provider, extern_uid: uid).last
+ end
+
+ def uid
+ auth.info.uid || auth.uid
+ end
+
+ def email
+ auth.info.email.downcase unless auth.info.email.nil?
+ end
+
+ def name
+ auth.info.name.to_s.force_encoding("utf-8")
+ end
+
+ def username
+ email.match(/^[^@]*/)[0]
+ end
+
+ def provider
+ auth.provider
+ end
+
+ def log
+ Gitlab::AppLogger
+ end
+
+ def model
+ ::User
+ end
+
+ def raise_error(message)
+ raise OmniAuth::Error, "(OAuth) " + message
+ end
+
+ def ldap?
+ provider == 'ldap'
+ end
+ end
+ end
+ end
+end