mirror of https://github.com/harness/drone.git
[HARNESS] Delete Space on Harness Account/Org/Project deletion (#83)
parent
c51cc4e2c4
commit
0df1335855
8
Makefile
8
Makefile
|
@ -157,7 +157,13 @@ proto:
|
|||
--go-grpc_opt=paths=source_relative \
|
||||
./gitrpc/proto/*.proto
|
||||
|
||||
|
||||
harness-proto:
|
||||
@protoc --proto_path=./harness/proto \
|
||||
--go_out=./harness/rpc \
|
||||
--go_opt=paths=source_relative \
|
||||
--go-grpc_out=./harness/rpc \
|
||||
--go-grpc_opt=paths=source_relative \
|
||||
./harness/proto/*.proto
|
||||
###########################################
|
||||
# Install Tools and deps
|
||||
#
|
||||
|
|
|
@ -19,6 +19,8 @@ import (
|
|||
"github.com/harness/gitness/harness/bootstrap"
|
||||
"github.com/harness/gitness/harness/client"
|
||||
"github.com/harness/gitness/harness/router"
|
||||
harnessservices "github.com/harness/gitness/harness/services"
|
||||
harnessevents "github.com/harness/gitness/harness/services/events"
|
||||
"github.com/harness/gitness/harness/store"
|
||||
"github.com/harness/gitness/harness/types/check"
|
||||
"github.com/harness/gitness/internal/api/controller/githook"
|
||||
|
@ -33,7 +35,6 @@ import (
|
|||
gitevents "github.com/harness/gitness/internal/events/git"
|
||||
pullreqevents "github.com/harness/gitness/internal/events/pullreq"
|
||||
"github.com/harness/gitness/internal/server"
|
||||
"github.com/harness/gitness/internal/services"
|
||||
"github.com/harness/gitness/internal/services/codecomments"
|
||||
pullreqservice "github.com/harness/gitness/internal/services/pullreq"
|
||||
"github.com/harness/gitness/internal/services/webhook"
|
||||
|
@ -51,11 +52,12 @@ func initSystem(ctx context.Context, config *gitnesstypes.Config) (*system, erro
|
|||
wire.Build(
|
||||
newSystem,
|
||||
ProvideHarnessConfig,
|
||||
harnessevents.WireSet,
|
||||
ProvideRedis,
|
||||
bootstrap.WireSet,
|
||||
database.WireSet,
|
||||
pullreqservice.WireSet,
|
||||
services.WireSet,
|
||||
harnessservices.WireSet,
|
||||
cache.WireSet,
|
||||
server.WireSet,
|
||||
url.WireSet,
|
||||
|
|
|
@ -7,7 +7,6 @@ package server
|
|||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/harness/gitness/events"
|
||||
"github.com/harness/gitness/gitrpc"
|
||||
server2 "github.com/harness/gitness/gitrpc/server"
|
||||
|
@ -17,6 +16,8 @@ import (
|
|||
"github.com/harness/gitness/harness/bootstrap"
|
||||
"github.com/harness/gitness/harness/client"
|
||||
"github.com/harness/gitness/harness/router"
|
||||
"github.com/harness/gitness/harness/services"
|
||||
events4 "github.com/harness/gitness/harness/services/events"
|
||||
"github.com/harness/gitness/harness/store"
|
||||
"github.com/harness/gitness/harness/types/check"
|
||||
"github.com/harness/gitness/internal/api/controller/githook"
|
||||
|
@ -32,7 +33,6 @@ import (
|
|||
events2 "github.com/harness/gitness/internal/events/pullreq"
|
||||
router2 "github.com/harness/gitness/internal/router"
|
||||
"github.com/harness/gitness/internal/server"
|
||||
"github.com/harness/gitness/internal/services"
|
||||
"github.com/harness/gitness/internal/services/codecomments"
|
||||
pullreq2 "github.com/harness/gitness/internal/services/pullreq"
|
||||
"github.com/harness/gitness/internal/services/webhook"
|
||||
|
@ -186,7 +186,14 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servicesServices := services.ProvideServices(webhookService, pullreqService)
|
||||
eventsService, err := events4.ProvideEventService(ctx, typesConfig, spaceController, config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servicesServices, err := services.ProvideServices(ctx, webhookService, pullreqService, eventsService)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serverSystem := newSystem(bootstrapBootstrap, serverServer, server3, manager, servicesServices)
|
||||
return serverSystem, nil
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ package server
|
|||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/harness/gitness/events"
|
||||
"github.com/harness/gitness/gitrpc"
|
||||
server2 "github.com/harness/gitness/gitrpc/server"
|
||||
|
|
|
@ -219,8 +219,7 @@ func (s RepositoryService) DeleteRepository(
|
|||
}
|
||||
|
||||
repoPath := getFullPathForRepo(s.reposRoot, base.RepoUid)
|
||||
// check if directory exists
|
||||
// if dir does not exist already fail silently
|
||||
|
||||
if _, err := os.Stat(repoPath); err != nil && os.IsNotExist(err) {
|
||||
return nil, ErrNotFound(err)
|
||||
} else if err != nil {
|
||||
|
|
|
@ -122,7 +122,6 @@ func (c *Client) DeleteRepository(ctx context.Context, params *DeleteRepositoryP
|
|||
if params == nil {
|
||||
return ErrNoParamsProvided
|
||||
}
|
||||
|
||||
_, err := c.repoService.DeleteRepository(ctx, &rpc.DeleteRepositoryRequest{
|
||||
Base: mapToRPCWriteRequest(params.WriteParams),
|
||||
})
|
||||
|
|
|
@ -87,8 +87,7 @@ func (c *Controller) Create(ctx context.Context, session *auth.Session, in *Crea
|
|||
// cleanup git repo if we fail to create repo in db (best effort deletion)
|
||||
defer func() {
|
||||
if dberr != nil {
|
||||
err := c.DeleteRepositoryRPC(ctx, session, repo)
|
||||
if err != nil {
|
||||
if err := c.DeleteRepositoryRPC(ctx, session, repo); err != nil {
|
||||
log.Ctx(ctx).Warn().Err(err).Msg("gitrpc failed to delete repo for cleanup")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,30 +24,25 @@ func (c *Controller) Delete(ctx context.Context, session *auth.Session, spaceRef
|
|||
if err = apiauth.CheckSpace(ctx, c.authorizer, session, space, enum.PermissionSpaceDelete, false); err != nil {
|
||||
return err
|
||||
}
|
||||
sfilter := &types.SpaceFilter{
|
||||
|
||||
return c.DeleteNoAuth(ctx, session, space.ID)
|
||||
}
|
||||
|
||||
// DeleteNoAuth bypasses PermissionSpaceDelete, PermissionSpaceView, PermissionRepoView, and PermissionRepoDelete.
|
||||
func (c *Controller) DeleteNoAuth(ctx context.Context, session *auth.Session, spaceID int64) error {
|
||||
filter := &types.SpaceFilter{
|
||||
Page: 1,
|
||||
Size: int(math.MaxInt),
|
||||
Query: "",
|
||||
Order: enum.OrderAsc,
|
||||
Sort: enum.SpaceAttrNone,
|
||||
}
|
||||
return c.DeleteNoAuth(ctx, session, space.ID, sfilter)
|
||||
}
|
||||
|
||||
// DeleteNoAuth bypasses these permission
|
||||
// PermissionSpaceDelete, PermissionSpaceView, PermissionRepoView, PermissionRepoDelete.
|
||||
func (c *Controller) DeleteNoAuth(
|
||||
ctx context.Context,
|
||||
session *auth.Session,
|
||||
spaceID int64,
|
||||
filter *types.SpaceFilter,
|
||||
) error {
|
||||
subSpaces, _, err := c.ListSpacesNoAuth(ctx, spaceID, filter)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to list space %d sub spaces: %w", spaceID, err)
|
||||
}
|
||||
for _, space := range subSpaces {
|
||||
err = c.DeleteNoAuth(ctx, session, space.ID, filter)
|
||||
err = c.DeleteNoAuth(ctx, session, space.ID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to delete space %d: %w", space.ID, err)
|
||||
}
|
||||
|
@ -62,3 +57,11 @@ func (c *Controller) DeleteNoAuth(
|
|||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Controller) DeleteWithPathNoAuth(ctx context.Context, session *auth.Session, spacePath string) error {
|
||||
space, err := c.spaceStore.FindByRef(ctx, spacePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.DeleteNoAuth(ctx, session, space.ID)
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import (
|
|||
"github.com/harness/gitness/types/enum"
|
||||
)
|
||||
|
||||
// deleteRepositoriesNoAuth does not check PermissionRepoView, and PermissionRepoDelete permissions
|
||||
// deleteRepositoriesNoAuth does not check PermissionRepoView, and PermissionRepoDelete permissions.
|
||||
// Call this through Delete(Space) api to make sure the caller has DeleteSpace permission.
|
||||
func (c *Controller) deleteRepositoriesNoAuth(ctx context.Context, session *auth.Session, spaceID int64) error {
|
||||
filter := &types.RepoFilter{
|
||||
|
|
|
@ -7,6 +7,7 @@ package space
|
|||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/harness/gitness/internal/api/controller/repo"
|
||||
"github.com/harness/gitness/internal/api/controller/space"
|
||||
"github.com/harness/gitness/internal/api/render"
|
||||
"github.com/harness/gitness/internal/api/request"
|
||||
|
@ -15,7 +16,7 @@ import (
|
|||
/*
|
||||
* Deletes a space.
|
||||
*/
|
||||
func HandleDelete(spaceCtrl *space.Controller) http.HandlerFunc {
|
||||
func HandleDelete(spaceCtrl *space.Controller, repoCtrl *repo.Controller) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
session, _ := request.AuthSessionFrom(ctx)
|
||||
|
|
|
@ -13,8 +13,8 @@ import (
|
|||
"github.com/harness/gitness/internal/services/webhook"
|
||||
"github.com/harness/gitness/internal/store"
|
||||
"github.com/harness/gitness/types/check"
|
||||
"github.com/harness/go-rbac"
|
||||
|
||||
"github.com/harness/go-rbac"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ func setupRoutesV1(r chi.Router,
|
|||
repoCtrl *repo.Controller, spaceCtrl *space.Controller,
|
||||
pullreqCtrl *pullreq.Controller, webhookCtrl *webhook.Controller, githookCtrl *githook.Controller,
|
||||
saCtrl *serviceaccount.Controller, userCtrl *user.Controller, principalCtrl *principal.Controller) {
|
||||
setupSpaces(r, spaceCtrl)
|
||||
setupSpaces(r, spaceCtrl, repoCtrl)
|
||||
setupRepos(r, repoCtrl, pullreqCtrl, webhookCtrl)
|
||||
setupUser(r, userCtrl)
|
||||
setupServiceAccounts(r, saCtrl)
|
||||
|
@ -121,7 +121,7 @@ func setupRoutesV1(r chi.Router,
|
|||
setupResources(r)
|
||||
}
|
||||
|
||||
func setupSpaces(r chi.Router, spaceCtrl *space.Controller) {
|
||||
func setupSpaces(r chi.Router, spaceCtrl *space.Controller, repoCtrl *repo.Controller) {
|
||||
r.Route("/spaces", func(r chi.Router) {
|
||||
// Create takes path and parentId via body, not uri
|
||||
r.Post("/", handlerspace.HandleCreate(spaceCtrl))
|
||||
|
@ -130,7 +130,7 @@ func setupSpaces(r chi.Router, spaceCtrl *space.Controller) {
|
|||
// space operations
|
||||
r.Get("/", handlerspace.HandleFind(spaceCtrl))
|
||||
r.Patch("/", handlerspace.HandleUpdate(spaceCtrl))
|
||||
r.Delete("/", handlerspace.HandleDelete(spaceCtrl))
|
||||
r.Delete("/", handlerspace.HandleDelete(spaceCtrl, repoCtrl))
|
||||
|
||||
r.Post("/move", handlerspace.HandleMove(spaceCtrl))
|
||||
r.Get("/spaces", handlerspace.HandleListSpaces(spaceCtrl))
|
||||
|
|
|
@ -8,10 +8,9 @@ import (
|
|||
context "context"
|
||||
reflect "reflect"
|
||||
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
user "github.com/harness/gitness/internal/api/controller/user"
|
||||
types "github.com/harness/gitness/types"
|
||||
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
)
|
||||
|
||||
// MockClient is a mock of Client interface.
|
||||
|
|
|
@ -8,10 +8,9 @@ import (
|
|||
context "context"
|
||||
reflect "reflect"
|
||||
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
types "github.com/harness/gitness/types"
|
||||
enum "github.com/harness/gitness/types/enum"
|
||||
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
)
|
||||
|
||||
// MockPrincipalStore is a mock of PrincipalStore interface.
|
||||
|
|
Loading…
Reference in New Issue