package main import ( "errors" "log" "net/http" "cmbuyer/admin/internal/auth" "cmbuyer/admin/internal/config" "cmbuyer/admin/internal/evidence" "cmbuyer/admin/internal/server" evidencestorage "cmbuyer/admin/internal/storage/evidence" "cmbuyer/admin/internal/storage/sqlite" "cmbuyer/admin/internal/taskdetail" "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}) detailStore, err := taskdetail.NewSQLiteStore(database) if err != nil { return err } evidenceStore, err := evidencestorage.NewStore(database, configuration.EvidenceDirectory) if err != nil { return err } router, err := server.NewRouter(server.Options{ AdminUsername: configuration.AdminUsername, AdminPasswordBcrypt: configuration.AdminPasswordBcrypt, Sessions: auth.NewManager(configuration.SessionSecret, configuration.CookieSecure), Tasks: taskStore, TaskDetails: detailStore, Evidence: evidenceStore, DeviceAuthenticator: evidence.RejectAllDeviceAuthenticator{}, }) if err != nil { return err } err = http.ListenAndServe(listenAddress, router) if errors.Is(err, http.ErrServerClosed) { return nil } return err }