网关实现自定义接口安全检查与边缘节点连接权限验证

This commit is contained in:
2025-05-15 15:56:20 +08:00
parent b29882f0a7
commit d65fe4db6f
25 changed files with 353 additions and 703 deletions

View File

@@ -2,15 +2,18 @@ package server
import (
"context"
"fmt"
"log/slog"
"os"
"os/signal"
"proxy-server/pkg/utils"
"proxy-server/server/app"
"proxy-server/server/core"
"proxy-server/server/debug"
"proxy-server/server/env"
"proxy-server/server/fwd"
"proxy-server/server/pkg/env"
"proxy-server/server/pkg/log"
"proxy-server/server/pkg/orm"
g "proxy-server/server/globals"
"proxy-server/server/log"
"proxy-server/server/report"
"proxy-server/server/web"
"sync"
@@ -24,14 +27,7 @@ import (
_ "net/http/pprof"
)
const (
Version = 1
RestoreMagic = 0x72
)
type server struct {
id int32
name string
}
func New() *server {
@@ -94,22 +90,15 @@ func (s *server) Run() (err error) {
// 报告上线
slog.Debug("报告服务上线")
var reportErrCh = make(chan error, 1)
defer close(reportErrCh)
go func() {
id, err := report.Online(ctx, s.name)
if err != nil {
reportErrCh <- err
return
}
s.id = id
}()
err = report.Online(app.Name)
if err != nil {
return fmt.Errorf("服务上线失败: %w", err)
}
// 等待退出信号
osQuit := make(chan os.Signal, 1)
signal.Notify(osQuit, os.Interrupt, syscall.SIGTERM)
var reportErr error
select {
case <-osQuit:
slog.Info("服务主动退出")
@@ -117,26 +106,23 @@ func (s *server) Run() (err error) {
slog.Warn("fwd 服务异常退出", "err", err)
case err := <-apiQuit:
slog.Warn("web 服务异常退出", "err", err)
case reportErr = <-reportErrCh:
slog.Warn("报告服务上线发生错误", "err", reportErr)
}
cancel()
// 报告下线
if reportErr == nil {
slog.Debug("报告服务下线")
go func() {
err := report.Offline(ctx, s.name)
if err != nil {
slog.Error("报告服务下线发生错误", "err", err)
}
}()
}
// 等待其它服务关闭
timeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// 报告下线
slog.Debug("报告服务下线")
err = report.Offline(app.Name)
if err != nil {
slog.Error("服务下线失败", "err", err)
}
// 关闭 redis
g.ExitRedis()
// 等待其它服务关闭
select {
case <-utils.ChanWgWait(timeout, &wg):
slog.Info("服务正常关闭")
@@ -156,7 +142,7 @@ func (s *server) init() error {
log.Init()
env.Init()
orm.Init()
g.InitRedis()
return nil
}
@@ -169,31 +155,29 @@ func (s *server) restore() error {
return err
}
if len(bytes) == 17 && bytes[0] == RestoreMagic {
s.name = uuid.UUID(bytes[1:]).String()
slog.Info("恢复服务名称", "name", s.name)
if len(bytes) == 17 && bytes[0] == core.RestoreMagic {
app.Name = uuid.UUID(bytes[1:]).String()
slog.Info("恢复服务名称", "name", app.Name)
} else {
var u = uuid.New()
s.name = u.String()
app.Name = u.String()
bytes = make([]byte, 17)
bytes[0] = RestoreMagic
bytes[0] = core.RestoreMagic
copy(bytes[1:], u[:])
err := os.WriteFile(file, bytes, 0644)
if err != nil {
return err
}
slog.Info("生成服务名称", "name", s.name)
slog.Info("生成服务名称", "name", app.Name)
}
return nil
}
func (s *server) startFwd(ctx context.Context) error {
server := fwd.New(&fwd.Config{
Id: &s.id,
})
server := fwd.New()
go func() {
<-ctx.Done()
server.Stop()