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