diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index e52579c..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/cmd/party/api/api.go b/cmd/party/api/api.go index 2b66e67..abe3b6f 100644 --- a/cmd/party/api/api.go +++ b/cmd/party/api/api.go @@ -44,7 +44,7 @@ func (api *Api) Authenticate(next http.Handler) http.Handler { case errors.Is(err, data.ErrRecordNotFound): api.errorResponse(w, r, data.ErrInvalidAuthToken) default: - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } @@ -55,7 +55,7 @@ func (api *Api) Authenticate(next http.Handler) http.Handler { case errors.Is(err, data.ErrRecordNotFound): api.errorResponse(w, r, data.ErrInvalidCredentials) default: - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } diff --git a/cmd/party/api/device_tokens.go b/cmd/party/api/device_tokens.go index b553f94..d22d7e7 100644 --- a/cmd/party/api/device_tokens.go +++ b/cmd/party/api/device_tokens.go @@ -38,7 +38,7 @@ func (api *Api) RegisterDeviceToken(w http.ResponseWriter, r *http.Request) { api.App.Logger.PrintError(err, map[string]string{ "user_id": fmt.Sprint(user.ID), }) - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } @@ -65,7 +65,7 @@ func (api *Api) DeleteDeviceToken(w http.ResponseWriter, r *http.Request) { tokens, err := api.App.Models.DeviceTokens.GetForUser(user.ID) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } owns := false @@ -81,7 +81,7 @@ func (api *Api) DeleteDeviceToken(w http.ResponseWriter, r *http.Request) { } if err := api.App.Models.DeviceTokens.Delete(input.Token); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } diff --git a/cmd/party/api/errors.go b/cmd/party/api/errors.go index adbac8f..be3733f 100644 --- a/cmd/party/api/errors.go +++ b/cmd/party/api/errors.go @@ -16,25 +16,20 @@ func (api *Api) LogError(r *http.Request, err error) { } func (api *Api) errorResponse(w http.ResponseWriter, r *http.Request, err error) { - apiErr := &data.Error{ - HttpCode: http.StatusInternalServerError, - Message: "the server encountered a problem", - } + api.App.LogError(r, err) - // Try to "unbox" the error to see if it's our rich *Error type - var customErr *data.Error - if errors.As(err, &customErr) { - apiErr = customErr - } + apiErr := &data.Error{ + HttpCode: http.StatusInternalServerError, + Message: "the server encountered a problem", + } + + var customErr *data.Error + if errors.As(err, &customErr) { + apiErr = customErr + } if err := common.WriteJSON(w, apiErr.HttpCode, common.Envelope{"error": apiErr}, nil); err != nil { api.App.LogError(r, err) w.WriteHeader(500) } } - -func (api *Api) ServerErrorResponse(w http.ResponseWriter, r *http.Request, err error) { - api.App.LogError(r, err) - - api.errorResponse(w, r, err) -} diff --git a/cmd/party/api/healthcheck.go b/cmd/party/api/healthcheck.go index 1b92614..3652ff1 100644 --- a/cmd/party/api/healthcheck.go +++ b/cmd/party/api/healthcheck.go @@ -15,6 +15,6 @@ func (api *Api) Healthcheck(w http.ResponseWriter, r *http.Request) { } if err := common.WriteJSON(w, http.StatusOK, common.Envelope{"health_check": env}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/issues.go b/cmd/party/api/issues.go index c6b9022..9d92580 100644 --- a/cmd/party/api/issues.go +++ b/cmd/party/api/issues.go @@ -33,12 +33,12 @@ func (api *Api) ListIssues(w http.ResponseWriter, r *http.Request) { issues, metadata, err := api.App.FetchIssues(input.Title, input.Filters, common.GetUser(r)) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"issues": issues, "metadata": metadata}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -65,7 +65,7 @@ func (api *Api) CreateIssue(w http.ResponseWriter, r *http.Request) { headers := make(http.Header) headers.Set("Location", fmt.Sprintf("/v1/issues/%d", issue.ID)) if err = common.WriteJSON(w, http.StatusCreated, common.Envelope{"issue": issue, "options": options}, headers); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -81,13 +81,13 @@ func (api *Api) ReadIssue(w http.ResponseWriter, r *http.Request) { if errors.Is(err, data.ErrRecordNotFound) { api.errorResponse(w, r, data.ErrRecordNotFound) } else { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"issue": result.IssueDetail, "options": result.Options}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -117,7 +117,7 @@ func (api *Api) UpdateIssue(w http.ResponseWriter, r *http.Request) { } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"issue": issue}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -132,13 +132,13 @@ func (api *Api) DeleteIssue(w http.ResponseWriter, r *http.Request) { if errors.Is(err, data.ErrRecordNotFound) { api.errorResponse(w, r, data.ErrRecordNotFound) } else { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"message": "issue successfully deleted"}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -154,13 +154,13 @@ func (api *Api) ReadIssuePubKey(w http.ResponseWriter, r *http.Request) { if errors.Is(err, data.ErrRecordNotFound) { api.errorResponse(w, r, data.ErrRecordNotFound) } else { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"public_key": pubKey}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -186,6 +186,6 @@ func (api *Api) BlindSignIssueVote(w http.ResponseWriter, r *http.Request) { } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"signed": signed}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/middleware.go b/cmd/party/api/middleware.go index 4263d8f..370a139 100644 --- a/cmd/party/api/middleware.go +++ b/cmd/party/api/middleware.go @@ -17,7 +17,7 @@ func (api *Api) RecoverPanic(next http.Handler) http.Handler { defer func() { if err := recover(); err != nil { w.Header().Set("Connection", "close") - api.ServerErrorResponse(w, r, fmt.Errorf("%s", err)) + api.errorResponse(w, r, fmt.Errorf("%s", err)) } }() next.ServeHTTP(w, r) @@ -49,7 +49,7 @@ func (api *Api) RequirePermission(code string, next http.HandlerFunc) http.Handl fn := func(w http.ResponseWriter, r *http.Request) { permissions, err := api.App.Models.Permissions.GetAllForUser(common.GetUser(r).ID) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } if !permissions.Include(code) { @@ -87,7 +87,7 @@ func (api *Api) RateLimit(next http.Handler) http.Handler { if api.App.LimiterEnabled { ip, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } diff --git a/cmd/party/api/mps.go b/cmd/party/api/mps.go index ef43d1a..77b63e3 100644 --- a/cmd/party/api/mps.go +++ b/cmd/party/api/mps.go @@ -10,7 +10,7 @@ import ( func (api *Api) ListMPs(w http.ResponseWriter, r *http.Request) { members, err := api.App.Parlament.ListNRMembers("XXVIII") if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } @@ -25,6 +25,6 @@ func (api *Api) ListMPs(w http.ResponseWriter, r *http.Request) { "members": members, "total": len(members), }, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/parlvotedetail.go b/cmd/party/api/parlvotedetail.go index 06c1a9a..e14755d 100644 --- a/cmd/party/api/parlvotedetail.go +++ b/cmd/party/api/parlvotedetail.go @@ -21,7 +21,7 @@ func (api *Api) GetParlVoteDetail(w http.ResponseWriter, r *http.Request) { detail, err := api.App.Parlament.GetDocumentVote(path) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } if detail == nil { @@ -30,6 +30,6 @@ func (api *Api) GetParlVoteDetail(w http.ResponseWriter, r *http.Request) { } if err := common.WriteJSON(w, http.StatusOK, common.Envelope{"vote": detail}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/parlvotes.go b/cmd/party/api/parlvotes.go index b8c0559..01a83fd 100644 --- a/cmd/party/api/parlvotes.go +++ b/cmd/party/api/parlvotes.go @@ -33,7 +33,7 @@ func (api *Api) ListParlVotes(w http.ResponseWriter, r *http.Request) { Period: []string{parlament.CurrentPeriod}, }) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } @@ -102,7 +102,7 @@ func (api *Api) ListParlVotes(w http.ResponseWriter, r *http.Request) { "total_with_votes": totalWithVotes, "party_stats": partyStats, }, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/tokens.go b/cmd/party/api/tokens.go index ad45871..853583b 100644 --- a/cmd/party/api/tokens.go +++ b/cmd/party/api/tokens.go @@ -35,13 +35,13 @@ func (api *Api) CreateAuthenticationToken(w http.ResponseWriter, r *http.Request case errors.Is(err, data.ErrInvalidCredentials): api.errorResponse(w, r, data.ErrInvalidCredentials) default: - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } if err = common.WriteJSON(w, http.StatusCreated, common.Envelope{"authentication_token": token}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -61,11 +61,11 @@ func (api *Api) DeleteAuthenticationToken(w http.ResponseWriter, r *http.Request } if err := api.App.DeleteToken(token); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } if err := common.WriteJSON(w, http.StatusOK, common.Envelope{"message": "authentication token successfully deleted"}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/users.go b/cmd/party/api/users.go index 1d7c5a2..6e1427d 100644 --- a/cmd/party/api/users.go +++ b/cmd/party/api/users.go @@ -30,12 +30,12 @@ func (api *Api) ListUsers(w http.ResponseWriter, r *http.Request) { users, metadata, err := api.App.ListUsers(input.Filters) if err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"users": users, "metadata": metadata}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -54,7 +54,7 @@ func (api *Api) CreateUser(w http.ResponseWriter, r *http.Request) { } if err = common.WriteJSON(w, http.StatusCreated, common.Envelope{"user": user, "authentication_token": authToken}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -80,13 +80,13 @@ func (api *Api) ReadUser(w http.ResponseWriter, r *http.Request) { if errors.Is(err, data.ErrRecordNotFound) { api.errorResponse(w, r, data.ErrRecordNotFound) } else { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"user": target}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -94,7 +94,7 @@ func (api *Api) ReadUser(w http.ResponseWriter, r *http.Request) { // user := common.GetUser(r).ID // if err := common.WriteJSON(w, http.StatusOK, common.Envelope{"user": user}, nil); err != nil { -// api.ServerErrorResponse(w, r, err) +// api.errorResponse(w, r, err) // } // } @@ -109,13 +109,13 @@ func (api *Api) DeleteUser(w http.ResponseWriter, r *http.Request) { if errors.Is(err, data.ErrRecordNotFound) { api.errorResponse(w, r, data.ErrRecordNotFound) } else { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } return } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"message": "user successfully deleted"}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } @@ -142,6 +142,6 @@ func (api *Api) ActivateUser(w http.ResponseWriter, r *http.Request) { } if err = common.WriteJSON(w, http.StatusOK, common.Envelope{"user": user}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } } diff --git a/cmd/party/api/votes.go b/cmd/party/api/votes.go index e049b55..28865e0 100644 --- a/cmd/party/api/votes.go +++ b/cmd/party/api/votes.go @@ -26,12 +26,12 @@ func (api *Api) Vote(w http.ResponseWriter, r *http.Request) { } if err := api.App.CastVote(input.IssueID, input.OptionID, input.Nonce, input.Signature); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) return } if err := common.WriteJSON(w, http.StatusCreated, common.Envelope{"message": "vote successfully cast"}, nil); err != nil { - api.ServerErrorResponse(w, r, err) + api.errorResponse(w, r, err) } }