From c2ceec2b3898ebd89ebd37e172033846c9f8f340 Mon Sep 17 00:00:00 2001 From: Piotr Zduniak Date: Tue, 11 Nov 2014 11:45:57 +0100 Subject: [PATCH 1/3] Added Content-Type to JSONResponse --- utils/requests.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/utils/requests.go b/utils/requests.go index ecd1309..e1107c3 100644 --- a/utils/requests.go +++ b/utils/requests.go @@ -40,6 +40,9 @@ func JSONResponse(w http.ResponseWriter, status int, data interface{}) { result = []byte(`{"status":500,"message":"Error occured while marshalling the response body"}`) } + // Set the response's content type to JSON + w.Header().Set("Content-Type", "application/json; charset=utf-8") + // Write the result w.WriteHeader(status) w.Write(result) From 44278088cccf526d29adf7ef9002fe6ff5cd61b7 Mon Sep 17 00:00:00 2001 From: Piotr Zduniak Date: Tue, 11 Nov 2014 11:56:55 +0100 Subject: [PATCH 2/3] Fixed POST /accounts --- routes/accounts.go | 4 ++-- routes/tokens.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/routes/accounts.go b/routes/accounts.go index 1af1d68..d57ee33 100644 --- a/routes/accounts.go +++ b/routes/accounts.go @@ -42,7 +42,7 @@ type AccountsCreateResponse struct { func AccountsCreate(w http.ResponseWriter, r *http.Request) { // Decode the request var input AccountsCreateRequest - err := utils.ParseRequest(r, input) + err := utils.ParseRequest(r, &input) if err != nil { env.Log.WithFields(logrus.Fields{ "error": err, @@ -56,7 +56,7 @@ func AccountsCreate(w http.ResponseWriter, r *http.Request) { } // Ensure that the user with requested username doesn't exist - if _, err := env.Accounts.FindAccountByName(input.Username); err != nil { + if _, err := env.Accounts.FindAccountByName(input.Username); err == nil { utils.JSONResponse(w, 409, &AccountsCreateResponse{ Success: false, Message: "Username already exists", diff --git a/routes/tokens.go b/routes/tokens.go index f6ba539..0af5735 100644 --- a/routes/tokens.go +++ b/routes/tokens.go @@ -50,7 +50,7 @@ type TokensCreateResponse struct { func TokensCreate(w http.ResponseWriter, r *http.Request) { // Decode the request var input TokensCreateRequest - err := utils.ParseRequest(r, input) + err := utils.ParseRequest(r, &input) if err != nil { env.Log.WithFields(logrus.Fields{ "error": err, From cd5b7e58ba66d00495892f9bedfc1f3444826fb4 Mon Sep 17 00:00:00 2001 From: Piotr Zduniak Date: Tue, 11 Nov 2014 12:35:02 +0100 Subject: [PATCH 3/3] Fixed the sign in endpoint --- main.go | 2 +- models/token.go | 2 +- routes/tokens.go | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index f300930..0b5a414 100644 --- a/main.go +++ b/main.go @@ -147,7 +147,7 @@ func main() { // Tokens auth.Get("/tokens", routes.TokensGet) - auth.Post("/tokens", routes.TokensCreate) + mux.Post("/tokens", routes.TokensCreate) auth.Delete("/tokens", routes.TokensDelete) // Threads diff --git a/models/token.go b/models/token.go index 2a824a4..90c415a 100644 --- a/models/token.go +++ b/models/token.go @@ -5,7 +5,7 @@ type Token struct { Expiring Resource - // Type describes the token's purpose: auth, invite, upgrade, etc. + // Type describes the token's purpose: auth, invite, confirm, upgrade. Type string `json:"type" gorethink:"type"` } diff --git a/routes/tokens.go b/routes/tokens.go index 0af5735..346da3c 100644 --- a/routes/tokens.go +++ b/routes/tokens.go @@ -37,6 +37,7 @@ func TokensGet(c web.C, w http.ResponseWriter, r *http.Request) { type TokensCreateRequest struct { Username string `json:"username" schema:"username"` Password string `json:"password" schema:"password"` + Type string `json:"type" schema:"type"` } // TokensCreateResponse contains the result of the TokensCreate request. @@ -63,6 +64,15 @@ func TokensCreate(w http.ResponseWriter, r *http.Request) { return } + // We can only create "auth" tokens now + if input.Type != "auth" { + utils.JSONResponse(w, 409, &TokensCreateResponse{ + Success: false, + Message: "Only auth tokens are implemented", + }) + return + } + // Check if account exists user, err := env.Accounts.FindAccountByName(input.Username) if err != nil { @@ -101,6 +111,7 @@ func TokensCreate(w http.ResponseWriter, r *http.Request) { token := &models.Token{ Expiring: models.Expiring{expDate}, Resource: models.MakeResource(user.ID, "Auth token expiring on "+expDate.Format(time.RFC3339)), + Type: input.Type, } // Insert int into the database