范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Gitlab社区版支持多LDAP登录

  安装配置Gitlab社区版的时候发现Gitlab支持多LDAP配置,配置完成后发现登录页面还是只有一个登录选项。翻阅官方文档才发现社区版原来不支持多LDAP登录。业务方还是想要多LDAP登录支持,抛来一篇文章:https://segmentfault.com/a/1190000016340093。网友的解决方案
  看看文章中的修改方案,改动的文件是:/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/gitlab_omniauth-ldap-1.2.1/lib/omniauth/strategies/ldap.rb def callback_phase   #一个ldap相关信息   @options.host=""   @options.password=""   @options.bind_dn=""   @adaptor = OmniAuth::LDAP::Adaptor.new @options     return fail!(:missing_credentials) if missing_credentials?     begin       @ldap_user_info = @adaptor.bind_as(:filter => filter(@adaptor), :size => 1, :password => request["password"])        #增加修改第二个ldap域认证支持        if !@ldap_user_info          @options.host=""          @options.password=""          @options.bind_dn=""          @adaptor = OmniAuth::LDAP::Adaptor.new @options         @ldap_user_info = @adaptor.bind_as(:filter => filter(@adaptor), :size => 1, :password => request["password"])     end     return fail!(:invalid_credentials) if !@ldap_user_info     @user_info = self.class.map_user(@@config, @ldap_user_info)     super     rescue Exception => e     return fail!(:ldap_error, e)   end end
  这个是LDAP登录页的登录callback,作者在这里通过硬编码方案加上了第二个LDAP登录配置,同时还修改了另外一个地方:
  然而好事多磨,验证的时候仍然报了AccessDenied,继续跟踪,发现是在是否blockuser时也多ldap进行了判断,如果user在ldap中不存在,则会进行block处理,故这块也需要增加多域调整,对应文件如下:/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/ldap/access.rb,修改后再次认证终于通过了!
  作者方案中第二个LDAP更多的类似一个备用配置,如果两个LDAP用户出现冲突了,第二个LDAP的同名用户就永远登录不了了。寻找新的方案
  看完这个方案,总觉得有些不太满意,还得找一找优雅的方案。
  看代码吧,虽然不会ruby,但老外的代码实现得一般还是很优雅的,读一读改一改还是问题不大的。
  很快找到了这个文件:/opt/gitlab/embedded/service/gitlab-rails/app/views/devise/shared/_signin_box.html.haml,是登录框的页面模版:- if any_form_based_providers_enabled?   - if crowd_enabled?     .login-box.tab-pane{ id: "crowd", role: "tabpanel", class: active_when(form_based_auth_provider_has_active_class?(:crowd)) }       .login-body         = render "devise/sessions/new_crowd"    = render_if_exists "devise/sessions/new_kerberos_tab"    # 支持多LDAP登录   - ldap_servers.each_with_index do |server, i|     .login-box.tab-pane{ id: "#{server["provider_name"]}", role: "tabpanel", class: active_when(i == 0 && form_based_auth_provider_has_active_class?(:ldapmain)) }       .login-body         = render "devise/sessions/new_ldap", server: server    = render_if_exists "devise/sessions/new_smartcard"    # 这个地方可以关闭默认登录   - if password_authentication_enabled_for_web?     .login-box.tab-pane{ id: "login-pane", role: "tabpanel" }       .login-body         = render "devise/sessions/new_base"  - elsif password_authentication_enabled_for_web?   .login-box.tab-pane.active{ id: "login-pane", role: "tabpanel" }     .login-body       = render "devise/sessions/new_base"
  从页面中可以发现代码中对多LDAP登录没有限制,然后查看一下生成的配置文件,多LDAP也都在配置文件中,都没有问题。
  只能继续跟踪一下ldap_servers的相关实现,最后找到两个文件:/opt/gitlab/embedded/service/gitlab-rails/app/controllers/concerns/renders_ldap_servers.rb和/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ldap/config.rb。
  我们先看看第一个文件renders_ldap_servers.rb:# frozen_string_literal: true  module RendersLdapServers   extend ActiveSupport::Concern    included do     helper_method :ldap_servers   end    def ldap_servers     @ldap_servers ||= begin       if Gitlab::Auth::Ldap::Config.sign_in_enabled?         Gitlab::Auth::Ldap::Config.available_servers       else         []       end     end   end end
  代码很简单,如果sign_in_enabled,就返回配置的available_servers。Ldap::Config代码就在第二个文件config.rb中,截取相关代码如下:        def self.enabled?           Gitlab.config.ldap.enabled         end          def self.sign_in_enabled?           enabled? && !prevent_ldap_sign_in?         end          def self.prevent_ldap_sign_in?           Gitlab.config.ldap.prevent_ldap_sign_in         end          def self.servers           Gitlab.config.ldap.servers&.values || []         end          def self.available_servers           return [] unless enabled?            _available_servers         end          def self._available_servers           Array.wrap(servers.first)         end
  在这个代码中我们找到了多LDAP登录限制的"罪魁祸首"——Array.wrap(servers.first)——通过这行代码选取了多个LDAP配置中的第一个,简单的修改此处即可优雅的解锁gitlab社区版的多LDAP支持。优雅的解决方案
  最终解决方案记录如下:
  修改/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ldap/config.rb文件:# 搜索_available_servers,找到这个地方,修改如下即可         def self._available_servers           #Array.wrap(servers.first)           servers         end
  修改后重启一下gitlab即可。

本周热门家电TOP5报价,70吋电视3299元白露已过,秋高气爽,又到了金九银十装修旺季。一提到装修相信很多人都会头痛,不仅设计重要,家电的选购亦非常重要。今天,笔者就为大家带来本周热门家电TOP5报价,快来看看有没有你喜欢的小米和iPhone都有钉子户,华为这款手机又有多少人知道?最近刷到网上说华为Mate40系列如何的畅销,我就拿起我自己的备用机华为Mate9,这部手机发布了也有五年了。作为前辈级手机,我发现网上很多人说自己也还在用华为Mate9,说明这部TCL折叠屏手机曝光,形似三星ZFilp3,售价5K左右近两年的折叠手机真的是越来越多,TCL也紧跟潮流,不但有折叠屏的专利,还有环绕屏手机。近期相关爆料显示,TCL将会推出一款折叠屏手机,而这款手机的真机近期也曝光了,从曝光的图片来看vivoX70Pro智能手机音质测评报告SOOMALvivoX70系列智能手机发布会HiFi绝对不会缺席在X70系列的发布会上,主持人说到HIFI绝对不会缺席,虽然只是一句带过,但vivo再次兑现了承诺,在X70Pro上延续了HIF努比亚12GB版红魔6游戏手机,已降到4199元5050mAh电池165Hz屏众所周知,努比亚的红魔游戏手机非常出名。比如红魔6游戏手机,该机搭载了高通骁龙888旗舰处理器,配备了12GB256GB顶级存储版本。目前其顶配版已经开始进行降价处理,可以考虑入手评测中端复出,荣耀X20实力自证,角逐两千元档位最佳之选手机市场里,中端产品一直是不可忽略的存在,刚发布没多久的荣耀X20就是这样一款手机,荣耀中端手机还是回来了。作为荣耀X10的迭代产品,荣耀X20不同于以往,最大的特点就是芯片不再是2021下半年旗舰机怎么选?盘点三款热门新机!适合才是最好的2021下半年堪称神仙打架,各大厂商纷纷发布旗舰机,争得高端市场份额。而作为消费者的我们,如何在众多新品旗舰中找到最适合我们的一款?放心,小野为大家总结了三大热门新机的亮点和不足,TCL还在生产手机?首款折叠屏手机确认泡汤外观优秀但不敢生产有一些关心手机的人,会注意到,前段时间,TCL放出了一些折叠屏手机的原型。而且,TCL依靠着自身的屏幕技术研发能力,发布了数款原型机,包括10英寸的折叠屏手机拉伸式卷曲式的折叠屏手鸿蒙系统在网上引起了热议,我该不该更新鸿蒙系统呢?实践是检验真理的唯一标准。华为出鸿蒙操作系统,这有别于苹果系统和安卓系统。鸿蒙好不好用,尚是未知数。我手中现有华为,不过已用近4年,系统基于安卓7。由于这个华为为低档千元机,现在已华为供货不足,若友商不用鸿蒙,华强北有可能推出鸿蒙山寨机吗?只要是鸿蒙系统山寨机也无所谓。说句实话,只要能将鸿蒙撑下去,终有出头之日也许华强北不只是简单的推出鸿蒙山寨机,而且要刷机,任何型号手机都可以安装,老旧机型都可以华为也将为所有安装鸿吸睛又吸金!华为鸿蒙来了,10只概念股应声涨停,超5。5亿元资金追捧这4只个股本报记者张颖6月2日晚间,华为正式发了鸿蒙操作系统2。0(HarmonyOS),该系统可以搭载在任何loT设备上,将所有设备统一语言,打通生态系统实现万物互联。这一消息如同一剂强心
洗碗机洗碗和人工工洗碗,哪个更省心?1。水电成本洗碗机洗碗和人工洗碗差不多。2。人工费像大型餐饮,星级酒店等洗碗工都得好几个,而且还不好招工,如果用洗碗机,用人数量减少一半,人工成本会节省很多。3。餐具损耗人工洗碗时好物推荐南卡A2ANC降噪耳机百元性价比之选本次产品为厂家送测,感谢南卡的大力支持!提到南卡,我们首先想到的应该是南卡家的骨传导蓝牙耳机,不过这次,南卡也是推出了新产品南卡A2,这是南卡首款主动降噪的产品,而能上我的好物推荐好物推荐漫步者W820NB头戴式耳机没有人比我更懂降噪漫步者这个品牌,近些年可以说是蓝牙耳机领域的一匹黑马了,但是却很少有人知道漫步者已经做了20多年的声学领域了,甚至还是一个上市公司,而他们是做音箱起家的,之后我们有机会也可以去介绍南卡T2蓝牙耳机评测开箱评测南卡T2蓝牙耳机双动力好音质南卡今年出了很多新品,有不用耳朵听音乐的骨传导CC,有圆滑的半入耳式LitePro,有带主动降噪ANC的A1,可以说每一款耳机都有着自己的特点和开箱评测SanagA7S气传导耳机新技术新方向本产品为厂家送测,感谢Sanag的大力支持!Sanag虽然是英国品牌,但如今在国内市场也是频频发力,甚至请了花样滑冰世界冠军于小雨做形象大使,可见其品牌对国内市场的重视程度,而一向自动洗碗机常见功能及优势随着生活条件的提高,洗碗机逐渐被家庭餐饮行业接受和使用,越来越多的家用洗碗机和商用用洗碗机都进入了成千上万的家庭后厨,解决用餐后洗碗的问题。商用洗碗机,通常是商业目的,用于餐厅,食洗碗机带烘干功能的优势对于一些需要洗很多餐具的洗碗间来说,要操作方便,节省成本,而且还确保餐具卫生安全,还有一个关键的配置不能少,这是干燥系统!聪明的用户可以在购买洗碗机选择干式的功能,或洗碗机烘干系统如何看待全红婵对游戏防沉迷认证感到为难,称每天只能打1小时?尊重少年人天性,别让鲁迅的后悔重演。风筝北京的冬季,地上还有积雪,灰黑色的秃树枝丫叉于晴朗的天空中,而远处有一二风筝浮动,在我是一种惊异和悲哀。故乡的风筝时节,是春二月,倘听到沙沙自动洗碗机的功能及优点随着生活条件的改善,洗碗机逐渐被家庭和餐饮业所接受和使用。越来越多的家用洗碗机和商用洗碗机进入千家万户和厨房,解决饭后洗碗的问题。商用洗碗机,通常用于商业用途,用于餐馆食堂宾馆等餐商用自动洗碗机的功能介绍洗碗机是一种自动清洗碗筷盘子碟子刀叉等餐具的装置。市场上的全自动洗碗机可分为家用和商用两种。家用全自动洗碗机只适合家庭使用,主要有柜式台式水槽一体式和一体式。商用洗碗机按结构可分为比亚迪汉DM到店实拍,推荐购买四驱性能版豪华型比亚迪今年的重磅车型应该要说汉系列。车型有两种动力总成,分别是插电混动(汉DM)和纯电版(汉EV)。今天我们实拍是刚刚到店的汉DM车型,实拍为四驱性能版豪华型21。98万元,另外还