diff --git a/biz/master/server/update_tunnel.go b/biz/master/server/update_tunnel.go index 0cd8c55..6d0d2bf 100644 --- a/biz/master/server/update_tunnel.go +++ b/biz/master/server/update_tunnel.go @@ -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") diff --git a/biz/server/rpc_pull_config.go b/biz/server/rpc_pull_config.go index b3a9fbe..360cc7d 100644 --- a/biz/server/rpc_pull_config.go +++ b/biz/server/rpc_pull_config.go @@ -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()), + ) +} diff --git a/biz/server/update_tunnel.go b/biz/server/update_tunnel.go index f97cca0..118d629 100644 --- a/biz/server/update_tunnel.go +++ b/biz/server/update_tunnel.go @@ -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) diff --git a/cmd/frpp/shared/cmd.go b/cmd/frpp/shared/cmd.go index 4af0228..6ac1d7a 100644 --- a/cmd/frpp/shared/cmd.go +++ b/cmd/frpp/shared/cmd.go @@ -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() {}) }, } } diff --git a/conf/helper.go b/conf/helper.go index efab58f..92aeeb1 100644 --- a/conf/helper.go +++ b/conf/helper.go @@ -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, } } diff --git a/defs/const.go b/defs/const.go index 4583494..cffb8c9 100644 --- a/defs/const.go +++ b/defs/const.go @@ -65,6 +65,12 @@ const ( const ( DefaultServerID = "default" DefaultAdminUserID = 1 + DefaultServiceName = "frpp" +) + +const ( + LocalHost = "127.0.0.1" + FRP_Plugin_Multiuser = "multiuser" ) const ( diff --git a/services/server/frps_service.go b/services/server/frps_service.go index 16d0cf8..db7276c 100644 --- a/services/server/frps_service.go +++ b/services/server/frps_service.go @@ -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, diff --git a/utils/system_service.go b/utils/system_service.go index bf69374..bd87111 100644 --- a/utils/system_service.go +++ b/utils/system_service.go @@ -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