Passed
Pull Request — master (#1465)
by
unknown
02:47
created

internal/servers/permissionServer.go   A

Size/Duplication

Total Lines 193
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 25
eloc 118
dl 0
loc 193
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A servers.*PermissionServer.Expand 0 18 3
A servers.*PermissionServer.LookupEntityStream 0 18 3
A servers.*PermissionServer.Check 0 18 3
A servers.NewPermissionServer 0 3 1
A servers.*PermissionServer.LookupEntity 0 18 3
A servers.*PermissionServer.LookupEntitiesStream 0 18 3
A servers.*PermissionServer.LookupSubject 0 18 3
A servers.*PermissionServer.LookupEntities 0 18 3
A servers.*PermissionServer.SubjectPermission 0 18 3
1
package servers
2
3
import (
4
	"log/slog"
5
6
	otelCodes "go.opentelemetry.io/otel/codes"
7
	"golang.org/x/net/context"
8
	"google.golang.org/grpc/status"
9
10
	"github.com/Permify/permify/internal/invoke"
11
	v1 "github.com/Permify/permify/pkg/pb/base/v1"
12
)
13
14
// PermissionServer - Structure for Permission Server
15
type PermissionServer struct {
16
	v1.UnimplementedPermissionServer
17
18
	invoker invoke.Invoker
19
}
20
21
// NewPermissionServer - Creates new Permission Server
22
func NewPermissionServer(i invoke.Invoker) *PermissionServer {
23
	return &PermissionServer{
24
		invoker: i,
25
	}
26
}
27
28
// Check - Performs Authorization Check
29
func (r *PermissionServer) Check(ctx context.Context, request *v1.PermissionCheckRequest) (*v1.PermissionCheckResponse, error) {
30
	ctx, span := tracer.Start(ctx, "permissions.check")
31
	defer span.End()
32
33
	v := request.Validate()
34
	if v != nil {
35
		return nil, status.Error(GetStatus(v), v.Error())
36
	}
37
38
	response, err := r.invoker.Check(ctx, request)
39
	if err != nil {
40
		span.RecordError(err)
41
		span.SetStatus(otelCodes.Error, err.Error())
42
		slog.ErrorContext(ctx, err.Error())
43
		return nil, status.Error(GetStatus(err), err.Error())
44
	}
45
46
	return response, nil
47
}
48
49
// Expand - Get schema actions in a tree structure
50
func (r *PermissionServer) Expand(ctx context.Context, request *v1.PermissionExpandRequest) (*v1.PermissionExpandResponse, error) {
51
	ctx, span := tracer.Start(ctx, "permissions.expand")
52
	defer span.End()
53
54
	v := request.Validate()
55
	if v != nil {
56
		return nil, status.Error(GetStatus(v), v.Error())
57
	}
58
59
	response, err := r.invoker.Expand(ctx, request)
60
	if err != nil {
61
		span.RecordError(err)
62
		span.SetStatus(otelCodes.Error, err.Error())
63
		slog.ErrorContext(ctx, err.Error())
64
		return nil, status.Error(GetStatus(err), err.Error())
65
	}
66
67
	return response, nil
68
}
69
70
// LookupEntity -
71
func (r *PermissionServer) LookupEntity(ctx context.Context, request *v1.PermissionLookupEntityRequest) (*v1.PermissionLookupEntityResponse, error) {
72
	ctx, span := tracer.Start(ctx, "permissions.lookup-entity")
73
	defer span.End()
74
75
	v := request.Validate()
76
	if v != nil {
77
		return nil, status.Error(GetStatus(v), v.Error())
78
	}
79
80
	response, err := r.invoker.LookupEntity(ctx, request)
81
	if err != nil {
82
		span.RecordError(err)
83
		span.SetStatus(otelCodes.Error, err.Error())
84
		slog.ErrorContext(ctx, err.Error())
85
		return nil, status.Error(GetStatus(err), err.Error())
86
	}
87
88
	return response, nil
89
}
90
91
// LookupEntityStream -
92
func (r *PermissionServer) LookupEntityStream(request *v1.PermissionLookupEntityRequest, server v1.Permission_LookupEntityStreamServer) error {
93
	ctx, span := tracer.Start(server.Context(), "permissions.lookup-entity-stream")
94
	defer span.End()
95
96
	v := request.Validate()
97
	if v != nil {
98
		return v
99
	}
100
101
	err := r.invoker.LookupEntityStream(ctx, request, server)
102
	if err != nil {
103
		span.RecordError(err)
104
		span.SetStatus(otelCodes.Error, err.Error())
105
		slog.ErrorContext(ctx, err.Error())
106
		return status.Error(GetStatus(err), err.Error())
107
	}
108
109
	return nil
110
}
111
112
// LookupEntities -
113
func (r *PermissionServer) LookupEntities(ctx context.Context, request *v1.PermissionsLookupEntityRequest) (*v1.PermissionsLookupEntityResponse, error) {
114
	ctx, span := tracer.Start(ctx, "permissions.lookup-entities")
115
	defer span.End()
116
117
	v := request.Validate()
118
	if v != nil {
119
		return nil, status.Error(GetStatus(v), v.Error())
120
	}
121
122
	response, err := r.invoker.LookupEntities(ctx, request)
123
	if err != nil {
124
		span.RecordError(err)
125
		span.SetStatus(otelCodes.Error, err.Error())
126
		slog.ErrorContext(ctx, err.Error())
127
		return nil, status.Error(GetStatus(err), err.Error())
128
	}
129
130
	return response, nil
131
}
132
133
// LookupEntitiesStream -
134
func (r *PermissionServer) LookupEntitiesStream(request *v1.PermissionsLookupEntityRequest, server v1.Permission_LookupEntitiesStreamServer) error {
135
	ctx, span := tracer.Start(server.Context(), "permissions.lookup-entities-stream")
136
	defer span.End()
137
138
	v := request.Validate()
139
	if v != nil {
140
		return v
141
	}
142
143
	err := r.invoker.LookupEntitiesStream(ctx, request, server)
144
	if err != nil {
145
		span.RecordError(err)
146
		span.SetStatus(otelCodes.Error, err.Error())
147
		slog.ErrorContext(ctx, err.Error())
148
		return status.Error(GetStatus(err), err.Error())
149
	}
150
151
	return nil
152
}
153
154
// LookupSubject -
155
func (r *PermissionServer) LookupSubject(ctx context.Context, request *v1.PermissionLookupSubjectRequest) (*v1.PermissionLookupSubjectResponse, error) {
156
	ctx, span := tracer.Start(ctx, "permissions.lookup-subject")
157
	defer span.End()
158
159
	v := request.Validate()
160
	if v != nil {
161
		return nil, status.Error(GetStatus(v), v.Error())
162
	}
163
164
	response, err := r.invoker.LookupSubject(ctx, request)
165
	if err != nil {
166
		span.RecordError(err)
167
		span.SetStatus(otelCodes.Error, err.Error())
168
		slog.ErrorContext(ctx, err.Error())
169
		return nil, status.Error(GetStatus(err), err.Error())
170
	}
171
172
	return response, nil
173
}
174
175
// SubjectPermission -
176
func (r *PermissionServer) SubjectPermission(ctx context.Context, request *v1.PermissionSubjectPermissionRequest) (*v1.PermissionSubjectPermissionResponse, error) {
177
	ctx, span := tracer.Start(ctx, "permissions.subject-permission")
178
	defer span.End()
179
180
	v := request.Validate()
181
	if v != nil {
182
		return nil, status.Error(GetStatus(v), v.Error())
183
	}
184
185
	response, err := r.invoker.SubjectPermission(ctx, request)
186
	if err != nil {
187
		span.RecordError(err)
188
		span.SetStatus(otelCodes.Error, err.Error())
189
		slog.ErrorContext(ctx, err.Error())
190
		return nil, status.Error(GetStatus(err), err.Error())
191
	}
192
193
	return response, nil
194
}
195