From 322dcddfabfda1c7bc2fd4bd6ff91426446ede9a Mon Sep 17 00:00:00 2001 From: zenggang Date: Tue, 11 Jan 2022 09:44:13 +0000 Subject: [PATCH 1/5] * Finish task#47226 --- module/sonarqube/control.php | 52 +++++++++++++++++++++++++++ module/sonarqube/css/create.css | 1 + module/sonarqube/lang/en.php | 21 +++++++++++ module/sonarqube/lang/zh-cn.php | 21 +++++++++++ module/sonarqube/model.php | 15 ++++++++ module/sonarqube/view/create.html.php | 52 +++++++++++++++++++++++++++ 6 files changed, 162 insertions(+) create mode 100644 module/sonarqube/css/create.css create mode 100644 module/sonarqube/view/create.html.php diff --git a/module/sonarqube/control.php b/module/sonarqube/control.php index 079a5212ec..1bce8757e9 100644 --- a/module/sonarqube/control.php +++ b/module/sonarqube/control.php @@ -48,4 +48,56 @@ class sonarqube extends control $this->display(); } + + /** + * create a sonarqube. + * + * @access public + * @return void + */ + public function create() + { + if($_POST) + { + $this->checkToken(); + $sonarqubeID = $this->loadModel('pipeline')->create('sonarqube'); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + $this->loadModel('action'); + $actionID = $this->action->create('sonarqube', $sonarqubeID, 'created'); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse'))); + } + + $this->view->title = $this->lang->sonarqube->common . $this->lang->colon . $this->lang->sonarqube->lblCreate; + + $this->display(); + } + + /** + * Check post info. + * + * @access protected + * @return void + */ + protected function checkToken() + { + $sonarqube = fixer::input('post')->get(); + $this->dao->update('sonarqube')->data($sonarqube) + ->check('name', 'notempty') + ->check('url', 'notempty') + ->check('account', 'notempty') + ->check('password', 'notempty'); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + if(strpos($sonarqube->url, 'http') !== 0) return $this->send(array('result' => 'fail', 'message' => array('url' => array($this->lang->sonarqube->hostError)))); + + /* Check name and url unique. */ + $isExist = $this->dao->select('*')->from(TABLE_PIPELINE)->where("name='{$sonarqube->name}' or url='{$sonarqube->url}'")->fetch(); + if($isExist) return $this->send(array('result' => 'fail', 'message' => $this->lang->sonarqube->repeatError)); + + $token = base64_encode("{$sonarqube->account}:{$sonarqube->password}"); + $result = $this->sonarqube->apiValidate($sonarqube->url, $token); + + if(!isset($result->valid) or !$result->valid) return $this->send(array('result' => 'fail', 'message' => array('token' => array($this->lang->sonarqube->validError)))); + $this->post->set('token', $token); + } } diff --git a/module/sonarqube/css/create.css b/module/sonarqube/css/create.css new file mode 100644 index 0000000000..f30cf17aeb --- /dev/null +++ b/module/sonarqube/css/create.css @@ -0,0 +1 @@ +.table-form .c-name {width: 130px;} diff --git a/module/sonarqube/lang/en.php b/module/sonarqube/lang/en.php index 5ac24fa38a..825fb03bac 100644 --- a/module/sonarqube/lang/en.php +++ b/module/sonarqube/lang/en.php @@ -8,3 +8,24 @@ $lang->sonarqube->edit = 'Edit SonarQube'; $lang->sonarqube->delete = 'Delete SonarQube'; $lang->sonarqube->confirmDelete = 'Do you want to delete this SonarQube server?'; $lang->sonarqube->serverFail = 'Connect to SonarQube server failed, please check the SonarQube server.'; + +$lang->sonarqube->id = 'ID'; +$lang->sonarqube->name = "{$lang->sonarqube->common} Name"; +$lang->sonarqube->url = 'URL'; +$lang->sonarqube->account = 'Username'; +$lang->sonarqube->password = 'Password'; +$lang->sonarqube->token = 'Token'; +$lang->sonarqube->defaultProject = 'Default Project'; +$lang->sonarqube->private = 'MD5 Verify'; + +$lang->sonarqube->lblCreate = 'Create SonarQube Server'; +$lang->sonarqube->desc = 'Description'; +$lang->sonarqube->createSuccess = 'Create success'; + +$lang->sonarqube->placeholder = new stdclass; +$lang->sonarqube->placeholder->name = ''; +$lang->sonarqube->placeholder->url = "Please fill in the access address of the SonarQube Server homepage, as: https://sonarqube.zentao.net."; + +$lang->sonarqube->repeatError = 'Server name or server address already exists!'; +$lang->sonarqube->validError = 'Sonarqube user authority authentication failed!'; +$lang->sonarqube->hostError = "Invalid SonarQube service address."; diff --git a/module/sonarqube/lang/zh-cn.php b/module/sonarqube/lang/zh-cn.php index 215e9b4502..417e23b466 100644 --- a/module/sonarqube/lang/zh-cn.php +++ b/module/sonarqube/lang/zh-cn.php @@ -8,3 +8,24 @@ $lang->sonarqube->edit = '编辑SonarQube'; $lang->sonarqube->delete = '删除SonarQube'; $lang->sonarqube->confirmDelete = '确认删除该SonarQube吗?'; $lang->sonarqube->serverFail = '连接SonarQube服务器异常,请检查SonarQube服务器。'; + +$lang->sonarqube->id = 'ID'; +$lang->sonarqube->name = "{$lang->sonarqube->common}名称"; +$lang->sonarqube->url = '服务地址'; +$lang->sonarqube->account = '用户名'; +$lang->sonarqube->password = '密码'; +$lang->sonarqube->token = 'Token'; +$lang->sonarqube->defaultProject = '默认项目'; +$lang->sonarqube->private = 'MD5验证'; + +$lang->sonarqube->lblCreate = '添加SonarQube服务器'; +$lang->sonarqube->desc = '描述'; +$lang->sonarqube->createSuccess = "创建成功"; + +$lang->sonarqube->placeholder = new stdclass; +$lang->sonarqube->placeholder->name = ''; +$lang->sonarqube->placeholder->url = "请填写SonarQube Server首页的访问地址,如:https://sonarqube.zentao.net。"; + +$lang->sonarqube->repeatError = "服务器名称或服务器地址已存在!"; +$lang->sonarqube->validError = "SonarQube 用户权限认证失败!"; +$lang->sonarqube->hostError = "无效的SonarQube服务地址。"; diff --git a/module/sonarqube/model.php b/module/sonarqube/model.php index 79f3f144dd..5f3765586a 100644 --- a/module/sonarqube/model.php +++ b/module/sonarqube/model.php @@ -27,4 +27,19 @@ class sonarqubeModel extends model return $sonarqubeList; } + + /** + * check sonarqube valid + * + * @param string $host + * @param string $token + * @access public + * @return array + */ + public function apiValidate($host, $token) + { + $url = rtrim($host, '/') . "/api/authentication/validate"; + $header = 'Authorization: Basic ' . $token; + return json_decode(commonModel::http($url, null, array(), $header)); + } } diff --git a/module/sonarqube/view/create.html.php b/module/sonarqube/view/create.html.php new file mode 100644 index 0000000000..8def4808da --- /dev/null +++ b/module/sonarqube/view/create.html.php @@ -0,0 +1,52 @@ + + * @package sonarqube + * @version $Id$ + * @link http://www.zentao.net + */ +?> + + +
+
+
+
+

sonarqube->lblCreate;?>

+
+
+ + + + + + + + + + + + + + + + + + + + + + +
sonarqube->name;?>sonarqube->placeholder->name}'");?>
sonarqube->url;?>sonarqube->placeholder->url}'");?>
sonarqube->account;?>
sonarqube->password;?>
+ + goback, '', 'class="btn btn-wide"');?> +
+
+
+
+
+ From e2988a12120a007346f93165b8939211ba527ee7 Mon Sep 17 00:00:00 2001 From: zenggang Date: Tue, 11 Jan 2022 09:48:18 +0000 Subject: [PATCH 2/5] * Adjust code --- module/sonarqube/view/create.html.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/module/sonarqube/view/create.html.php b/module/sonarqube/view/create.html.php index 8def4808da..5daf0da4d8 100644 --- a/module/sonarqube/view/create.html.php +++ b/module/sonarqube/view/create.html.php @@ -2,16 +2,15 @@ /** * The create view file of sonarqube module of ZenTaoPMS. * - * @copyright Copyright 2009-2017 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com) + * @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com) * @license ZPL (http://zpl.pub/page/zplv12.html) - * @author Gang Liu + * @author Gang Zeng * @package sonarqube * @version $Id$ * @link http://www.zentao.net */ ?> -
From ca95618c5c773c11976f9c55e57e1f8a2d60fe4d Mon Sep 17 00:00:00 2001 From: zenggang Date: Tue, 11 Jan 2022 10:10:52 +0000 Subject: [PATCH 3/5] * Adjust code --- module/sonarqube/model.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/module/sonarqube/model.php b/module/sonarqube/model.php index 5f3765586a..91b529ba19 100644 --- a/module/sonarqube/model.php +++ b/module/sonarqube/model.php @@ -28,6 +28,24 @@ class sonarqubeModel extends model return $sonarqubeList; } + /** + * Get sonarqube api base url and header by id. + * + * @param int $id + * @access public + * @return array + */ + public function getApiBase($id) + { + $sonarqube = $this->loadModel('pipeline')->getByID($id); + if(!$sonarqube) return ''; + + $url = rtrim($sonarqube->url, '/') . '/api/%s'; + $header[] = 'Authorization: Basic ' . $sonarqube->token; + + return array($url, $header); + } + /** * check sonarqube valid * From 8285477ef15a8ddbd1dd8f80a7eee41ec5c87e30 Mon Sep 17 00:00:00 2001 From: zenggang Date: Wed, 12 Jan 2022 01:11:35 +0000 Subject: [PATCH 4/5] * Adjust language --- module/sonarqube/control.php | 2 +- module/sonarqube/lang/en.php | 2 +- module/sonarqube/lang/zh-cn.php | 2 +- module/sonarqube/view/create.html.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/sonarqube/control.php b/module/sonarqube/control.php index 1bce8757e9..84897e9fb5 100644 --- a/module/sonarqube/control.php +++ b/module/sonarqube/control.php @@ -68,7 +68,7 @@ class sonarqube extends control return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse'))); } - $this->view->title = $this->lang->sonarqube->common . $this->lang->colon . $this->lang->sonarqube->lblCreate; + $this->view->title = $this->lang->sonarqube->common . $this->lang->colon . $this->lang->sonarqube->createServer; $this->display(); } diff --git a/module/sonarqube/lang/en.php b/module/sonarqube/lang/en.php index 825fb03bac..5ebc459551 100644 --- a/module/sonarqube/lang/en.php +++ b/module/sonarqube/lang/en.php @@ -18,7 +18,7 @@ $lang->sonarqube->token = 'Token'; $lang->sonarqube->defaultProject = 'Default Project'; $lang->sonarqube->private = 'MD5 Verify'; -$lang->sonarqube->lblCreate = 'Create SonarQube Server'; +$lang->sonarqube->createServer = 'Create SonarQube Server'; $lang->sonarqube->desc = 'Description'; $lang->sonarqube->createSuccess = 'Create success'; diff --git a/module/sonarqube/lang/zh-cn.php b/module/sonarqube/lang/zh-cn.php index 417e23b466..392d69840b 100644 --- a/module/sonarqube/lang/zh-cn.php +++ b/module/sonarqube/lang/zh-cn.php @@ -18,7 +18,7 @@ $lang->sonarqube->token = 'Token'; $lang->sonarqube->defaultProject = '默认项目'; $lang->sonarqube->private = 'MD5验证'; -$lang->sonarqube->lblCreate = '添加SonarQube服务器'; +$lang->sonarqube->createServer = '添加SonarQube服务器'; $lang->sonarqube->desc = '描述'; $lang->sonarqube->createSuccess = "创建成功"; diff --git a/module/sonarqube/view/create.html.php b/module/sonarqube/view/create.html.php index 5daf0da4d8..21b72b46e9 100644 --- a/module/sonarqube/view/create.html.php +++ b/module/sonarqube/view/create.html.php @@ -15,7 +15,7 @@
-

sonarqube->lblCreate;?>

+

sonarqube->createServer;?>

From e69be078a35765f5ef6bcf8d39aa3274dfd80f78 Mon Sep 17 00:00:00 2001 From: zenggang Date: Wed, 12 Jan 2022 01:46:35 +0000 Subject: [PATCH 5/5] * Adjust code --- module/sonarqube/config.php | 5 +++++ module/sonarqube/control.php | 6 +----- module/sonarqube/view/create.html.php | 8 ++++---- 3 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 module/sonarqube/config.php diff --git a/module/sonarqube/config.php b/module/sonarqube/config.php new file mode 100644 index 0000000000..32f0451daf --- /dev/null +++ b/module/sonarqube/config.php @@ -0,0 +1,5 @@ +sonarqube = new stdclass(); + +$config->sonarqube->create = new stdclass(); +$config->sonarqube->create->requiredFields = 'name,url,account,password'; diff --git a/module/sonarqube/control.php b/module/sonarqube/control.php index 84897e9fb5..f6dd4434cc 100644 --- a/module/sonarqube/control.php +++ b/module/sonarqube/control.php @@ -82,11 +82,7 @@ class sonarqube extends control protected function checkToken() { $sonarqube = fixer::input('post')->get(); - $this->dao->update('sonarqube')->data($sonarqube) - ->check('name', 'notempty') - ->check('url', 'notempty') - ->check('account', 'notempty') - ->check('password', 'notempty'); + $this->dao->update('sonarqube')->data($sonarqube)->batchCheck($this->config->sonarqube->create->requiredFields, 'notempty'); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); if(strpos($sonarqube->url, 'http') !== 0) return $this->send(array('result' => 'fail', 'message' => array('url' => array($this->lang->sonarqube->hostError)))); diff --git a/module/sonarqube/view/create.html.php b/module/sonarqube/view/create.html.php index 21b72b46e9..15253bb19e 100644 --- a/module/sonarqube/view/create.html.php +++ b/module/sonarqube/view/create.html.php @@ -21,20 +21,20 @@
- + - + - + - +
sonarqube->name;?>sonarqube->placeholder->name}'");?>sonarqube->placeholder->name}'");?>
sonarqube->url;?>sonarqube->placeholder->url}'");?>sonarqube->placeholder->url}'");?>
sonarqube->account;?>
sonarqube->password;?>