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  }