Ship the Go/SQLite API and Web UI, Chrome/Brave capture addon, Docker Compose, Pangolin reverse-proxy support, and a user-crontab watchdog so the binary stays running without systemd.
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|