49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
// Command palette is the palette pastebin server entrypoint: flag parsing
|
|
// and wiring of the store, API, and web packages.
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"net/http"
|
|
"time"
|
|
|
|
"palette/internal/api"
|
|
"palette/internal/store"
|
|
"palette/internal/web"
|
|
)
|
|
|
|
func main() {
|
|
// #40: --reset-admin-key regenerates the admin key and exits.
|
|
if len(os.Args) > 1 && os.Args[1] == "--reset-admin-key" {
|
|
api.HandleResetAdminKey(api.EnvOr("PALETTE_DB", "palette.db"))
|
|
return
|
|
}
|
|
cfg := api.Config{
|
|
Addr: api.EnvOr("PALETTE_ADDR", ":8080"),
|
|
DBPath: api.EnvOr("PALETTE_DB", "palette.db"),
|
|
MaxTextBytes: int64(api.EnvIntOr("PALETTE_MAX_TEXT", 5*1024*1024)),
|
|
MaxItemBytes: int64(api.EnvIntOr("PALETTE_MAX_ITEM", 25*1024*1024)),
|
|
}
|
|
st, err := store.OpenStore(cfg.DBPath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
adminKey, err := api.ResolveAdminKey(cfg.DBPath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
ss := api.LoadSettingsStore(cfg.DBPath, cfg)
|
|
|
|
st.StartSweeper(time.Minute, ss.Get().CustomSlugReservationDays)
|
|
|
|
ui, err := web.New()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
srv := api.NewServer(st, cfg, ui, ss, adminKey)
|
|
log.Printf("palette listening on %s", cfg.Addr)
|
|
log.Fatal(http.ListenAndServe(cfg.Addr, srv.Routes()))
|
|
}
|