Commit 277a1747 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'ee-user-model-merge-conflicts' into 'master'

EE: reduce merge conflicts in the User model

See merge request gitlab-org/gitlab-ee!8153
parents a058660f 25a39e87
......@@ -37,6 +37,10 @@ class Key < ActiveRecord::Base
after_destroy :post_destroy_hook
after_destroy :refresh_user_cache
def self.regular_keys
where(type: ['Key', nil])
end
def key=(value)
write_attribute(:key, value.present? ? Gitlab::SSHPublicKey.sanitize(value) : nil)
......@@ -134,3 +138,5 @@ class Key < ActiveRecord::Base
"type is forbidden. Must be #{allowed_types}"
end
end
Key.prepend(EE::Key)
......@@ -22,8 +22,6 @@ class User < ActiveRecord::Base
include OptionallySearch
include FromUnion
prepend EE::User
DEFAULT_NOTIFICATION_LEVEL = :participating
ignore_column :external_email
......@@ -90,7 +88,7 @@ class User < ActiveRecord::Base
has_one :namespace, -> { where(type: nil) }, dependent: :destroy, foreign_key: :owner_id, inverse_of: :owner, autosave: true # rubocop:disable Cop/ActiveRecordDependent
# Profile
has_many :keys, -> { where(type: ['LDAPKey', 'Key', nil]) }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :keys, -> { regular_keys }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :deploy_keys, -> { where(type: 'DeployKey') }, dependent: :nullify # rubocop:disable Cop/ActiveRecordDependent
has_many :gpg_keys
......@@ -230,8 +228,6 @@ class User < ActiveRecord::Base
delegate :notes_filter_for, to: :user_preference
delegate :set_notes_filter, to: :user_preference
accepts_nested_attributes_for :namespace
state_machine :state, initial: :active do
event :block do
transition active: :blocked
......@@ -268,11 +264,6 @@ class User < ActiveRecord::Base
scope :external, -> { where(external: true) }
scope :active, -> { with_state(:active).non_internal }
scope :without_projects, -> { joins('LEFT JOIN project_authorizations ON users.id = project_authorizations.user_id').where(project_authorizations: { user_id: nil }) }
scope :subscribed_for_admin_email, -> { where(admin_email_unsubscribed_at: nil) }
scope :ldap, -> { joins(:identities).where('identities.provider LIKE ?', 'ldap%') }
scope :with_provider, ->(provider) do
joins(:identities).where(identities: { provider: provider })
end
scope :order_recent_sign_in, -> { reorder(Gitlab::Database.nulls_last_order('current_sign_in_at', 'DESC')) }
scope :order_oldest_sign_in, -> { reorder(Gitlab::Database.nulls_last_order('current_sign_in_at', 'ASC')) }
scope :confirmed, -> { where.not(confirmed_at: nil) }
......@@ -370,10 +361,6 @@ class User < ActiveRecord::Base
from_union([users, emails])
end
def existing_member?(email)
User.where(email: email).any? || Email.where(email: email).any?
end
def filter(filter_name)
case filter_name
when 'admins'
......@@ -489,11 +476,6 @@ class User < ActiveRecord::Base
namespace&.owner
end
def non_ldap
joins('LEFT JOIN identities ON identities.user_id = users.id')
.where('identities.provider IS NULL OR identities.provider NOT LIKE ?', 'ldap%')
end
def reference_prefix
'@'
end
......@@ -959,12 +941,17 @@ class User < ActiveRecord::Base
if !Gitlab.config.ldap.enabled
false
elsif ldap_user?
!last_credential_check_at || (last_credential_check_at + Gitlab.config.ldap['sync_time']) < Time.now
!last_credential_check_at || (last_credential_check_at + ldap_sync_time) < Time.now
else
false
end
end
def ldap_sync_time
# This number resides in this method so it can be redefined in EE.
1.hour
end
def try_obtain_ldap_lease
# After obtaining this lease LDAP checks will be blocked for 600 seconds
# (10 minutes) for this user.
......@@ -1106,10 +1093,6 @@ class User < ActiveRecord::Base
end
# rubocop: enable CodeReuse/ServiceClass
def admin_unsubscribe!
update_column :admin_email_unsubscribed_at, Time.now
end
def starred?(project)
starred_projects.exists?(project.id)
end
......@@ -1528,3 +1511,5 @@ class User < ActiveRecord::Base
Gitlab::ExclusiveLease.cancel(lease_key, uuid)
end
end
User.prepend(EE::User)
# frozen_string_literal: true
module EE
module Key
extend ActiveSupport::Concern
class_methods do
def regular_keys
where(type: ['LDAPKey', 'Key', nil])
end
end
end
end
......@@ -42,6 +42,14 @@ module EE
scope :excluding_guests, -> { joins(:members).where('members.access_level > ?', ::Gitlab::Access::GUEST).distinct }
scope :subscribed_for_admin_email, -> { where(admin_email_unsubscribed_at: nil) }
scope :ldap, -> { joins(:identities).where('identities.provider LIKE ?', 'ldap%') }
scope :with_provider, ->(provider) do
joins(:identities).where(identities: { provider: provider })
end
accepts_nested_attributes_for :namespace
enum roadmap_layout: { weeks: 1, months: 4, quarters: 12 }
end
......@@ -59,6 +67,15 @@ module EE
def internal_attributes
super + [:support_bot]
end
def non_ldap
joins('LEFT JOIN identities ON identities.user_id = users.id')
.where('identities.provider IS NULL OR identities.provider NOT LIKE ?', 'ldap%')
end
def existing_member?(email)
::User.where(email: email).any? || ::Email.where(email: email).any?
end
end
def cannot_be_admin_and_auditor
......@@ -156,5 +173,14 @@ module EE
def has_current_license?
License.current.present?
end
override :ldap_sync_time
def ldap_sync_time
::Gitlab.config.ldap['sync_time']
end
def admin_unsubscribe!
update_column :admin_email_unsubscribed_at, Time.now
end
end
end
......@@ -184,7 +184,7 @@ describe Gitlab::Checks::ChangeAccess do
let(:push_rule) { create(:push_rule, member_check: true) }
before do
allow(User).to receive(:existing_member?).and_return(false)
allow(EE::User).to receive(:existing_member?).and_return(false)
allow_any_instance_of(Commit).to receive(:author_email).and_return('some@mail.com')
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment