Files
metacrypt/internal/server/server.go
Kyle Isom c5dcb63165 Migrate HTTP server to mcdsl/httpserver
Replace manual chi/TLS/http.Server setup with httpserver.New which
provides TLS 1.3, config-driven timeouts, and the chi router. Replace
local loggingMiddleware and statusWriter with mcdsl equivalents.

Seal-aware middleware (requireUnseal, requireAuth, requireAdmin) and
token extraction remain metacrypt-specific.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:16:16 -07:00

68 lines
1.8 KiB
Go

// Package server implements the HTTP server for Metacrypt.
package server
import (
"context"
"log/slog"
"sync"
"google.golang.org/grpc"
"git.wntrmute.dev/kyle/mcdsl/httpserver"
internacme "git.wntrmute.dev/kyle/metacrypt/internal/acme"
"git.wntrmute.dev/kyle/metacrypt/internal/audit"
"git.wntrmute.dev/kyle/metacrypt/internal/auth"
"git.wntrmute.dev/kyle/metacrypt/internal/config"
"git.wntrmute.dev/kyle/metacrypt/internal/engine"
"git.wntrmute.dev/kyle/metacrypt/internal/policy"
"git.wntrmute.dev/kyle/metacrypt/internal/seal"
)
// Server is the Metacrypt HTTP server.
type Server struct {
cfg *config.Config
seal *seal.Manager
auth *auth.Authenticator
policy *policy.Engine
engines *engine.Registry
audit *audit.Logger
httpSrv *httpserver.Server
grpcSrv *grpc.Server
logger *slog.Logger
acmeHandlers map[string]*internacme.Handler
version string
acmeMu sync.Mutex
}
// New creates a new server.
func New(cfg *config.Config, sealMgr *seal.Manager, authenticator *auth.Authenticator,
policyEngine *policy.Engine, engineRegistry *engine.Registry, auditLog *audit.Logger, logger *slog.Logger, version string) *Server {
s := &Server{
cfg: cfg,
seal: sealMgr,
auth: authenticator,
policy: policyEngine,
engines: engineRegistry,
audit: auditLog,
logger: logger,
version: version,
}
return s
}
// Start starts the HTTPS server.
func (s *Server) Start() error {
s.httpSrv = httpserver.New(s.cfg.Server.ServerConfig, s.logger)
s.httpSrv.Router.Use(s.httpSrv.LoggingMiddleware)
s.registerRoutes(s.httpSrv.Router)
return s.httpSrv.ListenAndServeTLS()
}
// Shutdown gracefully shuts down the server.
func (s *Server) Shutdown(ctx context.Context) error {
if s.httpSrv != nil {
return s.httpSrv.Shutdown(ctx)
}
return nil
}