github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/webapp/dynamic_components_handler.go (about) 1 // Copyright 2019 The WPT Dashboard Project. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 //go:generate packr2 6 7 package webapp 8 9 import ( 10 "net/http" 11 "text/template" 12 13 "github.com/gobuffalo/packr/v2" 14 "github.com/web-platform-tests/wpt.fyi/shared" 15 ) 16 17 var componentTemplates *template.Template 18 19 func init() { 20 box := packr.New("dynamic components", "./dynamic-components/templates/") 21 componentTemplates = template.New("all.js") 22 for _, t := range box.List() { 23 tmpl := componentTemplates.New(t) 24 body, err := box.FindString(t) 25 if err != nil { 26 panic(err) 27 } else if _, err = tmpl.Parse(body); err != nil { 28 panic(err) 29 } 30 } 31 } 32 33 func flagsComponentHandler(w http.ResponseWriter, r *http.Request) { 34 w.Header().Add("content-type", "text/javascript") 35 ctx := r.Context() 36 ds := shared.NewAppEngineDatastore(ctx, false) 37 flags, err := shared.GetFeatureFlags(ds) 38 if err != nil { 39 // Errors aren't a big deal; log them and ignore. 40 log := shared.GetLogger(ctx) 41 log.Errorf("Error loading flags: %s", err.Error()) 42 } 43 data := struct{ Flags []shared.Flag }{flags} 44 if componentTemplates.ExecuteTemplate(w, "wpt-env-flags.js", data); err != nil { 45 http.Error(w, err.Error(), http.StatusInternalServerError) 46 } 47 }