问题
小米的openfalcon在使用ldap首次登陆成功后,会在本地创建同名的账号, 这就有个问题当你更新了ldap的密码时,openfalcon是没有同步本地账号密码的功能
二次改造
-  方便我们debug, 先把日志的debug打开,默认是没有运行时日志的,只有console日志 # 编辑文件 dashboard/rrd/utils/logger.pyimportsysfrom rrdimportconfigimportloggingfile_handler = logging.FileHandler(filename='/data1/dev/open-falcon/dashboard/var/running.log')formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')file_handler.setFormatter(formatter)logging.getLogger().addHandler(file_handler)logging.getLogger().setLevel(logging.DEBUG)
-  添加两个util方法 dashboard/rrd/view/utils.py def get_Apitoken(name, password):d = {"name": name,"password": password}h = {"Content-type":"application/json"}r = requests.post("%s/user/login"%(config.API_ADDR,), \data=json.dumps(d), headers=h)ifr.status_code !=200:raise Exception("%s %s"%(r.status_code, r.text))sig = json.loads(r.text)["sig"]returnjson.dumps({"name":name,"sig":sig})def get_user_id(name, Apitoken):h = {"Content-type":"application/json","Apitoken":Apitoken}r = requests.get("%s/user/name/%s"%(config.API_ADDR,name), headers=h)ifr.status_code !=200:user_id = -1returnuser_iduser_id = json.loads(r.text)["id"]returnuser_id
-  重构登陆函数 diff --git a/rrd/view/auth/auth.py b/rrd/view/auth/auth.pyindex c203c4c..a546b95100644--- a/rrd/view/auth/auth.py+++ b/rrd/view/auth/auth.py@@ -17,6+17,7@@from flaskimportrequest, g, abort, render_template, redirectfrom flask.ext.babelimportrefreshimportrequests+importtracebackimportjsonfrom rrdimportappfrom rrdimportconfig@@ -48,6+49,7@@ def auth_login():ifldap =="1":try:ldap_info = view_utils.ldap_login_user(name, password)+ log.debug("ldap_info: %s"%ldap_info)h = {"Content-type":"application/json"}d = {@@ -58,12+60,20@@ def auth_login():"phone": ldap_info['phone'],}- r = requests.post("%s/user/create"%(config.API_ADDR,), \+ Apitoken = view_utils.get_Apitoken('admin','admin_password')+ user_id = view_utils.get_user_id(name, Apitoken)+ log.debug('apitoken:%s, user_id:%s'%(Apitoken, user_id))++ifuser_id >0:+ r = requests.put("%s/admin/change_user_passwd"%(config.API_ADDR), data=json.dumps({"user_id":user_id,"passwor+ log.debug('ldap login success and synchronize user password')+else:+ r = requests.post("%s/user/create"%(config.API_ADDR,), \data=json.dumps(d), headers=h)- log.debug("%s:%s"%(r.status_code, r.text))+ log.debug("create user status %s:%s"%(r.status_code, r.text))- #TODO: update password in dbifldap password changedexcept Exception as e:+ log.debug(traceback.format_exc())ret["msg"] = str(e)returnjson.dumps(ret)完