feat: support change svc name and rolllback frp-auth

This commit is contained in:
VaalaCat
2025-12-10 14:03:42 +00:00
parent aefb72fb5e
commit 192f7c1e32
8 changed files with 57 additions and 24 deletions

View File

@@ -6,6 +6,7 @@ import (
"github.com/VaalaCat/frp-panel/common"
"github.com/VaalaCat/frp-panel/conf"
"github.com/VaalaCat/frp-panel/defs"
"github.com/VaalaCat/frp-panel/pb"
"github.com/VaalaCat/frp-panel/services/app"
"github.com/VaalaCat/frp-panel/services/dao"
@@ -13,6 +14,7 @@ import (
"github.com/VaalaCat/frp-panel/utils"
"github.com/VaalaCat/frp-panel/utils/logger"
v1 "github.com/fatedier/frp/pkg/config/v1"
"github.com/samber/lo"
)
func UpdateFrpsHander(c *app.Context, req *pb.UpdateFRPSRequest) (*pb.UpdateFRPSResponse, error) {
@@ -40,7 +42,10 @@ func UpdateFrpsHander(c *app.Context, req *pb.UpdateFRPSRequest) (*pb.UpdateFRPS
return nil, err
}
srvCfg.HTTPPlugins = []v1.HTTPPluginOptions{conf.FRPsAuthOption(c.GetApp().GetConfig())}
lo.Filter(srvCfg.HTTPPlugins, func(item v1.HTTPPluginOptions, _ int) bool {
return item.Name != defs.FRP_Plugin_Multiuser
})
srvCfg.HTTPPlugins = append(srvCfg.HTTPPlugins, conf.FRPsAuthOption(c.GetApp().GetConfig()))
if err := srv.SetConfigContent(srvCfg); err != nil {
logger.Logger(context.Background()).WithError(err).Errorf("cannot set server config")

View File

@@ -4,15 +4,20 @@ import (
"context"
"reflect"
"github.com/VaalaCat/frp-panel/conf"
"github.com/VaalaCat/frp-panel/defs"
"github.com/VaalaCat/frp-panel/pb"
"github.com/VaalaCat/frp-panel/services/app"
"github.com/VaalaCat/frp-panel/services/server"
"github.com/VaalaCat/frp-panel/utils"
"github.com/VaalaCat/frp-panel/utils/logger"
v1 "github.com/fatedier/frp/pkg/config/v1"
"github.com/samber/lo"
)
func PullConfig(appInstance app.Application, serverID, serverSecret string) error {
ctx := context.Background()
ctx := app.NewContext(context.Background(), appInstance)
logger.Logger(ctx).Infof("start to pull server config, serverID: [%s]", serverID)
cli := appInstance.GetMasterCli()
@@ -50,9 +55,22 @@ func PullConfig(appInstance app.Application, serverID, serverSecret string) erro
return nil
}
}
InjectAuthPlugin(ctx, s)
ctrl.Add(serverID, server.NewServerHandler(s))
ctrl.Run(serverID)
logger.Logger(ctx).Infof("pull server config success, serverID: [%s]", serverID)
return nil
}
func InjectAuthPlugin(ctx *app.Context, cfg *v1.ServerConfig) {
cfg.HTTPPlugins = lo.Filter(cfg.HTTPPlugins, func(item v1.HTTPPluginOptions, _ int) bool {
return item.Name != defs.FRP_Plugin_Multiuser
})
cfg.HTTPPlugins = append(
cfg.HTTPPlugins,
conf.FRPsAuthOption(ctx.GetApp().GetConfig()),
)
}

View File

@@ -37,6 +37,9 @@ func UpdateFrpsHander(ctx *app.Context, req *pb.UpdateFRPSRequest) (*pb.UpdateFR
}, nil
}
}
InjectAuthPlugin(ctx, s)
ctx.GetApp().GetServerController().Add(serverID, server.NewServerHandler(s))
ctx.GetApp().GetServerController().Run(serverID)

View File

@@ -183,7 +183,7 @@ func NewMasterCmd(cfg conf.Config, fs embed.FS) *cobra.Command {
}
}
if srv, err := utils.CreateSystemService(args, run); err != nil {
if srv, err := utils.CreateSystemService(defs.DefaultServiceName, args, run); err != nil {
run()
} else {
srv.Run()
@@ -225,7 +225,7 @@ func NewClientCmd(cfg conf.Config) *cobra.Command {
logger.Logger(context.Background()).Fatalf("clientApp FX Application Error: %v", err)
}
}
if srv, err := utils.CreateSystemService(args, run); err != nil {
if srv, err := utils.CreateSystemService(defs.DefaultServiceName, args, run); err != nil {
run()
} else {
srv.Run()
@@ -270,7 +270,7 @@ func NewServerCmd(cfg conf.Config) *cobra.Command {
logger.Logger(context.Background()).Fatalf("serverApp FX Application Error: %v", err)
}
}
if srv, err := utils.CreateSystemService(args, run); err != nil {
if srv, err := utils.CreateSystemService(defs.DefaultServiceName, args, run); err != nil {
run()
} else {
srv.Run()
@@ -290,7 +290,7 @@ func NewInstallServiceCmd() *cobra.Command {
DisableFlagParsing: true,
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
utils.ControlSystemService(args, "install", func() {})
utils.ControlSystemService(defs.DefaultServiceName, args, "install", func() {})
},
}
}
@@ -302,7 +302,7 @@ func NewUninstallServiceCmd() *cobra.Command {
DisableFlagParsing: true,
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
utils.ControlSystemService(args, "uninstall", func() {})
utils.ControlSystemService(defs.DefaultServiceName, args, "uninstall", func() {})
},
}
}
@@ -314,7 +314,7 @@ func NewStartServiceCmd() *cobra.Command {
DisableFlagParsing: true,
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
utils.ControlSystemService(args, "start", func() {})
utils.ControlSystemService(defs.DefaultServiceName, args, "start", func() {})
},
}
}
@@ -326,7 +326,7 @@ func NewStopServiceCmd() *cobra.Command {
DisableFlagParsing: true,
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
utils.ControlSystemService(args, "stop", func() {})
utils.ControlSystemService(defs.DefaultServiceName, args, "stop", func() {})
},
}
}
@@ -338,7 +338,7 @@ func NewRestartServiceCmd() *cobra.Command {
DisableFlagParsing: true,
DisableFlagsInUseLine: true,
Run: func(cmd *cobra.Command, args []string) {
utils.ControlSystemService(args, "restart", func() {})
utils.ControlSystemService(defs.DefaultServiceName, args, "restart", func() {})
},
}
}

View File

@@ -37,18 +37,17 @@ func ServerAPIListenAddr(cfg Config) string {
}
func FRPsAuthOption(cfg Config) v1.HTTPPluginOptions {
apiUrl := GetAPIURL(cfg)
parsedUrl, err := url.Parse(apiUrl)
authUrl := fmt.Sprintf("http://%s:%d/auth", defs.LocalHost, cfg.Server.APIPort)
parsedUrl, err := url.Parse(authUrl)
if err != nil {
logger.Logger(context.Background()).WithError(err).Fatalf("parse auth url error")
}
return v1.HTTPPluginOptions{
Name: "multiuser",
Ops: []string{"Login"},
Addr: parsedUrl.Host,
Path: "/auth",
TLSVerify: false,
Name: defs.FRP_Plugin_Multiuser,
Ops: []string{"Login"},
Addr: parsedUrl.Host,
Path: parsedUrl.Path,
}
}

View File

@@ -65,6 +65,12 @@ const (
const (
DefaultServerID = "default"
DefaultAdminUserID = 1
DefaultServiceName = "frpp"
)
const (
LocalHost = "127.0.0.1"
FRP_Plugin_Multiuser = "multiuser"
)
const (

View File

@@ -25,7 +25,7 @@ func NewServerHandler(svrCfg *v1.ServerConfig) app.ServerHandler {
warning, err := validation.ValidateServerConfig(svrCfg)
if warning != nil {
logger.Logger(context.Background()).WithError(err).Warnf("validate server config warning: %+v", warning)
logger.Logger(ctx).WithError(err).Warnf("validate server config warning: %+v", warning)
}
if err != nil {
logger.Logger(ctx).Panic(err)
@@ -34,9 +34,11 @@ func NewServerHandler(svrCfg *v1.ServerConfig) app.ServerHandler {
var svr *server.Service
if svr, err = server.NewService(svrCfg); err != nil {
logger.Logger(context.Background()).WithError(err).Panic("cannot create server, exit and restart")
logger.Logger(ctx).WithError(err).Panic("cannot create server, exit and restart")
}
logger.Logger(ctx).Debugf("create server, config is: [ %+v ]", svrCfg)
return &serverImpl{
srv: svr,
Common: svrCfg,

View File

@@ -35,14 +35,14 @@ func (ss *SystemService) iRun() {
ss.run()
}
func CreateSystemService(args []string, run func()) (service.Service, error) {
func CreateSystemService(svcName string, args []string, run func()) (service.Service, error) {
currentPath, err := os.Executable()
if err != nil {
return nil, fmt.Errorf("get current path failed, err: %v", err)
}
svcConfig := &service.Config{
Name: "frpp",
Name: svcName,
DisplayName: "frp-panel",
Description: "this is frp-panel service, developed by [VaalaCat] - https://github.com/VaalaCat/frp-panel",
Arguments: args,
@@ -60,11 +60,11 @@ func CreateSystemService(args []string, run func()) (service.Service, error) {
return s, nil
}
func ControlSystemService(args []string, action string, run func()) error {
func ControlSystemService(svcName string, args []string, action string, run func()) error {
ctx := context.Background()
logger.Logger(ctx).Info("try to ", action, " service, args:", args)
s, err := CreateSystemService(args, run)
s, err := CreateSystemService(svcName, args, run)
if err != nil {
logger.Logger(ctx).WithError(err).Error("create service controller failed")
return err