Files
gitlabhq/lib/gitlab/ldap/config.rb
T
Dmitriy Zaporozhets d01d0c02b7 Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq into ce-to-ee
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>

Conflicts:
	app/controllers/admin/application_settings_controller.rb
	app/controllers/groups/group_members_controller.rb
	app/controllers/projects/deploy_keys_controller.rb
	app/controllers/projects/project_members_controller.rb
	app/models/concerns/mentionable.rb
	app/models/project.rb
	app/models/project_team.rb
	app/models/service.rb
	app/views/admin/application_settings/_form.html.haml
	app/views/admin/groups/show.html.haml
	app/views/groups/group_members/_new_group_member.html.haml
	config/initializers/1_settings.rb
	db/schema.rb
	lib/gitlab/reference_extractor.rb
	spec/lib/gitlab/reference_extractor_spec.rb
2015-04-15 19:22:57 +03:00

133 lines
2.6 KiB
Ruby

# Load a specific server configuration
module Gitlab
module LDAP
class Config
attr_accessor :provider, :options
class InvalidProvider < StandardError; end
def self.enabled?
Gitlab.config.ldap.enabled
end
def self.servers
Gitlab.config.ldap.servers.values
rescue Settingslogic::MissingSetting
[]
end
def self.providers
servers.map {|server| server['provider_name'] }
end
def self.valid_provider?(provider)
providers.include?(provider)
end
def self.invalid_provider(provider)
raise InvalidProvider.new("Unknown provider (#{provider}). Available providers: #{providers}")
end
def initialize(provider)
if self.class.valid_provider?(provider)
@provider = provider
else
self.class.invalid_provider(provider)
end
@options = config_for(@provider) # Use @provider, not provider
end
def enabled?
base_config.enabled
end
def adapter_options
{
host: options['host'],
port: options['port'],
encryption: encryption
}.tap do |options|
options.merge!(auth_options) if has_auth?
end
end
def base
options['base']
end
def uid
options['uid']
end
def label
options['label']
end
def sync_ssh_keys?
sync_ssh_keys.present?
end
# The LDAP attribute in which the ssh keys are stored
def sync_ssh_keys
options['sync_ssh_keys']
end
def user_filter
options['user_filter']
end
def group_base
options['group_base']
end
def admin_group
options['admin_group']
end
def active_directory
options['active_directory']
end
def block_auto_created_users
options['block_auto_created_users']
end
protected
def base_config
Gitlab.config.ldap
end
def config_for(provider)
base_config.servers.values.find { |server| server['provider_name'] == provider }
end
def encryption
case options['method'].to_s
when 'ssl'
:simple_tls
when 'tls'
:start_tls
else
nil
end
end
def auth_options
{
auth: {
method: :simple,
username: options['bind_dn'],
password: options['password']
}
}
end
def has_auth?
options['password'] || options['bind_dn']
end
end
end
end