@@ -3,18 +3,12 @@ package api
33import (
44 "buf.build/gen/go/dot/brease/grpc/go/brease/auth/v1/authv1grpc"
55 "buf.build/gen/go/dot/brease/grpc/go/brease/context/v1/contextv1grpc"
6- authv1 "buf.build/gen/go/dot/brease/protocolbuffers/go/brease/auth/v1"
7- contextv1 "buf.build/gen/go/dot/brease/protocolbuffers/go/brease/context/v1"
8- rulev1 "buf.build/gen/go/dot/brease/protocolbuffers/go/brease/rule/v1"
9- "connectrpc.com/connect"
10- "context"
6+ "github.com/kaptinlin/jsonschema"
117 "go.dot.industries/brease/auth"
128 "go.dot.industries/brease/cache"
139 "go.dot.industries/brease/code"
1410 "go.dot.industries/brease/storage"
1511 "go.uber.org/zap"
16- "google.golang.org/grpc/metadata"
17- "google.golang.org/protobuf/types/known/emptypb"
1812)
1913
2014type OpenApiHandler interface {
@@ -23,128 +17,28 @@ type OpenApiHandler interface {
2317}
2418
2519type BreaseHandler struct {
26- db storage.Database
27- logger * zap.Logger
28- assembler * code.Assembler
29- compiler * code.Compiler
30- token auth.Token
31- OpenApi OpenApiHandler
20+ db storage.Database
21+ logger * zap.Logger
22+ assembler * code.Assembler
23+ compiler * code.Compiler
24+ token auth.Token
25+ jsonSchemaCompiler * jsonschema.Compiler
26+ cache cache.Cache
3227}
3328
3429func NewHandler (db storage.Database , c cache.Cache , logger * zap.Logger ) * BreaseHandler {
3530 if db == nil {
3631 panic ("database cannot be nil" )
3732 }
3833 bh := & BreaseHandler {
39- db : db ,
40- logger : logger ,
41- assembler : code .NewAssembler (logger , c ),
42- compiler : code .NewCompiler (logger ),
43- token : auth .NewToken (logger ),
34+ db : db ,
35+ logger : logger ,
36+ assembler : code .NewAssembler (logger , c ),
37+ compiler : code .NewCompiler (logger ),
38+ token : auth .NewToken (logger ),
39+ jsonSchemaCompiler : jsonschema .NewCompiler (),
40+ cache : c ,
4441 }
4542
46- bh .OpenApi = & openApiHandler {handler : bh }
47-
4843 return bh
4944}
50-
51- type openApiHandler struct {
52- handler * BreaseHandler
53- }
54-
55- func (o * openApiHandler ) GetToken (ctx context.Context , empty * emptypb.Empty ) (* authv1.TokenPair , error ) {
56- ctx = o .forwardMetadata (ctx )
57- r , err := o .handler .GetToken (ctx , connect .NewRequest (empty ))
58- if err != nil {
59- return nil , err
60- }
61- return r .Msg , nil
62- }
63-
64- func (o * openApiHandler ) RefreshToken (ctx context.Context , request * authv1.RefreshTokenRequest ) (* authv1.TokenPair , error ) {
65- ctx = o .forwardMetadata (ctx )
66- r , err := o .handler .RefreshToken (ctx , connect .NewRequest (request ))
67- if err != nil {
68- return nil , err
69- }
70- return r .Msg , nil
71- }
72-
73- func (o * openApiHandler ) ListRules (ctx context.Context , request * contextv1.ListRulesRequest ) (* contextv1.ListRulesResponse , error ) {
74- ctx = o .forwardMetadata (ctx )
75- r , err := o .handler .ListRules (ctx , connect .NewRequest (request ))
76- if err != nil {
77- return nil , err
78- }
79- return r .Msg , nil
80- }
81-
82- func (o * openApiHandler ) GetRule (ctx context.Context , request * contextv1.GetRuleRequest ) (* rulev1.VersionedRule , error ) {
83- ctx = o .forwardMetadata (ctx )
84- r , err := o .handler .GetRule (ctx , connect .NewRequest (request ))
85- if err != nil {
86- return nil , err
87- }
88- return r .Msg , nil
89- }
90-
91- func (o * openApiHandler ) GetRuleVersions (ctx context.Context , request * contextv1.ListRuleVersionsRequest ) (* contextv1.ListRuleVersionsResponse , error ) {
92- ctx = o .forwardMetadata (ctx )
93- r , err := o .handler .GetRuleVersions (ctx , connect .NewRequest (request ))
94- if err != nil {
95- return nil , err
96- }
97- return r .Msg , nil
98- }
99-
100- func (o * openApiHandler ) CreateRule (ctx context.Context , request * contextv1.CreateRuleRequest ) (* rulev1.VersionedRule , error ) {
101- ctx = o .forwardMetadata (ctx )
102- r , err := o .handler .CreateRule (ctx , connect .NewRequest (request ))
103- if err != nil {
104- return nil , err
105- }
106- return r .Msg , nil
107- }
108-
109- func (o * openApiHandler ) UpdateRule (ctx context.Context , request * contextv1.UpdateRuleRequest ) (* rulev1.VersionedRule , error ) {
110- ctx = o .forwardMetadata (ctx )
111- r , err := o .handler .UpdateRule (ctx , connect .NewRequest (request ))
112- if err != nil {
113- return nil , err
114- }
115- return r .Msg , nil
116- }
117-
118- func (o * openApiHandler ) DeleteRule (ctx context.Context , request * contextv1.DeleteRuleRequest ) (* emptypb.Empty , error ) {
119- ctx = o .forwardMetadata (ctx )
120- r , err := o .handler .DeleteRule (ctx , connect .NewRequest (request ))
121- if err != nil {
122- return nil , err
123- }
124- return r .Msg , nil
125- }
126-
127- func (o * openApiHandler ) Evaluate (ctx context.Context , request * contextv1.EvaluateRequest ) (* contextv1.EvaluateResponse , error ) {
128- ctx = o .forwardMetadata (ctx )
129- r , err := o .handler .Evaluate (ctx , connect .NewRequest (request ))
130- if err != nil {
131- return nil , err
132- }
133- return r .Msg , nil
134- }
135-
136- func (o * openApiHandler ) forwardMetadata (ctx context.Context ) context.Context {
137- md , ok := metadata .FromIncomingContext (ctx )
138- if ! ok {
139- return ctx
140- }
141-
142- if orgIds := md .Get (auth .ContextOrgKey ); len (orgIds ) > 0 {
143- ctx = context .WithValue (ctx , auth .ContextOrgKey , orgIds [0 ])
144- }
145- if userIds := md .Get (auth .ContextUserIDKey ); len (userIds ) > 0 {
146- ctx = context .WithValue (ctx , auth .ContextUserIDKey , userIds [0 ])
147- }
148-
149- return ctx
150- }
0 commit comments