cea9b941cf
Build and Push / build (push) Failing after 13m20s
Go 项目,包含: - 服务端 updater:两阶段协议,ECDSA 签名验证,AES-GCM 加密 - 发送端 dcu-send:Gitea Action CLI - internal/auth:加解密/签名/会话管理 - internal/docker:Docker CLI 容器查找/拉取/重建 - action/:Gitea Action 定义 - deploy/Dockerfile:多阶段构建 - .gitea/workflows/build.yaml:CI/CD
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
"time"
|
|
|
|
"crypto/ecdsa"
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
|
|
"gitea.songhuwan.com/actions/docker-compose-updater/internal/auth"
|
|
"gitea.songhuwan.com/actions/docker-compose-updater/internal/docker"
|
|
)
|
|
|
|
// Server 封装 HTTP 服务器。
|
|
type Server struct {
|
|
addr string
|
|
router *chi.Mux
|
|
srv *http.Server
|
|
}
|
|
|
|
// New 创建 Server。
|
|
func New(
|
|
addr string,
|
|
verifyKey *ecdsa.PublicKey,
|
|
updater *docker.Updater,
|
|
sessionTTL time.Duration,
|
|
nonceTTL time.Duration,
|
|
timeWindow time.Duration,
|
|
) *Server {
|
|
sessionMgr := auth.NewSessionManager(sessionTTL)
|
|
nonceCache := auth.NewNonceCache(nonceTTL)
|
|
h := NewHandler(verifyKey, sessionMgr, nonceCache, updater, timeWindow)
|
|
|
|
r := chi.NewRouter()
|
|
r.Use(middleware.Logger)
|
|
r.Use(middleware.Recoverer)
|
|
r.Use(middleware.RequestSize(1024 * 1024)) // 1MB
|
|
|
|
r.Get("/health", h.Health)
|
|
r.Post("/session", h.HandleSession)
|
|
r.Post("/hook", h.HandleHook)
|
|
|
|
return &Server{
|
|
addr: addr,
|
|
router: r,
|
|
}
|
|
}
|
|
|
|
// Start 启动 HTTP 服务器。
|
|
func (s *Server) Start() error {
|
|
s.srv = &http.Server{
|
|
Addr: s.addr,
|
|
Handler: s.router,
|
|
}
|
|
slog.Info("server starting", "addr", s.addr)
|
|
return s.srv.ListenAndServe()
|
|
}
|