gateway: implement projectgroup delete

This commit is contained in:
Simone Gotti 2019-05-13 00:24:16 +02:00
parent d551dcb820
commit 4a8d86ae76
4 changed files with 56 additions and 1 deletions

View File

@ -103,3 +103,24 @@ func (h *ActionHandler) CreateProjectGroup(ctx context.Context, req *CreateProje
return rp, nil
}
func (h *ActionHandler) DeleteProjectGroup(ctx context.Context, projectRef string) error {
p, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectRef)
if err != nil {
return ErrFromRemote(resp, errors.Wrapf(err, "failed to get project %q", projectRef))
}
isProjectOwner, err := h.IsProjectOwner(ctx, p.OwnerType, p.OwnerID)
if err != nil {
return errors.Wrapf(err, "failed to determine ownership")
}
if !isProjectOwner {
return util.NewErrForbidden(errors.Errorf("user not authorized"))
}
resp, err = h.configstoreClient.DeleteProjectGroup(ctx, projectRef)
if err != nil {
return ErrFromRemote(resp, err)
}
return nil
}

View File

@ -144,6 +144,10 @@ func (c *Client) CreateProjectGroup(ctx context.Context, req *CreateProjectGroup
return project, resp, err
}
func (c *Client) DeleteProjectGroup(ctx context.Context, projectGroupRef string) (*http.Response, error) {
return c.getResponse(ctx, "DELETE", fmt.Sprintf("/projectgroups/%s", url.PathEscape(projectGroupRef)), nil, jsonContent, nil)
}
func (c *Client) CreateProject(ctx context.Context, req *CreateProjectRequest) (*ProjectResponse, *http.Response, error) {
reqj, err := json.Marshal(req)
if err != nil {

View File

@ -81,6 +81,35 @@ func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
}
}
type DeleteProjectGroupHandler struct {
log *zap.SugaredLogger
ah *action.ActionHandler
}
func NewDeleteProjectGroupHandler(logger *zap.Logger, ah *action.ActionHandler) *DeleteProjectGroupHandler {
return &DeleteProjectGroupHandler{log: logger.Sugar(), ah: ah}
}
func (h *DeleteProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := mux.Vars(r)
projectGroupRef, err := url.PathUnescape(vars["projectgroupref"])
if err != nil {
httpError(w, util.NewErrBadRequest(err))
return
}
err = h.ah.DeleteProjectGroup(ctx, projectGroupRef)
if httpError(w, err) {
h.log.Errorf("err: %+v", err)
return
}
if err := httpResponse(w, http.StatusNoContent, nil); err != nil {
h.log.Errorf("err: %+v", err)
}
}
type ProjectGroupHandler struct {
log *zap.SugaredLogger
ah *action.ActionHandler

View File

@ -153,6 +153,7 @@ func (g *Gateway) Run(ctx context.Context) error {
projectGroupSubgroupsHandler := api.NewProjectGroupSubgroupsHandler(logger, g.ah)
projectGroupProjectsHandler := api.NewProjectGroupProjectsHandler(logger, g.ah)
createProjectGroupHandler := api.NewCreateProjectGroupHandler(logger, g.ah)
deleteProjectGroupHandler := api.NewDeleteProjectGroupHandler(logger, g.ah)
projectHandler := api.NewProjectHandler(logger, g.ah)
createProjectHandler := api.NewCreateProjectHandler(logger, g.ah)
@ -228,7 +229,7 @@ func (g *Gateway) Run(ctx context.Context) error {
apirouter.Handle("/projectgroups/{projectgroupref}/subgroups", authForcedHandler(projectGroupSubgroupsHandler)).Methods("GET")
apirouter.Handle("/projectgroups/{projectgroupref}/projects", authForcedHandler(projectGroupProjectsHandler)).Methods("GET")
apirouter.Handle("/projectgroups", authForcedHandler(createProjectGroupHandler)).Methods("POST")
//apirouter.Handle("/projectgroups/{projectgroupref}", authForcedHandler(deleteProjectGroupHandler)).Methods("DELETE")
apirouter.Handle("/projectgroups/{projectgroupref}", authForcedHandler(deleteProjectGroupHandler)).Methods("DELETE")
apirouter.Handle("/projects/{projectref}", authForcedHandler(projectHandler)).Methods("GET")
apirouter.Handle("/projects", authForcedHandler(createProjectHandler)).Methods("POST")