From 633fb8ab6bb9ae66555fcebd026da7a473dd4d99 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 8 Dec 2014 15:58:01 +0200 Subject: [PATCH] Prevent 500 error on ldap group links page If group has links to ldap servers that are disabled or removed from gitlab config. Signed-off-by: Dmitriy Zaporozhets --- app/models/ldap_group_link.rb | 2 ++ .../ldap_group_links/_ldap_group_link.html.haml | 17 +++++++++++++++-- lib/gitlab/ldap/config.rb | 8 +++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/models/ldap_group_link.rb b/app/models/ldap_group_link.rb index 94ace766d7..4cdb1d801b 100644 --- a/app/models/ldap_group_link.rb +++ b/app/models/ldap_group_link.rb @@ -14,6 +14,8 @@ class LdapGroupLink < ActiveRecord::Base def config Gitlab::LDAP::Config.new(provider) + rescue Gitlab::LDAP::Config::InvalidProvider + nil end # default to the first LDAP server diff --git a/app/views/ldap_group_links/_ldap_group_link.html.haml b/app/views/ldap_group_links/_ldap_group_link.html.haml index 27441b5128..eb2bae8b6f 100644 --- a/app/views/ldap_group_links/_ldap_group_link.html.haml +++ b/app/views/ldap_group_links/_ldap_group_link.html.haml @@ -1,6 +1,19 @@ %li - = ldap_group_link.cn - %small.light== as #{ldap_group_link.human_access} on #{ldap_group_link.provider_label} + %h4= ldap_group_link.cn .pull-right = link_to group_ldap_group_link_path(group, ldap_group_link), method: :delete, class: 'btn btn-danger btn-small' do = fa_icon('unlink', text: 'unlink') + + - if ldap_group_link.config + %p.light + As + %strong #{ldap_group_link.human_access} + on + %strong #{ldap_group_link.provider_label} + server + - else + %p.cred + %i.fa.fa-warning + Config for + %code #{ldap_group_link.provider} + does not present in GitLab diff --git a/lib/gitlab/ldap/config.rb b/lib/gitlab/ldap/config.rb index 256f579e83..b3bb9d8980 100644 --- a/lib/gitlab/ldap/config.rb +++ b/lib/gitlab/ldap/config.rb @@ -4,12 +4,16 @@ module Gitlab 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 @@ -21,7 +25,7 @@ module Gitlab end def self.invalid_provider(provider) - raise "Unknown provider (#{provider}). Available providers: #{providers}" + raise InvalidProvider.new("Unknown provider (#{provider}). Available providers: #{providers}") end def initialize(provider) @@ -32,6 +36,7 @@ module Gitlab else self.class.invalid_provider(provider) end + @options = config_for(@provider) # Use @provider, not provider end @@ -87,6 +92,7 @@ module Gitlab end protected + def base_config Gitlab.config.ldap end