diff options
author | Francisco Javier López <fjlopez@gitlab.com> | 2017-11-17 17:24:25 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2017-11-17 17:24:25 +0300 |
commit | c7cf68bd6ff744e044944acad586e06badc481d4 (patch) | |
tree | 6cf6af687696012525b6cb05b336bec13f049a10 /app/models | |
parent | 76b2a7caa5219662a29f0eb16f0507aac1976f33 (diff) |
Changing OAuth lookup to be case insensitive
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/identity.rb | 15 | ||||
-rw-r--r-- | app/models/user.rb | 3 |
2 files changed, 13 insertions, 5 deletions
diff --git a/app/models/identity.rb b/app/models/identity.rb index ac8094b610e..ff811e19f8a 100644 --- a/app/models/identity.rb +++ b/app/models/identity.rb @@ -1,18 +1,27 @@ class Identity < ActiveRecord::Base include Sortable include CaseSensitivity + belongs_to :user validates :provider, presence: true - validates :extern_uid, allow_blank: true, uniqueness: { scope: :provider } + validates :extern_uid, allow_blank: true, uniqueness: { scope: :provider, case_sensitive: false } validates :user_id, uniqueness: { scope: :provider } + scope :with_provider, ->(provider) { where(provider: provider) } scope :with_extern_uid, ->(provider, extern_uid) do - extern_uid = Gitlab::LDAP::Person.normalize_dn(extern_uid) if provider.starts_with?('ldap') - where(extern_uid: extern_uid, provider: provider) + iwhere(extern_uid: normalize_uid(provider, extern_uid)).with_provider(provider) end def ldap? provider.starts_with?('ldap') end + + def self.normalize_uid(provider, uid) + if provider.to_s.starts_with?('ldap') + Gitlab::LDAP::Person.normalize_dn(uid) + else + uid.to_s + end + end end diff --git a/app/models/user.rb b/app/models/user.rb index be8112749bf..71c34766451 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -269,8 +269,7 @@ class User < ActiveRecord::Base end def for_github_id(id) - joins(:identities) - .where(identities: { provider: :github, extern_uid: id.to_s }) + joins(:identities).merge(Identity.with_extern_uid(:github, id)) end # Find a User by their primary email or any associated secondary email |