package main import ( "flag" "fmt" "log/slog" "net/http" "os" "strings" "time" "git.wilk.cx/cr-browser/registry" "git.wilk.cx/cr-browser/web" ) func main() { httpAddr := flag.String("http", ":8080", "HTTP listen address") defaultVerbosity := os.Getenv("VERBOSITY") verbosity := flag.String("verbosity", defaultVerbosity, "Log verbosity: ERR, WARN, INFO (env VERBOSITY)") flag.Parse() var level slog.Level switch strings.ToUpper(strings.TrimSpace(*verbosity)) { case "ERROR": level = slog.LevelError case "WARN": level = slog.LevelWarn case "INFO": level = slog.LevelInfo case "": level = slog.LevelInfo default: fmt.Fprintf(os.Stderr, "invalid verbosity %q: expected ERROR, WARN, or INFO\n", *verbosity) os.Exit(2) } slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: level}))) registryURL := os.Getenv("REGISTRY_URL") if registryURL == "" { registryURL = "http://localhost:5000" } extRegistryURL := os.Getenv("EXT_REGISTRY_URL") if extRegistryURL == "" { extRegistryURL = registryURL } registryHost := strings.TrimRight(strings.TrimPrefix(strings.TrimPrefix(extRegistryURL, "https://"), "http://"), "/") provider := ®istry.HTTPProvider{ BaseURL: registryURL, Client: &http.Client{ Timeout: 10 * time.Second, }, } server, err := web.NewServer(provider, registryHost) if err != nil { slog.Error("initialize server", "error", err) os.Exit(1) } httpServer := &http.Server{ Addr: *httpAddr, Handler: server.Handler(), ReadHeaderTimeout: 5 * time.Second, } slog.Info("listening", "address", *httpAddr) if err := httpServer.ListenAndServe(); err != nil { slog.Error("HTTP server stopped", "error", err) os.Exit(1) } }