Skip to content
Snippets Groups Projects
access.rb 1.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • # LDAP authorization model
    #
    # * Check if we are allowed access (not blocked)
    #
    
    module Gitlab
      module LDAP
        class Access
    
          attr_reader :provider, :user
    
          def self.open(user, &block)
    
            Gitlab::LDAP::Adapter.open(user.ldap_identity.provider) do |adapter|
    
              block.call(self.new(user, adapter))
    
          def self.allowed?(user)
    
            self.open(user) do |access|
              if access.allowed?
    
                user.last_credential_check_at = Time.now
                user.save
                true
              else
                false
              end
            end
          end
    
    
          def initialize(user, adapter = nil)
    
            @adapter = adapter
    
            @provider = user.ldap_identity.provider
    
            if ldap_user
    
              unless ldap_config.active_directory
                user.activate if user.ldap_blocked?
                return true
              end
    
    
              # Block user in GitLab if he/she was blocked in AD
              if Gitlab::LDAP::Person.disabled_via_active_directory?(user.ldap_identity.extern_uid, adapter)
    
                user.activate if user.ldap_blocked?
    
              # Block the user if they no longer exist in LDAP/AD
    
          rescue
            false
          end
    
    
          def adapter
            @adapter ||= Gitlab::LDAP::Adapter.new(provider)
          end
    
    
          def ldap_config
            Gitlab::LDAP::Config.new(provider)
          end
    
    
          def ldap_user
            @ldap_user ||= Gitlab::LDAP::Person.find_by_dn(user.ldap_identity.extern_uid, adapter)
          end