redmine坑 解决后续

redmine坑 解决后续

接上期大坑
利用redmine的api
用ldap账号推送账户
脚本如下


require 'net/https'
require 'uri'
require 'json'
require 'net/ldap'

 def get_user

  api =('http://192.168.0.222:3000/users.json')
  params ={"key" =>'XXXXXXXf',}


  uri = URI(api)
  uri.query = URI.encode_www_form(params)
  #use_ssl = true if uri.scheme =='https'
  res = Net::HTTP.get_response(uri)
  #puts res.body if res.is_a?(Net::HTTPSuccess)
  json =JSON.load(res.body)
  p json

  puts "get users"

end

def update_user(ldapuser, ldapname,mail)
  base_url = "http://192.168.0.222:3000" 
  api_token = "xxxxxxxxf" 

  payload = {
    user: {
      login: ldapuser,
      firstname: ldapname,
      lastname: ldapuser,
      mail: mail,
      valid_statuse: 'STATUS_ACTIVE',#valid_statuses = [STATUS_ACTIVE, STATUS_REGISTERED, STATUS_LOCKED]
      user_auth_source_id: 1,
      password: "[FILTERED]", 
      password_confirmation: "[FILTERED]",
      generate_password:"[FILTERED]"
    }
  }

  url = "#{base_url}/users.json" 
  puts url
  uri = URI.parse(url) 
  req = Net::HTTP::Post.new(uri.request_uri)

  req["Content-Type"] = "application/json" 
  req['X-Redmine-API-Key'] = api_token
  req.body = payload.to_json

  http = Net::HTTP.new(uri.host,uri.port)
  #http.use_ssl = true
  response = http.request(req)
  return response
end


host = '192.168.0.252' #
@users = File.open("users.json","w")

def ldap_list(host)()
  ldap_list_full=[]
filter = Net::LDAP::Filter.eq("cn","uid=xxx,cn=users,dc=xxx,dc=com")#filter条件

ldap = Net::LDAP.new(:host => host,
  :port => 389,
  :auth => {:method => :simple,
            
                        :username => "uid=root,cn=users,dc=xxx,dc=com",#
                        :password => "xxx"})
attrs = ["mail", "cn", "gecos", ]
treebase = "cn=users,dc=xxx,dc=com" 

 count =0
ldap.search(:base=>treebase,:size=>1000,
    :attributes => attrs,
   #:filter =>filter
    ) do |entry|
    ldap_list_full.push(entry.dn)

    count +=1
end


puts  "共有记录#{count}条"

b=[]
ldap_list_full.each do |y|
 b.push(y.to_s.sub!(/,cn.*$/,"").to_s.sub!(/uid=/,""))

end 
n = b.reject { |c| c ==nil }.reject { |c| c =="admin" } 
end

def ldap_mess_list(host,uid)()
  ldap_list_full=[]
filter = Net::LDAP::Filter.eq("uid",uid)#filter条件

ldap = Net::LDAP.new(:host => host,
  :port => 389,
  :auth => {:method => :simple,
            
                        :username => "uid=root,cn=users,dc=xxx,dc=com",#
        
                        :password => "xxxx"})
attrs = ["mail", "cn", "gecos", ]
treebase = "cn=users,dc=xxx,dc=com" #查询amp
 hashlist = {}
 count =0
ldap.search(:base=>treebase,:size=>1000,
    :attributes => attrs,
   :filter =>filter
    ) do |entry|
       entry.each do |k,v|
        hashlist[k.to_s]=v.to_s
      end

    count +=1
  end
end

a=ldap_list(host)
c=[]
a.each do |uid|
c.push(ldap_mess_list(host,uid).to_s)
end
c.each_index do |n|
  if n ==c.length-1
 @users.puts c[n].gsub(/#+.*hash=/,"").gsub(">]","").gsub(':','"').gsub('=>','":').sub('[','').sub('}','}]').gsub(' ','')
elsif n ==0
  @users.puts c[n].gsub(/#+.*hash=/,"").gsub(">]","").gsub(':','"').gsub('=>','":').sub('[','').sub('}','},').sub('{','[{').gsub(' ','')
else
  @users.puts c[n].gsub(/#+.*hash=/,"").gsub(">]","").gsub(':','"').gsub('=>','":').sub('[','').sub('}','},').gsub(' ','')
end
end
@users.close
obj = File.read("users.json")
  ff =JSON.parse(obj)
  ff.each_index do |e| 
 final_first_ame= ff[e]["cn"][0]
 final_lastname= ff[e]["gecos"][0]
 final_mail=ff[e]["mail"][0]
 update_user(final_first_ame,final_lastname,final_mail)
end

然后定时跑下
主要难点是ldap的查询数据是对象,所以最后选择生成json文件在进行hash

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值