package main import ( "errors" "log" "net/http" "cmbuyer/admin/internal/auth" "cmbuyer/admin/internal/config" "cmbuyer/admin/internal/server" "cmbuyer/admin/internal/storage/sqlite" "cmbuyer/admin/internal/tasks" ) const listenAddress = ":8080" func main() { if err := run(); err != nil { log.Fatal(err) } } func run() error { configuration, err := config.LoadFromEnv() if err != nil { return err } database, err := sqlite.Open(configuration.DatabaseSource) if err != nil { return err } defer database.Close() taskStore, err := tasks.NewSQLiteStore(database) if err != nil { return err } taskStore.SetStartPolicy(tasks.StartPolicy{AuthorizationTTL: configuration.AuthorizationTTL, MaxQuantity: configuration.MaxTaskQuantity, MaxTotalPrice: configuration.MaxTotalPrice}) router, err := server.NewRouter(server.Options{ AdminUsername: configuration.AdminUsername, AdminPasswordBcrypt: configuration.AdminPasswordBcrypt, Sessions: auth.NewManager(configuration.SessionSecret, configuration.CookieSecure), Tasks: taskStore, }) if err != nil { return err } err = http.ListenAndServe(listenAddress, router) if errors.Is(err, http.ErrServerClosed) { return nil } return err }