auth
auth/context.go
Render results. Render JSON tokens and errors. Render HTML errors, confirmation, and login pages.
1.1 --- a/context.go Sat Aug 16 02:57:49 2014 -0400 1.2 +++ b/context.go Sat Aug 16 05:33:23 2014 -0400 1.3 @@ -1,34 +1,98 @@ 1.4 package auth 1.5 1.6 import ( 1.7 + "encoding/json" 1.8 + "html/template" 1.9 "io" 1.10 "log" 1.11 ) 1.12 1.13 type Context struct { 1.14 - Config ServerConfig 1.15 - Clients ClientStore 1.16 - Tokens TokenStore 1.17 - Profiles ProfileStore 1.18 - Log *log.Logger 1.19 + Config ServerConfig 1.20 + Clients ClientStore 1.21 + Tokens TokenStore 1.22 + Profiles ProfileStore 1.23 + Log *log.Logger 1.24 + Templates Templates 1.25 +} 1.26 + 1.27 +type Templates struct { 1.28 + Error *template.Template 1.29 + Confirmation *template.Template 1.30 + Login *template.Template 1.31 +} 1.32 + 1.33 +type jsonError struct { 1.34 + Error string `json:"error,omitempty"` 1.35 + Description string `json:"error_description,omitempty"` 1.36 + URI string `json:"error_uri,omitempty"` 1.37 + State string `json:"state,omitempty"` 1.38 } 1.39 1.40 func (c Context) RenderError(w io.Writer, err error) { 1.41 - // TODO: write error to w in a template 1.42 + if c.Templates.Error == nil { 1.43 + log.Println("Error template is nil, can't render error.") 1.44 + return 1.45 + } 1.46 + renderErr := c.Templates.Error.Execute(w, map[string]interface{}{ 1.47 + "err": err, 1.48 + }) 1.49 + if renderErr != nil { 1.50 + log.Printf("Error executing error template (oh, the irony): %s\n", renderErr) 1.51 + return 1.52 + } 1.53 } 1.54 1.55 func (c Context) RenderJSONError(w io.Writer, code, description, baseURI string) { 1.56 - // TODO: write error to w in json formatting 1.57 + d, err := json.Marshal(jsonError{ 1.58 + Error: code, 1.59 + Description: description, 1.60 + URI: baseURI, 1.61 + }) 1.62 + if err != nil { 1.63 + log.Printf("Error marshalling json error (oh, the irony): %s\n", err) 1.64 + return 1.65 + } 1.66 + _, err = w.Write(d) 1.67 + if err != nil { 1.68 + log.Printf("Error writing json error: %s\n", err) 1.69 + return 1.70 + } 1.71 } 1.72 1.73 func (c Context) RenderConfirmation(w io.Writer) { 1.74 - // TODO: render HTML confirmation page 1.75 + if c.Templates.Confirmation == nil { 1.76 + log.Println("Confirmation template is nil, can't render confirmation.") 1.77 + return 1.78 + } 1.79 + err := c.Templates.Confirmation.Execute(w, nil) 1.80 + if err != nil { 1.81 + log.Printf("Error executing confirmation template: %s\n", err) 1.82 + return 1.83 + } 1.84 } 1.85 1.86 func (c Context) RenderLogin(w io.Writer) { 1.87 - // TODO: render HTML login page 1.88 + if c.Templates.Login == nil { 1.89 + log.Println("Login template is nil, can't render confirmation.") 1.90 + return 1.91 + } 1.92 + err := c.Templates.Login.Execute(w, nil) 1.93 + if err != nil { 1.94 + log.Printf("Error executing login template: %s\n", err) 1.95 + return 1.96 + } 1.97 } 1.98 1.99 func (c Context) RenderJSONToken(w io.Writer, data AccessData) { 1.100 - // TODO: render token to w in json formatting 1.101 + d, err := json.Marshal(data) 1.102 + if err != nil { 1.103 + log.Printf("Error marshalling json token: %s\n", err) 1.104 + return 1.105 + } 1.106 + _, err = w.Write(d) 1.107 + if err != nil { 1.108 + log.Printf("Error writing json token: %s\n", err) 1.109 + return 1.110 + } 1.111 }