From cb5d9acf3f5d55840492c4e9f8ba50a921c50bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sat, 22 Jul 2023 18:01:16 +0800 Subject: [PATCH] feat: add phpmyadmin --- .../phpmyadmin/phpmyadmin_controller.go | 81 ++++++++++++++++ app/plugins/phpmyadmin/phpmyadmin.go | 14 +++ app/services/plugin.go | 13 +++ public/panel/views/plugins/phpmyadmin.html | 92 +++++++++++++++++++ routes/plugin.go | 10 +- scripts/phpmyadmin/install.sh | 31 +++++-- scripts/phpmyadmin/uninstall.sh | 6 +- 7 files changed, 236 insertions(+), 11 deletions(-) create mode 100644 app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go create mode 100644 app/plugins/phpmyadmin/phpmyadmin.go create mode 100644 public/panel/views/plugins/phpmyadmin.html diff --git a/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go b/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go new file mode 100644 index 00000000..9bed043b --- /dev/null +++ b/app/http/controllers/plugins/phpmyadmin/phpmyadmin_controller.go @@ -0,0 +1,81 @@ +package phpmyadmin + +import ( + "os" + "regexp" + "strings" + + "github.com/goravel/framework/contracts/http" + + "panel/app/http/controllers" + "panel/pkg/tools" +) + +type PhpMyAdminController struct { +} + +func NewPhpMyAdminController() *PhpMyAdminController { + return &PhpMyAdminController{} +} + +func (c *PhpMyAdminController) Info(ctx http.Context) { + if !controllers.Check(ctx, "phpmyadmin") { + return + } + + files, err := os.ReadDir("/www/server/phpmyadmin") + if err != nil { + controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 目录") + return + } + + var phpmyadmin string + for _, f := range files { + if strings.HasPrefix(f.Name(), "phpmyadmin_") { + phpmyadmin = f.Name() + } + } + if len(phpmyadmin) == 0 { + controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 目录") + return + } + + conf := tools.ReadFile("/www/server/vhost/phpmyadmin.conf") + match := regexp.MustCompile(`listen\s+(\d+);`).FindStringSubmatch(conf) + if len(match) == 0 { + controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 端口") + return + } + + controllers.Success(ctx, http.Json{ + "phpmyadmin": phpmyadmin, + "port": match[1], + }) +} + +func (c *PhpMyAdminController) SetPort(ctx http.Context) { + if !controllers.Check(ctx, "phpmyadmin") { + return + } + + port := ctx.Request().Input("port") + if len(port) == 0 { + controllers.Error(ctx, http.StatusBadRequest, "端口不能为空") + return + } + + conf := tools.ReadFile("/www/server/vhost/phpmyadmin.conf") + conf = regexp.MustCompile(`listen\s+(\d+);`).ReplaceAllString(conf, "listen "+port+";") + tools.WriteFile("/www/server/vhost/phpmyadmin.conf", conf, 0644) + + if tools.IsRHEL() { + tools.ExecShell("firewall-cmd --zone=public --add-port=" + port + "/tcp --permanent") + tools.ExecShell("firewall-cmd --reload") + } else { + tools.ExecShell("ufw allow " + port + "/tcp") + tools.ExecShell("ufw reload") + } + tools.ExecShell("systemctl reload openresty") + + controllers.Success(ctx, nil) +} diff --git a/app/plugins/phpmyadmin/phpmyadmin.go b/app/plugins/phpmyadmin/phpmyadmin.go new file mode 100644 index 00000000..e0f9fb03 --- /dev/null +++ b/app/plugins/phpmyadmin/phpmyadmin.go @@ -0,0 +1,14 @@ +package phpmyadmin + +var ( + Name = "phpMyAdmin" + Author = "耗子" + Description = "phpMyAdmin 是一个以 PHP 为基础,以 Web-Base 方式架构在网站主机上的 MySQL 数据库管理工具。" + Slug = "phpmyadmin" + Version = "5.2.1" + Requires = []string{} + Excludes = []string{} + Install = `bash /www/panel/scripts/phpmyadmin/install.sh` + Uninstall = `bash /www/panel/scripts/phpmyadmin/uninstall.sh` + Update = `bash /www/panel/scripts/phpmyadmin/uninstall.sh && bash /www/panel/scripts/phpmyadmin/install.sh` +) diff --git a/app/services/plugin.go b/app/services/plugin.go index d7eb2bab..d3aa1206 100644 --- a/app/services/plugin.go +++ b/app/services/plugin.go @@ -10,6 +10,7 @@ import ( "panel/app/plugins/openresty" "panel/app/plugins/php74" "panel/app/plugins/php80" + "panel/app/plugins/phpmyadmin" ) // PanelPlugin 插件元数据结构 @@ -114,6 +115,18 @@ func (r *PluginImpl) All() []PanelPlugin { Uninstall: php80.Uninstall, Update: php80.Update, }) + p = append(p, PanelPlugin{ + Name: phpmyadmin.Name, + Author: phpmyadmin.Author, + Description: phpmyadmin.Description, + Slug: phpmyadmin.Slug, + Version: phpmyadmin.Version, + Requires: phpmyadmin.Requires, + Excludes: phpmyadmin.Excludes, + Install: phpmyadmin.Install, + Uninstall: phpmyadmin.Uninstall, + Update: phpmyadmin.Update, + }) return p } diff --git a/public/panel/views/plugins/phpmyadmin.html b/public/panel/views/plugins/phpmyadmin.html new file mode 100644 index 00000000..d32d2518 --- /dev/null +++ b/public/panel/views/plugins/phpmyadmin.html @@ -0,0 +1,92 @@ + +phpMyAdmin +
+
+
+
+
phpMyAdmin 信息
+
+
访问地址:获取中...
+
+ 基本设置 +
+
+
+ +
+ +
+
查看 / 修改 phpMyAdmin 访问端口
+
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/routes/plugin.go b/routes/plugin.go index 79a2ee0b..3dad6839 100644 --- a/routes/plugin.go +++ b/routes/plugin.go @@ -3,12 +3,13 @@ package routes import ( "github.com/goravel/framework/contracts/route" "github.com/goravel/framework/facades" - "panel/app/http/controllers/plugins/mysql57" - "panel/app/http/controllers/plugins/php80" + "panel/app/http/controllers/plugins/mysql57" "panel/app/http/controllers/plugins/mysql80" "panel/app/http/controllers/plugins/openresty" "panel/app/http/controllers/plugins/php74" + "panel/app/http/controllers/plugins/php80" + "panel/app/http/controllers/plugins/phpmyadmin" "panel/app/http/middleware" ) @@ -123,4 +124,9 @@ func Plugin() { route.Post("installExtension", php80Controller.InstallExtension) route.Post("uninstallExtension", php80Controller.UninstallExtension) }) + facades.Route().Prefix("api/plugins/phpmyadmin").Middleware(middleware.Jwt()).Group(func(route route.Route) { + phpMyAdminController := phpmyadmin.NewPhpMyAdminController() + route.Get("info", phpMyAdminController.Info) + route.Post("port", phpMyAdminController.SetPort) + }) } diff --git a/scripts/phpmyadmin/install.sh b/scripts/phpmyadmin/install.sh index 96792076..a2c1ab12 100644 --- a/scripts/phpmyadmin/install.sh +++ b/scripts/phpmyadmin/install.sh @@ -22,7 +22,7 @@ ARCH=$(uname -m) OS=$(source /etc/os-release && { [[ "$ID" == "debian" ]] && echo "debian"; } || { [[ "$ID" == "centos" ]] || [[ "$ID" == "rhel" ]] || [[ "$ID" == "rocky" ]] || [[ "$ID" == "almalinux" ]] && echo "centos"; } || echo "unknown") downloadUrl="https://dl.cdn.haozi.net/panel/phpmyadmin" setupPath="/www" -phpmyadminPath="${setupPath}/wwwroot/phpmyadmin" +phpmyadminPath="${setupPath}/server/phpmyadmin" phpmyadminVersion="5.2.1" randomDir="$(cat /dev/urandom | head -n 16 | md5sum | head -c 10)" @@ -45,7 +45,10 @@ chmod -R 755 ${phpmyadminPath} rm -rf phpmyadmin.zip # 判断PHP版本 -phpVersion="74" +phpVersion="" +if [ -d "/www/server/php/74" ]; then + phpVersion="74" +fi if [ -d "/www/server/php/80" ]; then phpVersion="80" fi @@ -56,6 +59,13 @@ if [ -d "/www/server/php/82" ]; then phpVersion="82" fi +if [ "${phpVersion}" == "" ]; then + echo -e $HR + echo "错误:未安装 PHP" + rm -rf ${phpmyadminPath} + exit 1 +fi + # 写入 phpMyAdmin 配置文件 cat >/www/server/vhost/phpmyadmin.conf </dev/null 2>&1 -firewall-cmd --reload +if [ "${OS}" == "centos" ]; then + firewall-cmd --permanent --zone=public --add-port=888/tcp >/dev/null 2>&1 + firewall-cmd --reload +elif [ "${OS}" == "debian" ]; then + ufw allow 888/tcp >/dev/null 2>&1 + ufw reload +fi -panel writePlugin phpmyadmin +panel writePlugin phpmyadmin 5.2.1 systemctl reload openresty + +echo -e "${HR}\phpMyAdmin 安装完成\n${HR}" diff --git a/scripts/phpmyadmin/uninstall.sh b/scripts/phpmyadmin/uninstall.sh index 3f641403..08bd4a9f 100644 --- a/scripts/phpmyadmin/uninstall.sh +++ b/scripts/phpmyadmin/uninstall.sh @@ -19,12 +19,12 @@ limitations under the License. HR="+----------------------------------------------------" setupPath="/www" -phpmyadminPath="${setupPath}/wwwroot/phpmyadmin" +phpmyadminPath="${setupPath}/server/phpmyadmin" -rm -rf /www/server/vhost/phpmyadmin.conf +rm -rf ${setupPath}/server/vhost/phpmyadmin.conf rm -rf ${phpmyadminPath} panel deletePlugin phpmyadmin systemctl reload openresty -echo -e "${HR}\phpMyAdmin uninstall completed.\n${HR}" +echo -e "${HR}\phpMyAdmin 卸载完成\n${HR}"