aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-07-24 11:17:03 +0200
committerTaras Madan <tarasmadan@google.com>2024-07-24 11:15:34 +0000
commitb5362d58b9f04972fc664a4ce7d7b4b6a8fb0d33 (patch)
tree5b660c10553287f20e53529df170f7439f0bf528
parent5901baceb4f56b65b0a64abd8ae279fc56349067 (diff)
dashboard/app/api.go: handleAPI can return less 5xx errors
-rw-r--r--dashboard/app/api.go19
-rw-r--r--dashboard/app/handler.go25
2 files changed, 22 insertions, 22 deletions
diff --git a/dashboard/app/api.go b/dashboard/app/api.go
index cd230d341..3b510779f 100644
--- a/dashboard/app/api.go
+++ b/dashboard/app/api.go
@@ -104,11 +104,8 @@ func handleJSON(fn JSONHandler) http.Handler {
c := appengine.NewContext(r)
reply, err := fn(c, r)
if err != nil {
- // ErrAccess is logged earlier.
- if err != ErrAccess {
- log.Errorf(c, "%v", err)
- }
- http.Error(w, err.Error(), http.StatusInternalServerError)
+ status := logErrorPrepareStatus(c, err)
+ http.Error(w, err.Error(), status)
return
}
w.Header().Set("Content-Type", "application/json")
@@ -131,6 +128,10 @@ func handleAPI(c context.Context, r *http.Request) (reply interface{}, err error
client := r.PostFormValue("client")
method := r.PostFormValue("method")
log.Infof(c, "api %q from %q", method, client)
+ if client == "" {
+ // Don't log as error if somebody just invokes /api.
+ return nil, fmt.Errorf("client is empty: %w", ErrClientBadRequest)
+ }
auth := auth.MakeEndpoint(auth.GoogleTokenInfoEndpoint)
subj, err := auth.DetermineAuthSubj(timeNow(c), r.Header["Authorization"])
if err != nil {
@@ -139,13 +140,7 @@ func handleAPI(c context.Context, r *http.Request) (reply interface{}, err error
password := r.PostFormValue("key")
ns, err := checkClient(getConfig(c), client, password, subj)
if err != nil {
- if client != "" {
- log.Errorf(c, "checkClient('%s') error: %v", client, err)
- } else {
- // Don't log as error if somebody just invokes /api.
- log.Infof(c, "checkClient('%s') error: %v", client, err)
- }
- return nil, err
+ return nil, fmt.Errorf("checkClient('%s') error: %w", client, err)
}
var payload []byte
if str := r.PostFormValue("payload"); str != "" {
diff --git a/dashboard/app/handler.go b/dashboard/app/handler.go
index 145f79ef9..91c051e2b 100644
--- a/dashboard/app/handler.go
+++ b/dashboard/app/handler.go
@@ -60,16 +60,7 @@ func handleContext(fn contextHandler) http.Handler {
return
}
- status := http.StatusInternalServerError
- logf := log.Errorf
- var clientError *ErrClient
- if errors.As(err, &clientError) {
- // We don't log these as errors because they can be provoked
- // by invalid user requests, so we don't wan't to pollute error log.
- logf = log.Warningf
- status = clientError.HTTPStatus()
- }
- logf(c, "%v", err)
+ status := logErrorPrepareStatus(c, err)
w.WriteHeader(status)
if err1 := templates.ExecuteTemplate(w, "error.html", data); err1 != nil {
combinedError := fmt.Sprintf("got err \"%v\" processing ExecuteTemplate() for err \"%v\"", err1, err)
@@ -79,6 +70,20 @@ func handleContext(fn contextHandler) http.Handler {
})
}
+func logErrorPrepareStatus(c context.Context, err error) int {
+ status := http.StatusInternalServerError
+ logf := log.Errorf
+ var clientError *ErrClient
+ if errors.As(err, &clientError) {
+ // We don't log these as errors because they can be provoked
+ // by invalid user requests, so we don't wan't to pollute error log.
+ logf = log.Warningf
+ status = clientError.HTTPStatus()
+ }
+ logf(c, "%v", err)
+ return status
+}
+
func isRobot(r *http.Request) bool {
userAgent := strings.ToLower(strings.Join(r.Header["User-Agent"], " "))
if strings.HasPrefix(userAgent, "curl") ||