You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
6.0 KiB

пре 3 година
  1. <?php
  2. namespace Api\Controller;
  3. use Think\Controller;
  4. class AdminSettingController extends BaseController {
  5. //保存配置
  6. public function saveConfig(){
  7. $login_user = $this->checkLogin();
  8. $this->checkAdmin();
  9. $register_open = intval(I("register_open")) ;
  10. $ldap_open = intval(I("ldap_open")) ;
  11. $oss_open = intval(I("oss_open")) ;
  12. $home_page = intval(I("home_page")) ;
  13. $home_item = intval(I("home_item")) ;
  14. $ldap_form = I("ldap_form") ;
  15. $oss_setting = I("oss_setting") ;
  16. D("Options")->set("register_open" ,$register_open) ;
  17. D("Options")->set("home_page" ,$home_page) ;
  18. D("Options")->set("home_item" ,$home_item) ;
  19. if ($ldap_open) {
  20. if (!$ldap_form['user_field']) {
  21. $ldap_form['user_field'] = 'cn';
  22. }
  23. if( !extension_loaded( 'ldap' ) ) {
  24. $this->sendError(10011,"你尚未安装php-ldap扩展。如果是普通PHP环境,请手动安装之。如果是使用之前官方docker镜像,则需要重新安装镜像。方法是:备份 /showdoc_data 整个目录,然后全新安装showdoc,接着用备份覆盖/showdoc_data 。然后递归赋予777可写权限。");
  25. return ;
  26. }
  27. $ldap_conn = ldap_connect($ldap_form['host'], $ldap_form['port']);//建立与 LDAP 服务器的连接
  28. if (!$ldap_conn) {
  29. $this->sendError(10011,"Can't connect to LDAP server");
  30. return ;
  31. }
  32. ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, $ldap_form['version']);
  33. $rs=ldap_bind($ldap_conn, $ldap_form['bind_dn'], $ldap_form['bind_password']);//与服务器绑定 用户登录验证 成功返回1
  34. if (!$rs) {
  35. $this->sendError(10011,"Can't bind to LDAP server");
  36. return ;
  37. }
  38. $result = ldap_search($ldap_conn,$ldap_form['base_dn'],"(cn=*)");
  39. $data = ldap_get_entries($ldap_conn, $result);
  40. for ($i=0; $i<$data["count"]; $i++) {
  41. $ldap_user = $data[$i][$ldap_form['user_field']][0] ;
  42. if (!$ldap_user) {
  43. continue ;
  44. }
  45. //如果该用户不在数据库里,则帮助其注册
  46. if(!D("User")->isExist($ldap_user)){
  47. D("User")->register($ldap_user,$ldap_user.time());
  48. }
  49. }
  50. D("Options")->set("ldap_form" , json_encode( $ldap_form)) ;
  51. }
  52. D("Options")->set("ldap_open" ,$ldap_open) ;
  53. if ($oss_open) {
  54. D("Options")->set("oss_setting" , json_encode( $oss_setting)) ;
  55. }
  56. D("Options")->set("oss_open" ,$oss_open) ;
  57. $this->sendResult(array());
  58. }
  59. //加载配置
  60. public function loadConfig(){
  61. $login_user = $this->checkLogin();
  62. $this->checkAdmin();
  63. $ldap_open = D("Options")->get("ldap_open" ) ;
  64. $oss_open = D("Options")->get("oss_open" ) ;
  65. $register_open = D("Options")->get("register_open" ) ;
  66. $ldap_form = D("Options")->get("ldap_form" ) ;
  67. $oss_setting = D("Options")->get("oss_setting" ) ;
  68. $home_page = D("Options")->get("home_page" ) ;
  69. $home_item = D("Options")->get("home_item" ) ;
  70. $ldap_form = json_decode($ldap_form,1);
  71. $oss_setting = json_decode($oss_setting,1);
  72. //如果强等于false,那就是尚未有数据。关闭注册应该是有数据且数据为字符串0
  73. if ($register_open === false) {
  74. $this->sendResult(array());
  75. }else{
  76. $array = array(
  77. "ldap_open"=>$ldap_open ,
  78. "oss_open"=>$oss_open ,
  79. "register_open"=>$register_open ,
  80. "home_page"=>$home_page ,
  81. "home_item"=>$home_item ,
  82. "ldap_form"=>$ldap_form ,
  83. "oss_setting"=>$oss_setting ,
  84. );
  85. $this->sendResult($array);
  86. }
  87. }
  88. public function checkLdapLogin(){
  89. $username = 'admin';
  90. $password = '123456';
  91. $ldap_open = D("Options")->get("ldap_open" ) ;
  92. $ldap_form = D("Options")->get("ldap_form" ) ;
  93. $ldap_form = json_decode($ldap_form,1);
  94. if (!$ldap_open) {
  95. return ;
  96. }
  97. if (!$ldap_form['user_field']) {
  98. $ldap_form['user_field'] = 'cn';
  99. }
  100. $ldap_conn = ldap_connect($ldap_form['host'], $ldap_form['port']);//建立与 LDAP 服务器的连接
  101. if (!$ldap_conn) {
  102. $this->sendError(10011,"Can't connect to LDAP server");
  103. return ;
  104. }
  105. ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, $ldap_form['version']);
  106. $rs=ldap_bind($ldap_conn, $ldap_form['bind_dn'], $ldap_form['bind_password']);//与服务器绑定 用户登录验证 成功返回1
  107. if (!$rs) {
  108. $this->sendError(10011,"Can't bind to LDAP server");
  109. return ;
  110. }
  111. $result = ldap_search($ldap_conn,$ldap_form['base_dn'],"(cn=*)");
  112. $data = ldap_get_entries($ldap_conn, $result);
  113. for ($i=0; $i<$data["count"]; $i++) {
  114. $ldap_user = $data[$i][$ldap_form['user_field']][0] ;
  115. $dn = $data[$i]["dn"] ;
  116. if ($ldap_user == $username) {
  117. //如果该用户不在数据库里,则帮助其注册
  118. $userInfo = D("User")->isExist($username) ;
  119. if(!$userInfo){
  120. D("User")->register($ldap_user,$ldap_user.time());
  121. }
  122. $rs2=ldap_bind($ldap_conn, $dn , $password);
  123. if ($rs2) {
  124. D("User")->updatePwd($userInfo['uid'], $password);
  125. $this->sendResult(array());
  126. return ;
  127. }
  128. }
  129. }
  130. $this->sendError(10011,"用户名或者密码错误");
  131. }
  132. }