2026-08-03 18:13:30 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"log"
|
|
|
|
|
"net/http"
|
|
|
|
|
|
2026-08-04 14:57:40 +08:00
|
|
|
"cmbuyer/admin/internal/auth"
|
|
|
|
|
"cmbuyer/admin/internal/config"
|
2026-08-03 18:13:30 +08:00
|
|
|
"cmbuyer/admin/internal/server"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const listenAddress = ":8080"
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
if err := run(); err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func run() error {
|
2026-08-04 14:57:40 +08:00
|
|
|
configuration, err := config.LoadFromEnv()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
router, err := server.NewRouter(server.Options{
|
|
|
|
|
AdminUsername: configuration.AdminUsername,
|
|
|
|
|
AdminPasswordBcrypt: configuration.AdminPasswordBcrypt,
|
|
|
|
|
Sessions: auth.NewManager(configuration.SessionSecret, configuration.CookieSecure),
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = http.ListenAndServe(listenAddress, router)
|
2026-08-03 18:13:30 +08:00
|
|
|
if errors.Is(err, http.ErrServerClosed) {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|