mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-16 04:54:42 +00:00
More data delete endpoints (#363)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user