package main import ( "fmt" "log" "net/http" "os" "path/filepath" "github.com/squid/rcs/backend/internal/api" "github.com/squid/rcs/backend/internal/config" "github.com/squid/rcs/backend/internal/db" "github.com/squid/rcs/backend/internal/imgur" "github.com/squid/rcs/backend/internal/web" ) func main() { cfg := config.Load() if err := os.MkdirAll(cfg.ScreenshotDir, 0o755); err != nil { log.Fatalf("create screenshot dir: %v", err) } if err := os.MkdirAll(filepath.Dir(cfg.DBPath), 0o755); err != nil { log.Fatalf("create db dir: %v", err) } store, err := db.Open(cfg.DBPath) if err != nil { log.Fatalf("open db: %v", err) } defer store.Close() imgurClient := imgur.New(cfg.ImgurClientID) webUI, err := web.New(cfg, store, imgurClient) if err != nil { log.Fatalf("web ui: %v", err) } server := api.New(cfg, store, imgurClient, webUI) fmt.Printf("RCS backend listening on http://%s\n", cfg.Addr) fmt.Printf(" data dir: %s\n", cfg.DataDir) fmt.Printf(" db: %s\n", cfg.DBPath) if cfg.PublicBaseURL != "" { fmt.Printf(" public: %s\n", cfg.PublicBaseURL) } if cfg.TrustProxy { fmt.Println(" proxy: trusting X-Forwarded-* headers") } if cfg.APIKey != "" { fmt.Println(" api key: enabled") } else { fmt.Println(" api key: disabled (open)") } if imgurClient.Enabled() { fmt.Println(" imgur: enabled") } else { fmt.Println(" imgur: disabled (set IMGUR_CLIENT_ID)") } if err := http.ListenAndServe(cfg.Addr, server.Handler()); err != nil { log.Fatal(err) } }