mirror of
https://github.com/VaalaCat/frp-panel.git
synced 2025-12-24 11:51:06 +08:00
feat: support change svc name and rolllback frp-auth
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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()),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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() {})
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,6 +65,12 @@ const (
|
||||
const (
|
||||
DefaultServerID = "default"
|
||||
DefaultAdminUserID = 1
|
||||
DefaultServiceName = "frpp"
|
||||
)
|
||||
|
||||
const (
|
||||
LocalHost = "127.0.0.1"
|
||||
FRP_Plugin_Multiuser = "multiuser"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user