1
0
mirror of https://github.com/mattermost/focalboard.git synced 2025-02-01 19:14:35 +02:00

Cleanup api errorResponse

This commit is contained in:
Chen-I Lim 2021-01-14 10:03:01 -08:00
parent d3eed6308a
commit c0f8f1288f
2 changed files with 51 additions and 123 deletions

View File

@ -66,19 +66,15 @@ func (a *API) handleGetBlocks(w http.ResponseWriter, r *http.Request) {
blocks, err := a.app().GetBlocks(parentID, blockType) blocks, err := a.app().GetBlocks(parentID, blockType)
if err != nil { if err != nil {
log.Printf(`ERROR GetBlocks: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
log.Printf("GetBlocks parentID: %s, type: %s, %d result(s)", parentID, blockType, len(blocks)) // log.Printf("GetBlocks parentID: %s, type: %s, %d result(s)", parentID, blockType, len(blocks))
json, err := json.Marshal(blocks) json, err := json.Marshal(blocks)
if err != nil { if err != nil {
log.Printf(`ERROR json.Marshal: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -101,27 +97,15 @@ func stampModifiedByUser(r *http.Request, blocks []model.Block) {
func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) { func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) {
requestBody, err := ioutil.ReadAll(r.Body) requestBody, err := ioutil.ReadAll(r.Body)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
// Catch panics from parse errors, etc.
defer func() {
if r := recover(); r != nil {
log.Printf(`ERROR: %v`, r)
errorResponse(w, http.StatusInternalServerError, nil)
return
}
}()
var blocks []model.Block var blocks []model.Block
err = json.Unmarshal(requestBody, &blocks) err = json.Unmarshal(requestBody, &blocks)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
@ -129,22 +113,19 @@ func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) {
// Error checking // Error checking
if len(block.Type) < 1 { if len(block.Type) < 1 {
errorData := map[string]string{"description": "missing type", "id": block.ID} errorData := map[string]string{"description": "missing type", "id": block.ID}
errorResponse(w, http.StatusBadRequest, errorData) errorResponse(w, http.StatusBadRequest, errorData, nil)
return return
} }
if block.CreateAt < 1 { if block.CreateAt < 1 {
errorData := map[string]string{"description": "invalid createAt", "id": block.ID} errorData := map[string]string{"description": "invalid createAt", "id": block.ID}
errorResponse(w, http.StatusBadRequest, errorData) errorResponse(w, http.StatusBadRequest, errorData, nil)
return return
} }
if block.UpdateAt < 1 { if block.UpdateAt < 1 {
errorData := map[string]string{"description": "invalid UpdateAt", "id": block.ID} errorData := map[string]string{"description": "invalid UpdateAt", "id": block.ID}
errorResponse(w, http.StatusBadRequest, errorData) errorResponse(w, http.StatusBadRequest, errorData, nil)
return return
} }
} }
@ -153,9 +134,7 @@ func (a *API) handlePostBlocks(w http.ResponseWriter, r *http.Request) {
err = a.app().InsertBlocks(blocks) err = a.app().InsertBlocks(blocks)
if err != nil { if err != nil {
log.Printf(`ERROR: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -169,17 +148,13 @@ func (a *API) handleGetUser(w http.ResponseWriter, r *http.Request) {
user, err := a.app().GetUser(userID) user, err := a.app().GetUser(userID)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
userData, err := json.Marshal(user) userData, err := json.Marshal(user)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -204,18 +179,14 @@ func (a *API) handleGetMe(w http.ResponseWriter, r *http.Request) {
} else { } else {
user, err = a.app().GetUser(session.UserID) user, err = a.app().GetUser(session.UserID)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
} }
userData, err := json.Marshal(user) userData, err := json.Marshal(user)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -232,8 +203,7 @@ func (a *API) handleDeleteBlock(w http.ResponseWriter, r *http.Request) {
err := a.app().DeleteBlock(blockID, userID) err := a.app().DeleteBlock(blockID, userID)
if err != nil { if err != nil {
log.Printf(`ERROR: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -255,28 +225,24 @@ func (a *API) handleGetSubTree(w http.ResponseWriter, r *http.Request) {
// Require read token // Require read token
if len(readToken) < 1 { if len(readToken) < 1 {
log.Printf(`ERROR: No read_token`) errorResponse(w, http.StatusUnauthorized, map[string]string{"error": "No read_token"}, nil)
errorResponse(w, http.StatusUnauthorized, map[string]string{"error": "No read_token"})
return return
} }
rootID, err := a.app().GetRootID(blockID) rootID, err := a.app().GetRootID(blockID)
if err != nil { if err != nil {
log.Printf(`ERROR GetRootID %v: %v, REQUEST: %v`, blockID, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
sharing, err := a.app().GetSharing(rootID) sharing, err := a.app().GetSharing(rootID)
if err != nil { if err != nil {
log.Printf(`ERROR GetSharing %v: %v, REQUEST: %v`, rootID, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
if sharing == nil || !(sharing.ID == rootID && sharing.Enabled && sharing.Token == readToken) { if sharing == nil || !(sharing.ID == rootID && sharing.Enabled && sharing.Token == readToken) {
log.Printf(`handleGetSubTree public unauthorized, rootID: %v`, rootID) errorResponse(w, http.StatusUnauthorized, nil, nil)
errorResponse(w, http.StatusUnauthorized, nil)
return return
} }
} }
@ -290,22 +256,20 @@ func (a *API) handleGetSubTree(w http.ResponseWriter, r *http.Request) {
if levels != 2 && levels != 3 { if levels != 2 && levels != 3 {
log.Printf(`ERROR Invalid levels: %d`, levels) log.Printf(`ERROR Invalid levels: %d`, levels)
errorData := map[string]string{"description": "invalid levels"} errorData := map[string]string{"description": "invalid levels"}
errorResponse(w, http.StatusInternalServerError, errorData) errorResponse(w, http.StatusInternalServerError, errorData, nil)
return return
} }
blocks, err := a.app().GetSubTree(blockID, int(levels)) blocks, err := a.app().GetSubTree(blockID, int(levels))
if err != nil { if err != nil {
log.Printf(`ERROR: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
log.Printf("GetSubTree (%v) blockID: %s, %d result(s)", levels, blockID, len(blocks)) log.Printf("GetSubTree (%v) blockID: %s, %d result(s)", levels, blockID, len(blocks))
json, err := json.Marshal(blocks) json, err := json.Marshal(blocks)
if err != nil { if err != nil {
log.Printf(`ERROR json.Marshal: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -315,9 +279,7 @@ func (a *API) handleGetSubTree(w http.ResponseWriter, r *http.Request) {
func (a *API) handleExport(w http.ResponseWriter, r *http.Request) { func (a *API) handleExport(w http.ResponseWriter, r *http.Request) {
blocks, err := a.app().GetAllBlocks() blocks, err := a.app().GetAllBlocks()
if err != nil { if err != nil {
log.Printf(`ERROR: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -327,9 +289,7 @@ func (a *API) handleExport(w http.ResponseWriter, r *http.Request) {
json, err := json.Marshal(blocks) json, err := json.Marshal(blocks)
if err != nil { if err != nil {
log.Printf(`ERROR json.Marshal: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -383,26 +343,15 @@ func arrayContainsBlockWithID(array []model.Block, blockID string) bool {
func (a *API) handleImport(w http.ResponseWriter, r *http.Request) { func (a *API) handleImport(w http.ResponseWriter, r *http.Request) {
requestBody, err := ioutil.ReadAll(r.Body) requestBody, err := ioutil.ReadAll(r.Body)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
// Catch panics from parse errors, etc.
defer func() {
if r := recover(); r != nil {
log.Printf(`ERROR: %v`, r)
errorResponse(w, http.StatusInternalServerError, nil)
return
}
}()
var blocks []model.Block var blocks []model.Block
err = json.Unmarshal(requestBody, &blocks) err = json.Unmarshal(requestBody, &blocks)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
@ -411,8 +360,7 @@ func (a *API) handleImport(w http.ResponseWriter, r *http.Request) {
err = a.app().InsertBlocks(blocks) err = a.app().InsertBlocks(blocks)
if err != nil { if err != nil {
log.Printf(`ERROR: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -429,15 +377,13 @@ func (a *API) handleGetSharing(w http.ResponseWriter, r *http.Request) {
sharing, err := a.app().GetSharing(rootID) sharing, err := a.app().GetSharing(rootID)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
sharingData, err := json.Marshal(sharing) sharingData, err := json.Marshal(sharing)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -448,24 +394,15 @@ func (a *API) handleGetSharing(w http.ResponseWriter, r *http.Request) {
func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) { func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) {
requestBody, err := ioutil.ReadAll(r.Body) requestBody, err := ioutil.ReadAll(r.Body)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
// Catch panics from parse errors, etc.
defer func() {
if r := recover(); r != nil {
log.Printf(`ERROR: %v`, r)
errorResponse(w, http.StatusInternalServerError, nil)
return
}
}()
var sharing model.Sharing var sharing model.Sharing
err = json.Unmarshal(requestBody, &sharing) err = json.Unmarshal(requestBody, &sharing)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
@ -480,8 +417,7 @@ func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) {
err = a.app().UpsertSharing(sharing) err = a.app().UpsertSharing(sharing)
if err != nil { if err != nil {
log.Printf(`ERROR: %v, REQUEST: %v`, err, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -494,15 +430,13 @@ func (a *API) handlePostSharing(w http.ResponseWriter, r *http.Request) {
func (a *API) handleGetWorkspace(w http.ResponseWriter, r *http.Request) { func (a *API) handleGetWorkspace(w http.ResponseWriter, r *http.Request) {
workspace, err := a.app().GetRootWorkspace() workspace, err := a.app().GetRootWorkspace()
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
workspaceData, err := json.Marshal(workspace) workspaceData, err := json.Marshal(workspace)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -512,8 +446,7 @@ func (a *API) handleGetWorkspace(w http.ResponseWriter, r *http.Request) {
func (a *API) handlePostWorkspaceRegenerateSignupToken(w http.ResponseWriter, r *http.Request) { func (a *API) handlePostWorkspaceRegenerateSignupToken(w http.ResponseWriter, r *http.Request) {
workspace, err := a.app().GetRootWorkspace() workspace, err := a.app().GetRootWorkspace()
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -521,8 +454,7 @@ func (a *API) handlePostWorkspaceRegenerateSignupToken(w http.ResponseWriter, r
err = a.app().UpsertWorkspaceSignupToken(*workspace) err = a.app().UpsertWorkspaceSignupToken(*workspace)
if err != nil { if err != nil {
log.Printf(`ERROR: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -587,8 +519,8 @@ func jsonBytesResponse(w http.ResponseWriter, code int, json []byte) {
w.Write(json) w.Write(json)
} }
func errorResponse(w http.ResponseWriter, code int, message map[string]string) { func errorResponse(w http.ResponseWriter, code int, message map[string]string, sourceError error) {
log.Printf("%d ERROR", code) log.Printf("API ERROR %d, err: %v\n", code, sourceError)
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
data, err := json.Marshal(message) data, err := json.Marshal(message)
if err != nil { if err != nil {

View File

@ -48,28 +48,26 @@ func (rd *RegisterData) IsValid() error {
func (a *API) handleLogin(w http.ResponseWriter, r *http.Request) { func (a *API) handleLogin(w http.ResponseWriter, r *http.Request) {
requestBody, err := ioutil.ReadAll(r.Body) requestBody, err := ioutil.ReadAll(r.Body)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
var loginData LoginData var loginData LoginData
err = json.Unmarshal(requestBody, &loginData) err = json.Unmarshal(requestBody, &loginData)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
if loginData.Type == "normal" { if loginData.Type == "normal" {
token, err := a.app().Login(loginData.Username, loginData.Email, loginData.Password, loginData.MfaToken) token, err := a.app().Login(loginData.Username, loginData.Email, loginData.Password, loginData.MfaToken)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) errorResponse(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}, err)
return return
} }
json, err := json.Marshal(map[string]string{"token": token}) json, err := json.Marshal(map[string]string{"token": token})
if err != nil { if err != nil {
log.Printf(`ERROR json.Marshal: %v`, r) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
@ -77,20 +75,20 @@ func (a *API) handleLogin(w http.ResponseWriter, r *http.Request) {
return return
} }
errorResponse(w, http.StatusInternalServerError, map[string]string{"error": "Unknown login type"}) errorResponse(w, http.StatusInternalServerError, map[string]string{"error": "Unknown login type"}, nil)
} }
func (a *API) handleRegister(w http.ResponseWriter, r *http.Request) { func (a *API) handleRegister(w http.ResponseWriter, r *http.Request) {
requestBody, err := ioutil.ReadAll(r.Body) requestBody, err := ioutil.ReadAll(r.Body)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
var registerData RegisterData var registerData RegisterData
err = json.Unmarshal(requestBody, &registerData) err = json.Unmarshal(requestBody, &registerData)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, nil) errorResponse(w, http.StatusInternalServerError, nil, err)
return return
} }
@ -98,37 +96,35 @@ func (a *API) handleRegister(w http.ResponseWriter, r *http.Request) {
if len(registerData.Token) > 0 { if len(registerData.Token) > 0 {
workspace, err := a.app().GetRootWorkspace() workspace, err := a.app().GetRootWorkspace()
if err != nil { if err != nil {
log.Println("ERROR: Unable to get active user count", err) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
if registerData.Token != workspace.SignupToken { if registerData.Token != workspace.SignupToken {
errorResponse(w, http.StatusUnauthorized, nil) errorResponse(w, http.StatusUnauthorized, nil, nil)
return return
} }
} else { } else {
// No signup token, check if no active users // No signup token, check if no active users
userCount, err := a.app().GetActiveUserCount() userCount, err := a.app().GetActiveUserCount()
if err != nil { if err != nil {
log.Println("ERROR: Unable to get active user count", err) errorResponse(w, http.StatusInternalServerError, nil, err)
errorResponse(w, http.StatusInternalServerError, nil)
return return
} }
if userCount > 0 { if userCount > 0 {
errorResponse(w, http.StatusUnauthorized, nil) errorResponse(w, http.StatusUnauthorized, nil, nil)
return return
} }
} }
if err = registerData.IsValid(); err != nil { if err = registerData.IsValid(); err != nil {
errorResponse(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) errorResponse(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}, err)
return return
} }
err = a.app().RegisterUser(registerData.Username, registerData.Email, registerData.Password) err = a.app().RegisterUser(registerData.Username, registerData.Email, registerData.Password)
if err != nil { if err != nil {
errorResponse(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}) errorResponse(w, http.StatusInternalServerError, map[string]string{"error": err.Error()}, err)
return return
} }
@ -160,7 +156,7 @@ func (a *API) attachSession(handler func(w http.ResponseWriter, r *http.Request)
session, err := a.app().GetSession(token) session, err := a.app().GetSession(token)
if err != nil { if err != nil {
if required { if required {
errorResponse(w, http.StatusUnauthorized, map[string]string{"error": err.Error()}) errorResponse(w, http.StatusUnauthorized, map[string]string{"error": err.Error()}, err)
return return
} }