Passed
Pull Request — master (#2516)
by Tolga
04:08
created

servers.NewPermissionServer   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
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"
11
	"github.com/Permify/permify/internal/invoke"
12
	v1 "github.com/Permify/permify/pkg/pb/base/v1"
13
)
14
15
// PermissionServer - Structure for Permission Server
16
type PermissionServer struct {
17
	v1.UnimplementedPermissionServer
18
19
	invoker invoke.Invoker
20
}
21
22
// NewPermissionServer - Creates new Permission Server
23
func NewPermissionServer(i invoke.Invoker) *PermissionServer {
24
	return &PermissionServer{
25
		invoker: i,
26
	}
27
}
28
29
// Check - Performs Authorization Check
30
func (r *PermissionServer) Check(ctx context.Context, request *v1.PermissionCheckRequest) (*v1.PermissionCheckResponse, error) {
31
	ctx, span := internal.Tracer.Start(ctx, "permissions.check")
32
	defer span.End()
33
34
	v := request.Validate()
35
	if v != nil {
36
		return nil, status.Error(GetStatus(v), v.Error())
37
	}
38
39
	response, err := r.invoker.Check(ctx, request)
40
	if err != nil {
41
		span.RecordError(err)
42
		span.SetStatus(otelCodes.Error, err.Error())
43
		slog.ErrorContext(ctx, err.Error())
44
		return nil, status.Error(GetStatus(err), err.Error())
45
	}
46
47
	return response, nil
48
}
49
50
// Expand - Get schema actions in a tree structure
51
func (r *PermissionServer) Expand(ctx context.Context, request *v1.PermissionExpandRequest) (*v1.PermissionExpandResponse, error) {
52
	ctx, span := internal.Tracer.Start(ctx, "permissions.expand")
53
	defer span.End()
54
55
	v := request.Validate()
56
	if v != nil {
57
		return nil, status.Error(GetStatus(v), v.Error())
58
	}
59
60
	response, err := r.invoker.Expand(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
// LookupEntity -
72
func (r *PermissionServer) LookupEntity(ctx context.Context, request *v1.PermissionLookupEntityRequest) (*v1.PermissionLookupEntityResponse, error) {
73
	ctx, span := internal.Tracer.Start(ctx, "permissions.lookup-entity")
74
	defer span.End()
75
76
	v := request.Validate()
77
	if v != nil {
78
		return nil, status.Error(GetStatus(v), v.Error())
79
	}
80
81
	response, err := r.invoker.LookupEntity(ctx, request)
82
	if err != nil {
83
		span.RecordError(err)
84
		span.SetStatus(otelCodes.Error, err.Error())
85
		slog.ErrorContext(ctx, err.Error())
86
		return nil, status.Error(GetStatus(err), err.Error())
87
	}
88
89
	return response, nil
90
}
91
92
// LookupEntityStream -
93
func (r *PermissionServer) LookupEntityStream(request *v1.PermissionLookupEntityRequest, server v1.Permission_LookupEntityStreamServer) error {
94
	ctx, span := internal.Tracer.Start(server.Context(), "permissions.lookup-entity-stream")
95
	defer span.End()
96
97
	v := request.Validate()
98
	if v != nil {
99
		return v
100
	}
101
102
	err := r.invoker.LookupEntityStream(ctx, request, server)
103
	if err != nil {
104
		span.RecordError(err)
105
		span.SetStatus(otelCodes.Error, err.Error())
106
		slog.ErrorContext(ctx, err.Error())
107
		return status.Error(GetStatus(err), err.Error())
108
	}
109
110
	return nil
111
}
112
113
// LookupSubject -
114
func (r *PermissionServer) LookupSubject(ctx context.Context, request *v1.PermissionLookupSubjectRequest) (*v1.PermissionLookupSubjectResponse, error) {
115
	ctx, span := internal.Tracer.Start(ctx, "permissions.lookup-subject")
116
	defer span.End()
117
118
	v := request.Validate()
119
	if v != nil {
120
		return nil, status.Error(GetStatus(v), v.Error())
121
	}
122
123
	response, err := r.invoker.LookupSubject(ctx, request)
124
	if err != nil {
125
		span.RecordError(err)
126
		span.SetStatus(otelCodes.Error, err.Error())
127
		slog.ErrorContext(ctx, err.Error())
128
		return nil, status.Error(GetStatus(err), err.Error())
129
	}
130
131
	return response, nil
132
}
133
134
// SubjectPermission -
135
func (r *PermissionServer) SubjectPermission(ctx context.Context, request *v1.PermissionSubjectPermissionRequest) (*v1.PermissionSubjectPermissionResponse, error) {
136
	ctx, span := internal.Tracer.Start(ctx, "permissions.subject-permission")
137
	defer span.End()
138
139
	v := request.Validate()
140
	if v != nil {
141
		return nil, status.Error(GetStatus(v), v.Error())
142
	}
143
144
	response, err := r.invoker.SubjectPermission(ctx, request)
145
	if err != nil {
146
		span.RecordError(err)
147
		span.SetStatus(otelCodes.Error, err.Error())
148
		slog.ErrorContext(ctx, err.Error())
149
		return nil, status.Error(GetStatus(err), err.Error())
150
	}
151
152
	return response, nil
153
}
154