package main
import (
"log"
"net/http"
"os"
"path/filepath"
)
func main() {
addr := envOr("ADDR", ":8080")
issuer := envOr("ISSUER", "https://identity.quineglobal.com")
dataDir := envOr("DATA_DIR", "data")
defaultJitsi, err := normalizeJitsiURL(envOr("DEFAULT_JITSI", "https://meet.jit.si"))
if err != nil {
log.Fatalf("DEFAULT_JITSI: %v", err)
}
if err := os.MkdirAll(dataDir, 0o700); err != nil {
log.Fatal(err)
}
contacts, err := LoadContacts(filepath.Join(dataDir, "contacts.json"))
if err != nil {
log.Fatal(err)
}
app := &App{
verifier: NewVerifier(issuer, envOr("CLIENT_ID", "quple")),
store: NewStore(),
contacts: contacts,
defaultJitsiURL: defaultJitsi,
}
mux := http.NewServeMux()
app.Routes(mux)
mux.HandleFunc("/healthz", withCORS(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok"))
}))
log.Printf("quple-server listening on %s, accepting tokens from %s, default Jitsi %s", addr, issuer, defaultJitsi)
log.Fatal(http.ListenAndServe(addr, mux))
}
func envOr(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
}