package oidc import ( "errors" "html/template" "log" "net/http" "reflect" ) type tokenTmplData struct { IDToken string RefreshToken string RedirectURL string Claims string } var tokenTmpl = template.Must(template.New("token.html").Parse(`
Token:
{{ .IDToken }}
Claims:
{{ .Claims }}
{{ if .RefreshToken }}
Refresh Token:
{{ .RefreshToken }}
{{ end }}
`))
func renderToken(w http.ResponseWriter, redirectURL, idToken, refreshToken string, claims []byte) {
renderTemplate(w, tokenTmpl, tokenTmplData{
IDToken: idToken,
RefreshToken: refreshToken,
RedirectURL: redirectURL,
Claims: string(claims),
})
}
func renderTemplate(w http.ResponseWriter, tmpl *template.Template, data any) {
err := tmpl.Execute(w, data)
if err == nil {
return
}
var templateErr *template.Error
switch {
case errors.As(err, &templateErr):
// An ExecError guarantees that Execute has not written to the underlying reader.
log.Printf("Error rendering template %s: %s", tmpl.Name(), reflect.TypeOf(err))
// TODO(ericchiang): replace with better internal server error.
http.Error(w, "Internal server error", http.StatusInternalServerError)
default:
// An error with the underlying write, such as the connection being
// dropped. Ignore for now.
}
}