Files
docker-compose-updater/internal/server/server.go
T
ilovintit cea9b941cf
Build and Push / build (push) Failing after 13m20s
Initial commit: docker-compose-updater
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
2026-06-08 15:16:46 +08:00

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()
}