/
service.go
133 lines (114 loc) · 4.19 KB
/
service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* Copyright (c) 2023 AccelByte Inc. All Rights Reserved
* This program is made available under the terms of the MIT License.
*/
package grpc
import (
"context"
"math/rand"
"time"
"github.com/AccelByte/accelbyte-gdpr-go-sdk/pkg/object"
pb "github.com/AccelByte/accelbyte-gdpr-go-sdk/pkg/pb"
"github.com/AccelByte/accelbyte-gdpr-go-sdk/pkg/utils"
"github.com/sirupsen/logrus"
)
type GDPRServiceServer struct {
pb.UnimplementedGDPRServer
DataGenerationHandler object.DataGenerationHandler
DataDeletionHandler object.DataDeletionHandler
DataRestrictionHandler object.DataRestrictionHandler
}
func NewGDPRServiceServer() *GDPRServiceServer {
rand.Seed(time.Now().Unix())
return &GDPRServiceServer{}
}
func (s *GDPRServiceServer) DataGeneration(ctx context.Context, req *pb.DataGenerationRequest) (*pb.DataGenerationResponse, error) {
if req.Namespace == "" || req.UserId == "" || req.UploadUrl == "" {
return &pb.DataGenerationResponse{
Success: false,
Message: "required payload is empty",
}, nil
}
namespace := req.Namespace
userID := req.UserId
if s.DataGenerationHandler != nil {
logrus.Infof("[DataGeneration gRPC] Start execute for namespace [%s] userId [%s]", namespace, userID)
result, err := s.DataGenerationHandler(namespace, userID, req.IsPublisherNamespace)
if err != nil {
logrus.Errorf("[DataGeneration gRPC] Failed executing DataGenerationHandler. Error: %s", err)
return &pb.DataGenerationResponse{
Success: false,
Message: err.Error(),
}, nil
}
if result == nil || len(result.Data) == 0 {
logrus.Infof("[DataGeneration gRPC] Data result is empty for namespace [%s] userId [%s]", namespace, userID)
return &pb.DataGenerationResponse{Success: true}, nil
}
// create zip file
zipFileBytes, err := utils.CreateZipFile(namespace, userID, result.Data)
if err != nil {
logrus.Errorf("[DataGeneration gRPC] Failed creating zip file. Error: %s", err)
return &pb.DataGenerationResponse{
Success: false,
Message: err.Error(),
}, nil
}
if zipFileBytes == nil {
logrus.Infof("[DataGeneration gRPC] Data result is empty for namespace [%s] userId [%s]", namespace, userID)
return &pb.DataGenerationResponse{Success: true}, nil
}
// upload file into storage
err = utils.UploadFile(ctx, req.UploadUrl, zipFileBytes)
if err != nil {
logrus.Errorf("[DataGeneration gRPC] Failed uploading file. Error: %s", err)
return &pb.DataGenerationResponse{
Success: false,
Message: "Failed uploading file. Error: " + err.Error(),
}, nil
}
}
return &pb.DataGenerationResponse{Success: true}, nil
}
func (s *GDPRServiceServer) DataDeletion(_ context.Context, req *pb.DataDeletionRequest) (*pb.DataDeletionResponse, error) {
if req.Namespace == "" || req.UserId == "" {
return &pb.DataDeletionResponse{
Success: false,
Message: "required payload is empty",
}, nil
}
namespace := req.Namespace
userID := req.UserId
if s.DataDeletionHandler != nil {
logrus.Infof("[DataDeletion gRPC] Start execute for namespace [%s] userId [%s]", namespace, userID)
err := s.DataDeletionHandler(namespace, userID, req.IsPublisherNamespace)
if err != nil {
logrus.Errorf("[DataDeletion gRPC] Failed executing DataDeletionHandler. Error: %s", err)
return &pb.DataDeletionResponse{
Success: false,
Message: err.Error(),
}, nil
}
}
return &pb.DataDeletionResponse{Success: true}, nil
}
func (s *GDPRServiceServer) DataRestriction(_ context.Context, req *pb.DataRestrictionRequest) (*pb.DataRestrictionResponse, error) {
if req.Namespace == "" || req.UserId == "" {
return &pb.DataRestrictionResponse{
Success: false,
Message: "required payload is empty",
}, nil
}
if s.DataRestrictionHandler != nil {
logrus.Infof("[DataRestriction gRPC] Start execute for namespace [%s] userId [%s] restrict [%s]", req.Namespace, req.UserId, req.Restrict)
err := s.DataRestrictionHandler(req.Namespace, req.UserId, req.Restrict, req.IsPublisherNamespace)
if err != nil {
logrus.Errorf("[DataRestriction gRPC] Failed executing DataRestrictionHandler. Error: %s", err)
return &pb.DataRestrictionResponse{
Success: false,
Message: err.Error(),
}, nil
}
}
return &pb.DataRestrictionResponse{Success: true}, nil
}