55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package runcmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/kanootoko/codevault/internal/config"
|
|
"github.com/kanootoko/codevault/internal/db"
|
|
"github.com/kanootoko/codevault/internal/httpserver"
|
|
"github.com/kanootoko/codevault/internal/observability/logging"
|
|
"github.com/kanootoko/codevault/internal/observability/metrics"
|
|
"github.com/kanootoko/codevault/internal/ratelimit"
|
|
"github.com/kanootoko/codevault/internal/utils/gshutdown"
|
|
)
|
|
|
|
func RunServer(ctx context.Context, appConfig config.Config) error {
|
|
logger, err := logging.LoggerFromCtx(ctx)
|
|
if err != nil {
|
|
return fmt.Errorf("error on getting logger: %w", err)
|
|
}
|
|
|
|
appMetrics := metrics.NewMetrics(metrics.GetMeter())
|
|
|
|
database, err := db.Open(appConfig.Database.Path)
|
|
if err != nil {
|
|
return fmt.Errorf("error on opening database: %w", err)
|
|
}
|
|
_ = gshutdown.SubtaskStarted(ctx, "database")
|
|
go func() {
|
|
defer func() { _ = gshutdown.SubtaskFinished(ctx, "database") }()
|
|
<-ctx.Done()
|
|
if err := database.Close(); err != nil {
|
|
logger.Error("error on closing database", zap.Error(err))
|
|
}
|
|
}()
|
|
|
|
secrets := db.NewSecretsRepository(database)
|
|
users := db.NewUsersRepository(database)
|
|
|
|
limiter := ratelimit.NewLimiter(appConfig.RateLimit.MaxFailures, appConfig.RateLimit.Window)
|
|
|
|
router, err := httpserver.New(secrets, users, limiter, appMetrics, appConfig.Server.TrustedProxies)
|
|
if err != nil {
|
|
return fmt.Errorf("error on building http router: %w", err)
|
|
}
|
|
|
|
logger.Info("starting codevault server")
|
|
if err := httpserver.Run(ctx, appConfig.Server.Address, router, limiter); err != nil {
|
|
return fmt.Errorf("error on running http server: %w", err)
|
|
}
|
|
return nil
|
|
}
|