Passed
Pull Request — master (#1681)
by
unknown
04:00
created

internal/servers/permissionServer.go   A

Size/Duplication

Total Lines 174
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 22
eloc 105
dl 0
loc 174
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A servers.*PermissionServer.Check 0 18 3
A servers.NewPermissionServer 0 3 1
A servers.*PermissionServer.Expand 0 18 3
A servers.*PermissionServer.LookupSubject 0 18 3
A servers.*PermissionServer.LookupEntityStream 0 18 3
A servers.*PermissionServer.BulkCheck 0 19 3
A servers.*PermissionServer.LookupEntity 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
// Bulk Check - Performs Bulk Authorization Checks
50
func (r *PermissionServer) BulkCheck(ctx context.Context, request *v1.BulkPermissionCheckRequest) (*v1.BulkPermissionCheckResponse, error) {
51
	ctx, span := tracer.Start(ctx, "permissions.bulk-check")
52
	defer span.End()
53
54
	// Validate the incoming request
55
	v := request.Validate()
56
	if v != nil {
57
		return nil, status.Error(GetStatus(v), v.Error())
58
	}
59
60
	response, err := r.invoker.BulkCheck(ctx, request)
61
	if err != nil {
62
		span.RecordError(err)
63
		span.SetStatus(otelCodes.Error, err.Error())
64
		slog.ErrorContext(ctx, err.Error())
65
		return nil, status.Error(GetStatus(err), err.Error())
66
	}
67
68
	return response, nil
69
70
}
71
72
// Expand - Get schema actions in a tree structure
73
func (r *PermissionServer) Expand(ctx context.Context, request *v1.PermissionExpandRequest) (*v1.PermissionExpandResponse, error) {
74
	ctx, span := tracer.Start(ctx, "permissions.expand")
75
	defer span.End()
76
77
	v := request.Validate()
78
	if v != nil {
79
		return nil, status.Error(GetStatus(v), v.Error())
80
	}
81
82
	response, err := r.invoker.Expand(ctx, request)
83
	if err != nil {
84
		span.RecordError(err)
85
		span.SetStatus(otelCodes.Error, err.Error())
86
		slog.ErrorContext(ctx, err.Error())
87
		return nil, status.Error(GetStatus(err), err.Error())
88
	}
89
90
	return response, nil
91
}
92
93
// LookupEntity -
94
func (r *PermissionServer) LookupEntity(ctx context.Context, request *v1.PermissionLookupEntityRequest) (*v1.PermissionLookupEntityResponse, error) {
95
	ctx, span := tracer.Start(ctx, "permissions.lookup-entity")
96
	defer span.End()
97
98
	v := request.Validate()
99
	if v != nil {
100
		return nil, status.Error(GetStatus(v), v.Error())
101
	}
102
103
	response, err := r.invoker.LookupEntity(ctx, request)
104
	if err != nil {
105
		span.RecordError(err)
106
		span.SetStatus(otelCodes.Error, err.Error())
107
		slog.ErrorContext(ctx, err.Error())
108
		return nil, status.Error(GetStatus(err), err.Error())
109
	}
110
111
	return response, nil
112
}
113
114
// LookupEntityStream -
115
func (r *PermissionServer) LookupEntityStream(request *v1.PermissionLookupEntityRequest, server v1.Permission_LookupEntityStreamServer) error {
116
	ctx, span := tracer.Start(server.Context(), "permissions.lookup-entity-stream")
117
	defer span.End()
118
119
	v := request.Validate()
120
	if v != nil {
121
		return v
122
	}
123
124
	err := r.invoker.LookupEntityStream(ctx, request, server)
125
	if err != nil {
126
		span.RecordError(err)
127
		span.SetStatus(otelCodes.Error, err.Error())
128
		slog.ErrorContext(ctx, err.Error())
129
		return status.Error(GetStatus(err), err.Error())
130
	}
131
132
	return nil
133
}
134
135
// LookupSubject -
136
func (r *PermissionServer) LookupSubject(ctx context.Context, request *v1.PermissionLookupSubjectRequest) (*v1.PermissionLookupSubjectResponse, error) {
137
	ctx, span := tracer.Start(ctx, "permissions.lookup-subject")
138
	defer span.End()
139
140
	v := request.Validate()
141
	if v != nil {
142
		return nil, status.Error(GetStatus(v), v.Error())
143
	}
144
145
	response, err := r.invoker.LookupSubject(ctx, request)
146
	if err != nil {
147
		span.RecordError(err)
148
		span.SetStatus(otelCodes.Error, err.Error())
149
		slog.ErrorContext(ctx, err.Error())
150
		return nil, status.Error(GetStatus(err), err.Error())
151
	}
152
153
	return response, nil
154
}
155
156
// SubjectPermission -
157
func (r *PermissionServer) SubjectPermission(ctx context.Context, request *v1.PermissionSubjectPermissionRequest) (*v1.PermissionSubjectPermissionResponse, error) {
158
	ctx, span := tracer.Start(ctx, "permissions.subject-permission")
159
	defer span.End()
160
161
	v := request.Validate()
162
	if v != nil {
163
		return nil, status.Error(GetStatus(v), v.Error())
164
	}
165
166
	response, err := r.invoker.SubjectPermission(ctx, request)
167
	if err != nil {
168
		span.RecordError(err)
169
		span.SetStatus(otelCodes.Error, err.Error())
170
		slog.ErrorContext(ctx, err.Error())
171
		return nil, status.Error(GetStatus(err), err.Error())
172
	}
173
174
	return response, nil
175
}
176