add two-week availability calendar
1 file changed, 17 insertions(+), 0 deletions(-)
changed files
M internal/website/website.go → internal/website/website.go
@@ -1,12 +1,15 @@ package website import ( + "context" "os" "path/filepath" "slices" "sync" + "time" "gitlab.com/tozd/go/errors" + "go.alanpearce.eu/homestead/internal/calendar" "go.alanpearce.eu/homestead/internal/config" "go.alanpearce.eu/homestead/internal/events" "go.alanpearce.eu/homestead/internal/fetcher"@@ -32,6 +35,7 @@ Redirect bool `conf:"default:true"` Development bool `conf:"default:false,flag:dev"` FetchURL config.URL `conf:"default:https://ci.alanpearce.eu/archive/website/"` BaseURL config.URL + CalendarURL config.URL GoatcounterToken string Redis *events.RedisOptions@@ -44,6 +48,7 @@ siteSettings *templates.SiteSettings counter stats.Counter log *log.Logger reader storage.Reader + calendar *calendar.Calendar me digit.Resource acctResource string CSP *csp.Header@@ -113,6 +118,15 @@ CSPHeader.ScriptSrc = slices.Insert(CSPHeader.ScriptSrc, 0, "'unsafe-inline'") CSPHeader.ConnectSrc = slices.Insert(CSPHeader.ConnectSrc, 0, "'self'") } + website.calendar = calendar.New(&calendar.Options{ + URL: opts.CalendarURL, + }, log.Named("calendar")) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + if err := website.calendar.FetchIfNeeded(ctx); err != nil { + log.Error("could not fetch calendar", "error", err) + } + cancel() + firstUpdate := make(chan bool) go func() { updated := sync.OnceFunc(func() {@@ -126,9 +140,11 @@ if err != nil { log.Panic("could not load configuration", "error", err) } website.config = cfg + website.siteSettings = &templates.SiteSettings{ Title: cfg.Title, Language: cfg.Language, + Timezone: cfg.Timezone, Menu: cfg.Menu, InjectLiveReload: opts.Development, }@@ -178,6 +194,7 @@ mux := ihttp.NewServeMux() mux.HandleError(website.ErrorHandler) mux.Handle("/", website) + mux.HandleFunc("/calendar", website.Calendar) mux.HandleFunc("/.well-known/webfinger", website.webfinger) const oidcPath = "/.well-known/openid-configuration" mux.ServeMux.Handle(oidcPath, ihttp.RedirectHandler(cfg.OIDCHost.JoinPath(oidcPath), 302))