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/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..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. @@ -50,7 +51,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, @@ -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 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)