Files
metacrypt/internal/server/server.go
Kyle Isom bbe382dc10 Migrate module path from kyle/ to mc/ org
All import paths updated to git.wntrmute.dev/mc/. Bumps mcdsl to v1.2.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 02:05:59 -07:00

71 lines
1.9 KiB
Go

// Package server implements the HTTP server for Metacrypt.
package server
import (
"context"
"database/sql"
"log/slog"
"sync"
"google.golang.org/grpc"
"git.wntrmute.dev/mc/mcdsl/httpserver"
internacme "git.wntrmute.dev/mc/metacrypt/internal/acme"
"git.wntrmute.dev/mc/metacrypt/internal/audit"
"git.wntrmute.dev/mc/metacrypt/internal/auth"
"git.wntrmute.dev/mc/metacrypt/internal/config"
"git.wntrmute.dev/mc/metacrypt/internal/engine"
"git.wntrmute.dev/mc/metacrypt/internal/policy"
"git.wntrmute.dev/mc/metacrypt/internal/seal"
)
// Server is the Metacrypt HTTP server.
type Server struct {
cfg *config.Config
database *sql.DB
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, database *sql.DB, 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,
database: database,
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
}