all repos — homestead @ 2d8ae277e25117ab59eeb95c6ed25b34bcd75e4f

Code for my website

add two-week availability calendar

Alan Pearce
commit

2d8ae277e25117ab59eeb95c6ed25b34bcd75e4f

parent

0296be4cbce9b13896dd703e868029672e55fd8c

1 file changed, 17 insertions(+), 0 deletions(-)

changed files
M internal/website/website.gointernal/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))