auth
2014-07-18
Child:7b9e0fc20256
auth/info.go
Start rewriting the repo. This code originally was a carbon copy of https://github.com/RangelReale/osin, but I am methodically stripping out the extensible nature of it for a simpler interface, while simultaneously bringing the style into line with the Ducky style.
| paddy@0 | 1 package oauth2 |
| paddy@0 | 2 |
| paddy@0 | 3 import "net/http" |
| paddy@0 | 4 |
| paddy@0 | 5 // InfoRequest is a request for information about some AccessData |
| paddy@0 | 6 type InfoRequest struct { |
| paddy@0 | 7 Code string // Code to look up |
| paddy@0 | 8 AccessData AccessData // AccessData associated with Code |
| paddy@0 | 9 } |
| paddy@0 | 10 |
| paddy@0 | 11 // HandleInfoRequest is an http.HandlerFunc for server information |
| paddy@0 | 12 // NOT an RFC specification. |
| paddy@0 | 13 func HandleInfoRequest(w http.ResponseWriter, r *http.Request, ctx Context) { |
| paddy@0 | 14 r.ParseForm() |
| paddy@0 | 15 |
| paddy@0 | 16 // generate info request |
| paddy@0 | 17 ret := InfoRequest{ |
| paddy@0 | 18 Code: r.Form.Get("code"), |
| paddy@0 | 19 } |
| paddy@0 | 20 |
| paddy@0 | 21 if ret.Code == "" { |
| paddy@0 | 22 // TODO: return error |
| paddy@0 | 23 return |
| paddy@0 | 24 } |
| paddy@0 | 25 |
| paddy@0 | 26 var err error |
| paddy@0 | 27 |
| paddy@0 | 28 // load access data |
| paddy@0 | 29 ret.AccessData, err = loadAccess(ret.Code, ctx) |
| paddy@0 | 30 if err != nil { |
| paddy@0 | 31 // TODO: return error |
| paddy@0 | 32 return |
| paddy@0 | 33 } |
| paddy@0 | 34 if ret.AccessData.Client.RedirectURI == "" { |
| paddy@0 | 35 // TODO: return error |
| paddy@0 | 36 return |
| paddy@0 | 37 } |
| paddy@0 | 38 if ret.AccessData.IsExpired() { |
| paddy@0 | 39 // TODO: return error |
| paddy@0 | 40 return |
| paddy@0 | 41 } |
| paddy@0 | 42 // TODO: write ret |
| paddy@0 | 43 } |
| paddy@0 | 44 |
| paddy@0 | 45 // FinishInfoRequest finalizes the request handled by HandleInfoRequest |
| paddy@0 | 46 func FinishInfoRequest(w http.ResponseWriter, r *http.Request, ir *InfoRequest, ctx Context) { |
| paddy@0 | 47 // output data |
| paddy@0 | 48 //w.Output["client_id"] = ir.AccessData.Client.Id |
| paddy@0 | 49 //w.Output["access_token"] = ir.AccessData.AccessToken |
| paddy@0 | 50 //w.Output["token_type"] = s.Config.TokenType |
| paddy@0 | 51 //w.Output["expires_in"] = ir.AccessData.CreatedAt.Add(time.Duration(ir.AccessData.ExpiresIn)*time.Second).Sub(time.Now()) / time.Second |
| paddy@0 | 52 //if ir.AccessData.RefreshToken != "" { |
| paddy@0 | 53 // w.Output["refresh_token"] = ir.AccessData.RefreshToken |
| paddy@0 | 54 //} |
| paddy@0 | 55 //if ir.AccessData.Scope != "" { |
| paddy@0 | 56 // w.Output["scope"] = ir.AccessData.Scope |
| paddy@0 | 57 //} |
| paddy@0 | 58 // TODO: write output |
| paddy@0 | 59 } |