summaryrefslogtreecommitdiff
path: root/pkg/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/rpc')
-rw-r--r--pkg/rpc/ability_handler.go20
-rw-r--r--pkg/rpc/server.go14
2 files changed, 34 insertions, 0 deletions
diff --git a/pkg/rpc/ability_handler.go b/pkg/rpc/ability_handler.go
new file mode 100644
index 0000000..a881b41
--- /dev/null
+++ b/pkg/rpc/ability_handler.go
@@ -0,0 +1,20 @@
+package rpc
+
+import (
+ context "context"
+ "net/http"
+
+ "github.com/xlgmokha/x/pkg/x"
+ "gitlab.com/mokhax/spike/pkg/authz"
+)
+
+type AbilityHandler struct {
+ authorizer authz.Authorizer
+ UnimplementedAbilityServer
+}
+
+func (h *AbilityHandler) Allowed(ctx context.Context, req *AllowRequest) (*AllowReply, error) {
+ // TODO:: Replace http.Request with authz.Request
+ request := x.Must(http.NewRequestWithContext(ctx, req.Permission, req.Resource, nil))
+ return &AllowReply{Result: h.authorizer.Authorize(request)}, nil
+}
diff --git a/pkg/rpc/server.go b/pkg/rpc/server.go
new file mode 100644
index 0000000..ba96b61
--- /dev/null
+++ b/pkg/rpc/server.go
@@ -0,0 +1,14 @@
+package rpc
+
+import (
+ "gitlab.com/mokhax/spike/pkg/authz"
+ grpc "google.golang.org/grpc"
+)
+
+func New(authorizer authz.Authorizer, options ...grpc.ServerOption) *grpc.Server {
+ server := grpc.NewServer(options...)
+ RegisterAbilityServer(server, &AbilityHandler{
+ authorizer: authorizer,
+ })
+ return server
+}