56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
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
|
|
}
|