auth
2014-09-01
auth/context.go.old
Deprecate old implementations. Let's remove all of the osin stuff altogether, in favour of a more testable, unit-based approach. Leave all the old files around, for easy reference, but add the .old suffix so the go tools don't pick them up.
| paddy@23 | 1 package auth |
| paddy@23 | 2 |
| paddy@23 | 3 import ( |
| paddy@23 | 4 "encoding/json" |
| paddy@23 | 5 "html/template" |
| paddy@23 | 6 "io" |
| paddy@23 | 7 "log" |
| paddy@23 | 8 "net/http" |
| paddy@23 | 9 |
| paddy@23 | 10 "github.com/justinas/nosurf" |
| paddy@23 | 11 ) |
| paddy@23 | 12 |
| paddy@23 | 13 type Context struct { |
| paddy@23 | 14 Config ServerConfig |
| paddy@23 | 15 Clients ClientStore |
| paddy@23 | 16 Tokens TokenStore |
| paddy@23 | 17 Profiles ProfileStore |
| paddy@23 | 18 Sessions SessionStore |
| paddy@23 | 19 Log *log.Logger |
| paddy@23 | 20 Templates Templates |
| paddy@23 | 21 } |
| paddy@23 | 22 |
| paddy@23 | 23 type Templates struct { |
| paddy@23 | 24 Error *template.Template |
| paddy@23 | 25 Confirmation *template.Template |
| paddy@23 | 26 Login *template.Template |
| paddy@23 | 27 } |
| paddy@23 | 28 |
| paddy@23 | 29 type jsonError struct { |
| paddy@23 | 30 Error string `json:"error,omitempty"` |
| paddy@23 | 31 Description string `json:"error_description,omitempty"` |
| paddy@23 | 32 URI string `json:"error_uri,omitempty"` |
| paddy@23 | 33 State string `json:"state,omitempty"` |
| paddy@23 | 34 } |
| paddy@23 | 35 |
| paddy@23 | 36 func (c Context) RenderError(w io.Writer, err error) { |
| paddy@23 | 37 if c.Templates.Error == nil { |
| paddy@23 | 38 log.Println("Error template is nil, can't render error.") |
| paddy@23 | 39 return |
| paddy@23 | 40 } |
| paddy@23 | 41 renderErr := c.Templates.Error.Execute(w, map[string]interface{}{ |
| paddy@23 | 42 "err": err, |
| paddy@23 | 43 }) |
| paddy@23 | 44 if renderErr != nil { |
| paddy@23 | 45 log.Printf("Error executing error template (oh, the irony): %s\n", renderErr) |
| paddy@23 | 46 return |
| paddy@23 | 47 } |
| paddy@23 | 48 } |
| paddy@23 | 49 |
| paddy@23 | 50 func (c Context) RenderJSONError(w io.Writer, code, description, baseURI string) { |
| paddy@23 | 51 d, err := json.Marshal(jsonError{ |
| paddy@23 | 52 Error: code, |
| paddy@23 | 53 Description: description, |
| paddy@23 | 54 URI: baseURI, |
| paddy@23 | 55 }) |
| paddy@23 | 56 if err != nil { |
| paddy@23 | 57 log.Printf("Error marshalling json error (oh, the irony): %s\n", err) |
| paddy@23 | 58 return |
| paddy@23 | 59 } |
| paddy@23 | 60 _, err = w.Write(d) |
| paddy@23 | 61 if err != nil { |
| paddy@23 | 62 log.Printf("Error writing json error: %s\n", err) |
| paddy@23 | 63 return |
| paddy@23 | 64 } |
| paddy@23 | 65 } |
| paddy@23 | 66 |
| paddy@23 | 67 func (c Context) RenderConfirmation(w io.Writer, r *http.Request, req AuthRequest) { |
| paddy@23 | 68 if c.Templates.Confirmation == nil { |
| paddy@23 | 69 log.Println("Confirmation template is nil, can't render confirmation.") |
| paddy@23 | 70 return |
| paddy@23 | 71 } |
| paddy@23 | 72 err := c.Templates.Confirmation.Execute(w, map[string]interface{}{ |
| paddy@23 | 73 "scope": req.Scope, |
| paddy@23 | 74 "client": req.Client, |
| paddy@23 | 75 "csrf_token": nosurf.Token(r), |
| paddy@23 | 76 }) |
| paddy@23 | 77 if err != nil { |
| paddy@23 | 78 log.Printf("Error executing confirmation template: %s\n", err) |
| paddy@23 | 79 return |
| paddy@23 | 80 } |
| paddy@23 | 81 } |
| paddy@23 | 82 |
| paddy@23 | 83 func (c Context) RenderLogin(w io.Writer, r *http.Request) { |
| paddy@23 | 84 if c.Templates.Login == nil { |
| paddy@23 | 85 log.Println("Login template is nil, can't render confirmation.") |
| paddy@23 | 86 return |
| paddy@23 | 87 } |
| paddy@23 | 88 err := c.Templates.Login.Execute(w, map[string]interface{}{ |
| paddy@23 | 89 "csrf_token": nosurf.Token(r), |
| paddy@23 | 90 }) |
| paddy@23 | 91 if err != nil { |
| paddy@23 | 92 log.Printf("Error executing login template: %s\n", err) |
| paddy@23 | 93 return |
| paddy@23 | 94 } |
| paddy@23 | 95 } |
| paddy@23 | 96 |
| paddy@23 | 97 func (c Context) RenderJSONToken(w io.Writer, data AccessData) { |
| paddy@23 | 98 d, err := json.Marshal(data) |
| paddy@23 | 99 if err != nil { |
| paddy@23 | 100 log.Printf("Error marshalling json token: %s\n", err) |
| paddy@23 | 101 return |
| paddy@23 | 102 } |
| paddy@23 | 103 _, err = w.Write(d) |
| paddy@23 | 104 if err != nil { |
| paddy@23 | 105 log.Printf("Error writing json token: %s\n", err) |
| paddy@23 | 106 return |
| paddy@23 | 107 } |
| paddy@23 | 108 } |