More deleteData endpoint impls (#362)

This commit is contained in:
Dominic Wong
2022-02-02 16:50:11 +00:00
committed by GitHub
parent e0bb9a8765
commit ba77f7b2f4
12 changed files with 125 additions and 13 deletions

View File

@@ -15,6 +15,8 @@ import (
"github.com/micro/micro/v3/service/errors"
log "github.com/micro/micro/v3/service/logger"
"github.com/micro/micro/v3/service/store"
pauth "github.com/micro/services/pkg/auth"
adminpb "github.com/micro/services/pkg/service/proto"
"github.com/micro/services/pkg/tenant"
pb "github.com/micro/services/space/proto"
"github.com/minio/minio-go/v7/pkg/s3utils"
@@ -503,3 +505,56 @@ func (s Space) Upload(ctx context.Context, request *pb.UploadRequest, response *
return nil
}
func (s Space) DeleteData(ctx context.Context, request *adminpb.DeleteDataRequest, response *adminpb.DeleteDataResponse) error {
method := "admin.DeleteData"
_, err := pauth.VerifyMicroAdmin(ctx, method)
if err != nil {
return err
}
if len(request.TenantId) < 10 { // deliberate length check so we don't delete all the things
return errors.BadRequest(method, "Missing tenant ID")
}
objectName := request.TenantId
rsp, err := s.client.ListObjects(&sthree.ListObjectsInput{
Bucket: aws.String(s.conf.SpaceName),
Prefix: aws.String(objectName),
})
if err != nil {
log.Errorf("Error listing objects %s", err)
return errors.InternalServerError(method, "Error listing objects")
}
oIDs := []*sthree.ObjectIdentifier{}
for _, v := range rsp.Contents {
oIDs = append(oIDs, &sthree.ObjectIdentifier{Key: v.Key})
}
if _, err := s.client.DeleteObjects(&sthree.DeleteObjectsInput{
Bucket: aws.String(s.conf.SpaceName),
Delete: &sthree.Delete{
Objects: oIDs,
},
}); err != nil {
return err
}
log.Infof("Deleted %d objects from s3 for %s", len(oIDs), request.TenantId)
keys, err := store.List(store.ListPrefix(fmt.Sprintf("%s/", prefixByUser)))
if err != nil {
log.Errorf("Error listing objects %s", err)
return errors.InternalServerError(method, "Error listing objects")
}
for _, k := range keys {
if err := store.Delete(k); err != nil {
return err
}
}
log.Infof("Deleted %d objects from store for %s", len(keys), request.TenantId)
return nil
}

View File

@@ -4,6 +4,7 @@ import (
"github.com/micro/micro/v3/service"
"github.com/micro/micro/v3/service/api"
"github.com/micro/micro/v3/service/logger"
admin "github.com/micro/services/pkg/service/proto"
"github.com/micro/services/space/handler"
)
@@ -14,12 +15,12 @@ func main() {
service.Version("latest"),
)
h := handler.NewSpace(srv)
// Register handler
//pb.RegisterSpaceHandler(srv.Server(), handler.NewSpace(srv))
admin.RegisterAdminHandler(srv.Server(), h)
srv.Server().Handle(
srv.Server().NewHandler(
handler.NewSpace(srv),
h,
api.WithEndpoint(
&api.Endpoint{
Name: "Space.Download",