2026-08-15 13:07:45 -07:00
|
|
|
// Heliosian serves the Helios school community apps.
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"log"
|
|
|
|
|
"net/http"
|
|
|
|
|
"os"
|
|
|
|
|
|
|
|
|
|
"heliosian/internal/data"
|
|
|
|
|
"heliosian/internal/directory"
|
|
|
|
|
)
|
|
|
|
|
|
2026-08-15 16:22:25 -07:00
|
|
|
func directorySource() data.Source {
|
|
|
|
|
sheetID := os.Getenv("DIRECTORY_SHEET")
|
|
|
|
|
if sheetID == "" {
|
|
|
|
|
return data.Dir{Root: "sampledata"}
|
|
|
|
|
}
|
|
|
|
|
keyFile, err := data.KeyFile()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalf("[ERROR] %v", err)
|
|
|
|
|
}
|
|
|
|
|
source, err := data.NewSheet(keyFile, map[string]string{"directory": sheetID})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalf("[ERROR] load directory sheet: %v", err)
|
|
|
|
|
}
|
|
|
|
|
return source
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-15 13:07:45 -07:00
|
|
|
func main() {
|
2026-08-15 16:22:25 -07:00
|
|
|
cache, err := directory.NewCache(directorySource())
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatalf("[ERROR] load directory data: %v", err)
|
|
|
|
|
}
|
2026-08-15 13:07:45 -07:00
|
|
|
mux := http.NewServeMux()
|
2026-08-15 16:22:25 -07:00
|
|
|
directory.Register(mux, cache)
|
2026-08-15 13:07:45 -07:00
|
|
|
mux.Handle("GET /{$}", http.RedirectHandler("/directory/", http.StatusFound))
|
|
|
|
|
port := os.Getenv("PORT")
|
|
|
|
|
if port == "" {
|
|
|
|
|
port = "8080"
|
|
|
|
|
}
|
|
|
|
|
log.Printf("listening on http://localhost:%s", port)
|
|
|
|
|
log.Fatal(http.ListenAndServe(":"+port, mux))
|
|
|
|
|
}
|