github.com/machinefi/w3bstream@v1.6.5-rc9.0.20240426031326-b8c7c4876e72/cmd/srv-applet-mgr/apis/event/pos.go (about) 1 package event 2 3 import ( 4 "context" 5 "encoding/json" 6 7 "github.com/machinefi/w3bstream/cmd/srv-applet-mgr/apis/middleware" 8 "github.com/machinefi/w3bstream/pkg/depends/kit/httptransport/httpx" 9 "github.com/machinefi/w3bstream/pkg/depends/kit/logr" 10 "github.com/machinefi/w3bstream/pkg/enums" 11 "github.com/machinefi/w3bstream/pkg/errors/status" 12 "github.com/machinefi/w3bstream/pkg/modules/event" 13 "github.com/machinefi/w3bstream/pkg/modules/project" 14 "github.com/machinefi/w3bstream/pkg/types" 15 ) 16 17 type HandleEvent struct { 18 httpx.MethodPost 19 event.EventReq 20 } 21 22 func (r *HandleEvent) Path() string { 23 return "/:channel" 24 } 25 26 func (r *HandleEvent) Output(ctx context.Context) (interface{}, error) { 27 ctx, l := logr.Start(ctx, "api.HandleEvent") 28 defer l.End() 29 30 r.EventReq.SetDefault() 31 32 prj, err := project.GetByName(ctx, r.Channel) 33 if err != nil { 34 return nil, err 35 } 36 ctx = types.WithProject(ctx, prj) 37 38 if r.IsDataPush() { 39 l.Info("event push") 40 // require account auth 41 ca, ok := middleware.CurrentAccountFromContext(ctx) 42 if !ok { 43 return nil, status.InvalidDataPushShouldAccount 44 } 45 ctx = ca.WithAccount(ctx) 46 if ca.Role != enums.ACCOUNT_ROLE__ADMIN && ca.AccountID != prj.AccountID { 47 return nil, status.NoProjectPermission.StatusErr(). 48 WithDesc("data push request should have account permission") 49 } 50 reqs := event.DataPushReqs{} 51 err = json.Unmarshal(r.Payload.Bytes(), &reqs) 52 if err != nil { 53 return nil, status.InvalidDataPushPayload.StatusErr().WithDesc(err.Error()) 54 } 55 reqs.SetDefault() 56 return event.BatchCreate(ctx, reqs) 57 } 58 59 // require publisher auth 60 l.Info("event request") 61 pub, ok := middleware.MaybePublisher(ctx) 62 if !ok { 63 return nil, status.InvalidDataPushShouldPublisher 64 } 65 if pub.ProjectID != prj.ProjectID { 66 return nil, status.NoProjectPermission.StatusErr(). 67 WithDesc("publisher request should have project permission") 68 } 69 ctx = types.WithPublisher(ctx, pub.Publisher) 70 return event.Create(ctx, &r.EventReq) 71 }