private/apigen: Inject middleware code after param parsing

Inject the middleware code after the query and path parameters parsing
because in the case that a middleware needs to execute a more expensive
logic, it isn't executed if there are malformed or missing parameters.

Change-Id: I883ade8ee42d25accb153c78d9f583d883730d6a
This commit is contained in:
Ivan Fraixedes 2023-11-23 15:24:16 +01:00 committed by Storj Robot
parent 5e3cab29a2
commit 6885ca27fb
3 changed files with 93 additions and 94 deletions

View File

@ -108,13 +108,6 @@ func (h *DocumentsHandler) handleGetOne(w http.ResponseWriter, r *http.Request)
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
path, ok := mux.Vars(r)["path"]
@ -123,6 +116,13 @@ func (h *DocumentsHandler) handleGetOne(w http.ResponseWriter, r *http.Request)
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GetOne(ctx, path)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -140,13 +140,6 @@ func (h *DocumentsHandler) handleGetTag(w http.ResponseWriter, r *http.Request)
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
path, ok := mux.Vars(r)["path"]
@ -161,6 +154,13 @@ func (h *DocumentsHandler) handleGetTag(w http.ResponseWriter, r *http.Request)
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GetTag(ctx, path, tagName)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -178,13 +178,6 @@ func (h *DocumentsHandler) handleGetVersions(w http.ResponseWriter, r *http.Requ
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
path, ok := mux.Vars(r)["path"]
@ -193,6 +186,13 @@ func (h *DocumentsHandler) handleGetVersions(w http.ResponseWriter, r *http.Requ
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GetVersions(ctx, path)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -210,13 +210,6 @@ func (h *DocumentsHandler) handleUpdateContent(w http.ResponseWriter, r *http.Re
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
idParam := r.URL.Query().Get("id")
@ -255,6 +248,13 @@ func (h *DocumentsHandler) handleUpdateContent(w http.ResponseWriter, r *http.Re
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.UpdateContent(ctx, path, id, date, payload)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)

View File

@ -270,12 +270,6 @@ func (a *API) generateGo() ([]byte, error) {
pf("ctx := r.Context()")
pf("var err error")
pf("defer h.mon.Task()(&ctx)(&err)")
pf("")
for _, m := range group.Middleware {
pf(m.Generate(a, group, endpoint))
}
pf("")
pf("w.Header().Set(\"Content-Type\", \"application/json\")")
pf("")
@ -288,6 +282,11 @@ func (a *API) generateGo() ([]byte, error) {
handleBody(pf, endpoint.Request)
}
for _, m := range group.Middleware {
pf(m.Generate(a, group, endpoint))
}
pf("")
var methodFormat string
if endpoint.Response != nil {
methodFormat = "retVal, httpErr := h.service.%s(ctx, "

View File

@ -124,13 +124,6 @@ func (h *ProjectManagementHandler) handleGenCreateProject(w http.ResponseWriter,
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
payload := console.UpsertProjectInfo{}
@ -139,6 +132,13 @@ func (h *ProjectManagementHandler) handleGenCreateProject(w http.ResponseWriter,
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GenCreateProject(ctx, payload)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -156,13 +156,6 @@ func (h *ProjectManagementHandler) handleGenUpdateProject(w http.ResponseWriter,
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
idParam, ok := mux.Vars(r)["id"]
@ -183,6 +176,13 @@ func (h *ProjectManagementHandler) handleGenUpdateProject(w http.ResponseWriter,
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GenUpdateProject(ctx, id, payload)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -200,13 +200,6 @@ func (h *ProjectManagementHandler) handleGenDeleteProject(w http.ResponseWriter,
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
idParam, ok := mux.Vars(r)["id"]
@ -221,6 +214,13 @@ func (h *ProjectManagementHandler) handleGenDeleteProject(w http.ResponseWriter,
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
httpErr := h.service.GenDeleteProject(ctx, id)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -232,6 +232,8 @@ func (h *ProjectManagementHandler) handleGenGetUsersProjects(w http.ResponseWrit
var err error
defer h.mon.Task()(&ctx)(&err)
w.Header().Set("Content-Type", "application/json")
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
@ -239,8 +241,6 @@ func (h *ProjectManagementHandler) handleGenGetUsersProjects(w http.ResponseWrit
return
}
w.Header().Set("Content-Type", "application/json")
retVal, httpErr := h.service.GenGetUsersProjects(ctx)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -258,13 +258,6 @@ func (h *ProjectManagementHandler) handleGenGetSingleBucketUsageRollup(w http.Re
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
projectIDParam := r.URL.Query().Get("projectID")
@ -309,6 +302,13 @@ func (h *ProjectManagementHandler) handleGenGetSingleBucketUsageRollup(w http.Re
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GenGetSingleBucketUsageRollup(ctx, projectID, bucket, since, before)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -326,13 +326,6 @@ func (h *ProjectManagementHandler) handleGenGetBucketUsageRollups(w http.Respons
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
projectIDParam := r.URL.Query().Get("projectID")
@ -371,6 +364,13 @@ func (h *ProjectManagementHandler) handleGenGetBucketUsageRollups(w http.Respons
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GenGetBucketUsageRollups(ctx, projectID, since, before)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -388,13 +388,6 @@ func (h *ProjectManagementHandler) handleGenGetAPIKeys(w http.ResponseWriter, r
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
search := r.URL.Query().Get("search")
@ -467,6 +460,13 @@ func (h *ProjectManagementHandler) handleGenGetAPIKeys(w http.ResponseWriter, r
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GenGetAPIKeys(ctx, projectID, search, limit, page, order, orderDirection)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -484,13 +484,6 @@ func (h *APIKeyManagementHandler) handleGenCreateAPIKey(w http.ResponseWriter, r
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
payload := console.CreateAPIKeyRequest{}
@ -499,6 +492,13 @@ func (h *APIKeyManagementHandler) handleGenCreateAPIKey(w http.ResponseWriter, r
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
retVal, httpErr := h.service.GenCreateAPIKey(ctx, payload)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -516,13 +516,6 @@ func (h *APIKeyManagementHandler) handleGenDeleteAPIKey(w http.ResponseWriter, r
var err error
defer h.mon.Task()(&ctx)(&err)
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
w.Header().Set("Content-Type", "application/json")
idParam, ok := mux.Vars(r)["id"]
@ -537,6 +530,13 @@ func (h *APIKeyManagementHandler) handleGenDeleteAPIKey(w http.ResponseWriter, r
return
}
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
api.ServeError(h.log, w, http.StatusUnauthorized, err)
return
}
httpErr := h.service.GenDeleteAPIKey(ctx, id)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)
@ -548,6 +548,8 @@ func (h *UserManagementHandler) handleGenGetUser(w http.ResponseWriter, r *http.
var err error
defer h.mon.Task()(&ctx)(&err)
w.Header().Set("Content-Type", "application/json")
ctx, err = h.auth.IsAuthenticated(ctx, r, true, true)
if err != nil {
h.auth.RemoveAuthCookie(w)
@ -555,8 +557,6 @@ func (h *UserManagementHandler) handleGenGetUser(w http.ResponseWriter, r *http.
return
}
w.Header().Set("Content-Type", "application/json")
retVal, httpErr := h.service.GenGetUser(ctx)
if httpErr.Err != nil {
api.ServeError(h.log, w, httpErr.Status, httpErr.Err)