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 @@ + +
访问地址:获取中...+ +