github.com/argoproj/argo-cd/v3@v3.2.1/util/oidc/templates.go (about) 1 package oidc 2 3 import ( 4 "errors" 5 "html/template" 6 "log" 7 "net/http" 8 "reflect" 9 ) 10 11 type tokenTmplData struct { 12 IDToken string 13 RefreshToken string 14 RedirectURL string 15 Claims string 16 } 17 18 var tokenTmpl = template.Must(template.New("token.html").Parse(`<html> 19 <head> 20 <style> 21 /* make pre wrap */ 22 pre { 23 white-space: pre-wrap; /* css-3 */ 24 white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ 25 white-space: -pre-wrap; /* Opera 4-6 */ 26 white-space: -o-pre-wrap; /* Opera 7 */ 27 word-wrap: break-word; /* Internet Explorer 5.5+ */ 28 } 29 </style> 30 </head> 31 <body> 32 <p> Token: <pre><code>{{ .IDToken }}</code></pre></p> 33 <p> Claims: <pre><code>{{ .Claims }}</code></pre></p> 34 {{ if .RefreshToken }} 35 <p> Refresh Token: <pre><code>{{ .RefreshToken }}</code></pre></p> 36 <form action="{{ .RedirectURL }}" method="post"> 37 <input type="hidden" name="refresh_token" value="{{ .RefreshToken }}"> 38 <input type="submit" value="Redeem refresh token"> 39 </form> 40 {{ end }} 41 </body> 42 </html> 43 `)) 44 45 func renderToken(w http.ResponseWriter, redirectURL, idToken, refreshToken string, claims []byte) { 46 renderTemplate(w, tokenTmpl, tokenTmplData{ 47 IDToken: idToken, 48 RefreshToken: refreshToken, 49 RedirectURL: redirectURL, 50 Claims: string(claims), 51 }) 52 } 53 54 func renderTemplate(w http.ResponseWriter, tmpl *template.Template, data any) { 55 err := tmpl.Execute(w, data) 56 if err == nil { 57 return 58 } 59 60 var templateErr *template.Error 61 switch { 62 case errors.As(err, &templateErr): 63 // An ExecError guarantees that Execute has not written to the underlying reader. 64 log.Printf("Error rendering template %s: %s", tmpl.Name(), reflect.TypeOf(err)) 65 66 // TODO(ericchiang): replace with better internal server error. 67 http.Error(w, "Internal server error", http.StatusInternalServerError) 68 default: 69 // An error with the underlying write, such as the connection being 70 // dropped. Ignore for now. 71 } 72 }