More data delete endpoints (#363)

This commit is contained in:
Dominic Wong
2022-02-03 17:32:08 +00:00
committed by GitHub
parent ba77f7b2f4
commit 0663f196d5
9 changed files with 144 additions and 14 deletions

View File

@@ -12,6 +12,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"
qr "github.com/micro/services/qr/proto"
"github.com/skip2/go-qrcode"
@@ -44,6 +46,10 @@ func New() *Qr {
return &Qr{cdnPrefix: pref}
}
func namespacePrefix(tenantID string) string {
return "micro/qr/" + tenantID
}
func (q *Qr) Generate(ctx context.Context, request *qr.GenerateRequest, response *qr.GenerateResponse) error {
if len(request.Text) == 0 {
return errors.BadRequest("qr.generate", "Missing parameter text")
@@ -63,7 +69,7 @@ func (q *Qr) Generate(ctx context.Context, request *qr.GenerateRequest, response
return errors.InternalServerError("qr.generate", "Error while generating QR code")
}
nsPrefix := "micro/qr/" + ten
nsPrefix := namespacePrefix(ten)
fileName := fmt.Sprintf("%s.png", uuid.New().String())
if err := store.DefaultBlobStore.Write(
fileName, bytes.NewBuffer(qrc),
@@ -90,3 +96,42 @@ func (q *Qr) Generate(ctx context.Context, request *qr.GenerateRequest, response
response.Qr = fmt.Sprintf("%s/%s/%s", q.cdnPrefix, nsPrefix, rec.Filename)
return nil
}
func (q *Qr) 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")
}
ns := namespacePrefix(request.TenantId)
keys, err := store.DefaultBlobStore.List(store.BlobListNamespace(ns))
if err != nil {
return err
}
for _, key := range keys {
err = store.DefaultBlobStore.Delete(key, store.BlobNamespace(ns))
if err != nil {
return err
}
}
log.Infof("Deleted %d objects from S3 for %s", len(keys), request.TenantId)
keys, err = store.List(store.ListPrefix(fmt.Sprintf("%s/%s/", prefixByTenant, ns)))
if err != nil {
return err
}
for _, key := range keys {
if err := store.Delete(key); err != nil {
return err
}
}
log.Infof("Deleted %d objects from store for %s", len(keys), request.TenantId)
return nil
}