add groups

This commit is contained in:
mr
2026-03-12 08:57:06 +01:00
parent 780a0c530d
commit 80117ee36f
6 changed files with 27 additions and 27 deletions

View File

@@ -20,6 +20,7 @@ type Event struct {
From string `json:"from"` // peerID From string `json:"from"` // peerID
User string User string
Groups []string
DataType int64 `json:"datatype"` DataType int64 `json:"datatype"`
Timestamp int64 `json:"ts"` Timestamp int64 `json:"ts"`

View File

@@ -117,7 +117,7 @@ func ListenNATS(n *Node) {
if err := json.Unmarshal(resp.Payload, &m); err == nil { if err := json.Unmarshal(resp.Payload, &m); err == nil {
peers, _ := n.GetPeerRecord(context.Background(), m.PeerID) peers, _ := n.GetPeerRecord(context.Background(), m.PeerID)
for _, p := range peers { for _, p := range peers {
n.StreamService.PublishCommon(&resp.Datatype, resp.User, n.StreamService.PublishCommon(&resp.Datatype, resp.User, resp.Groups,
p.PeerID, proto, resp.Payload) p.PeerID, proto, resp.Payload)
} }
} }
@@ -126,7 +126,7 @@ func ListenNATS(n *Node) {
fmt.Println(n.StreamService.ToPartnerPublishEvent( fmt.Println(n.StreamService.ToPartnerPublishEvent(
context.Background(), context.Background(),
propalgation.Action, propalgation.Action,
dt, resp.User, dt, resp.User, resp.Groups,
propalgation.Payload, propalgation.Payload,
)) ))
case tools.PB_CONSIDERS: case tools.PB_CONSIDERS:
@@ -137,7 +137,7 @@ func ListenNATS(n *Node) {
for _, p := range m.PeerIDs { for _, p := range m.PeerIDs {
peers, _ := n.GetPeerRecord(context.Background(), p) peers, _ := n.GetPeerRecord(context.Background(), p)
for _, pp := range peers { for _, pp := range peers {
n.StreamService.PublishCommon(&resp.Datatype, resp.User, n.StreamService.PublishCommon(&resp.Datatype, resp.User, resp.Groups,
pp.PeerID, stream.ProtocolConsidersResource, resp.Payload) pp.PeerID, stream.ProtocolConsidersResource, resp.Payload)
} }
} }
@@ -150,7 +150,7 @@ func ListenNATS(n *Node) {
if err := json.Unmarshal(propalgation.Payload, &m); err == nil && m.OriginID != "" { if err := json.Unmarshal(propalgation.Payload, &m); err == nil && m.OriginID != "" {
peers, _ := n.GetPeerRecord(context.Background(), m.OriginID) peers, _ := n.GetPeerRecord(context.Background(), m.OriginID)
for _, p := range peers { for _, p := range peers {
n.StreamService.PublishCommon(nil, resp.User, n.StreamService.PublishCommon(nil, resp.User, resp.Groups,
p.PeerID, stream.ProtocolConsidersResource, propalgation.Payload) p.PeerID, stream.ProtocolConsidersResource, propalgation.Payload)
} }
} }
@@ -166,11 +166,11 @@ func ListenNATS(n *Node) {
n.StreamService.Mu.Lock() n.StreamService.Mu.Lock()
if n.StreamService.Streams[stream.ProtocolSendPlanner] != nil { if n.StreamService.Streams[stream.ProtocolSendPlanner] != nil {
for pid := range n.StreamService.Streams[stream.ProtocolSendPlanner] { // send Planner can be long lived - it's a conn for pid := range n.StreamService.Streams[stream.ProtocolSendPlanner] { // send Planner can be long lived - it's a conn
n.StreamService.PublishCommon(nil, resp.User, pid.String(), stream.ProtocolSendPlanner, b) n.StreamService.PublishCommon(nil, resp.User, resp.Groups, pid.String(), stream.ProtocolSendPlanner, b)
} }
} }
} else { } else {
n.StreamService.PublishCommon(nil, resp.User, fmt.Sprintf("%v", m["peer_id"]), stream.ProtocolSendPlanner, b) n.StreamService.PublishCommon(nil, resp.User, resp.Groups, fmt.Sprintf("%v", m["peer_id"]), stream.ProtocolSendPlanner, b)
} }
n.StreamService.Mu.Unlock() n.StreamService.Mu.Unlock()
} }
@@ -211,7 +211,7 @@ func ListenNATS(n *Node) {
context.Background(), context.Background(),
dt, dt,
fmt.Sprintf("%v", m["type"]), fmt.Sprintf("%v", m["type"]),
resp.User, resp.User, resp.Groups,
fmt.Sprintf("%v", m["search"]), fmt.Sprintf("%v", m["search"]),
) )
} }

View File

@@ -14,16 +14,16 @@ import (
) )
func (ps *PubSubService) SearchPublishEvent( func (ps *PubSubService) SearchPublishEvent(
ctx context.Context, dt *tools.DataType, typ string, user string, search string) error { ctx context.Context, dt *tools.DataType, typ string, user string, groups []string, search string) error {
b, err := json.Marshal(map[string]string{"search": search}) b, err := json.Marshal(map[string]string{"search": search})
if err != nil { if err != nil {
return err return err
} }
switch typ { switch typ {
case "known": // define Search Strategy case "known": // define Search Strategy
return ps.StreamService.PublishesCommon(dt, user, nil, b, stream.ProtocolSearchResource) //if partners focus only them*/ return ps.StreamService.PublishesCommon(dt, user, groups, nil, b, stream.ProtocolSearchResource) //if partners focus only them*/
case "partner": // define Search Strategy case "partner": // define Search Strategy
return ps.StreamService.PublishesCommon(dt, user, &dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided return ps.StreamService.PublishesCommon(dt, user, groups, &dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided
And: map[string][]dbs.Filter{ And: map[string][]dbs.Filter{
"relation": {{Operator: dbs.EQUAL.String(), Value: peer.PARTNER}}, "relation": {{Operator: dbs.EQUAL.String(), Value: peer.PARTNER}},
}, },

View File

@@ -80,7 +80,7 @@ func (abs *StreamService) verifyResponse(event *common.Event) error { //
} }
} }
if b, err := json.Marshal(verify); err == nil { if b, err := json.Marshal(verify); err == nil {
abs.PublishCommon(nil, "", event.From, ProtocolVerifyResource, b) abs.PublishCommon(nil, event.User, event.Groups, event.From, ProtocolVerifyResource, b)
} }
return nil return nil
} }
@@ -89,7 +89,7 @@ func (abs *StreamService) sendPlanner(event *common.Event) error { //
if len(event.Payload) == 0 { if len(event.Payload) == 0 {
if plan, err := planner.GenerateShallow(&tools.APIRequest{Admin: true}); err == nil { if plan, err := planner.GenerateShallow(&tools.APIRequest{Admin: true}); err == nil {
if b, err := json.Marshal(plan); err == nil { if b, err := json.Marshal(plan); err == nil {
abs.PublishCommon(nil, event.User, event.From, ProtocolSendPlanner, b) abs.PublishCommon(nil, event.User, event.Groups, event.From, ProtocolSendPlanner, b)
} else { } else {
return err return err
} }
@@ -214,11 +214,11 @@ func (abs *StreamService) SendResponse(p *peer.Peer, event *common.Event, search
for _, dt := range dts { for _, dt := range dts {
access := oclib.NewRequestAdmin(oclib.LibDataEnum(dt), nil) access := oclib.NewRequestAdmin(oclib.LibDataEnum(dt), nil)
peerID := p.GetID() peerID := p.GetID()
searched := access.Search(abs.FilterPeer(self.GetID(), search), "", false) searched := access.Search(abs.FilterPeer(self.GetID(), event.Groups, search), "", false)
fmt.Println("SEND SEARCH_EVENT", self.GetID(), dt, len(searched.Data), peerID) fmt.Println("SEND SEARCH_EVENT", self.GetID(), dt, len(searched.Data), peerID)
for _, ss := range searched.Data { for _, ss := range searched.Data {
if j, err := json.Marshal(ss); err == nil { if j, err := json.Marshal(ss); err == nil {
_, err := abs.PublishCommon(&dt, event.User, p.PeerID, ProtocolSearchResource, j) _, err := abs.PublishCommon(&dt, event.User, event.Groups, p.PeerID, ProtocolSearchResource, j)
fmt.Println("Publish ERR", err) fmt.Println("Publish ERR", err)
} }
} }

View File

@@ -15,7 +15,7 @@ import (
"github.com/libp2p/go-libp2p/core/protocol" "github.com/libp2p/go-libp2p/core/protocol"
) )
func (ps *StreamService) PublishesCommon(dt *tools.DataType, user string, filter *dbs.Filters, resource []byte, protos ...protocol.ID) error { func (ps *StreamService) PublishesCommon(dt *tools.DataType, user string, groups []string, filter *dbs.Filters, resource []byte, protos ...protocol.ID) error {
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil) access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
var p oclib.LibDataShallow var p oclib.LibDataShallow
if filter == nil { if filter == nil {
@@ -25,7 +25,7 @@ func (ps *StreamService) PublishesCommon(dt *tools.DataType, user string, filter
} }
for _, pes := range p.Data { for _, pes := range p.Data {
for _, proto := range protos { for _, proto := range protos {
if _, err := ps.PublishCommon(dt, user, pes.(*peer.Peer).PeerID, proto, resource); err != nil { if _, err := ps.PublishCommon(dt, user, groups, pes.(*peer.Peer).PeerID, proto, resource); err != nil {
return err return err
} }
} }
@@ -33,7 +33,7 @@ func (ps *StreamService) PublishesCommon(dt *tools.DataType, user string, filter
return nil return nil
} }
func (ps *StreamService) PublishCommon(dt *tools.DataType, user string, toPeerID string, proto protocol.ID, resource []byte) (*common.Stream, error) { func (ps *StreamService) PublishCommon(dt *tools.DataType, user string, groups []string, toPeerID string, proto protocol.ID, resource []byte) (*common.Stream, error) {
fmt.Println("PublishCommon") fmt.Println("PublishCommon")
if toPeerID == ps.Key.String() { if toPeerID == ps.Key.String() {
fmt.Println("Can't send to ourself !") fmt.Println("Can't send to ourself !")
@@ -64,7 +64,7 @@ func (ps *StreamService) PublishCommon(dt *tools.DataType, user string, toPeerID
} }
func (ps *StreamService) ToPartnerPublishEvent( func (ps *StreamService) ToPartnerPublishEvent(
ctx context.Context, action tools.PubSubAction, dt *tools.DataType, user string, payload []byte) error { ctx context.Context, action tools.PubSubAction, dt *tools.DataType, user string, groups []string, payload []byte) error {
if *dt == tools.PEER { if *dt == tools.PEER {
var p peer.Peer var p peer.Peer
if err := json.Unmarshal(payload, &p); err != nil { if err := json.Unmarshal(payload, &p); err != nil {
@@ -82,7 +82,7 @@ func (ps *StreamService) ToPartnerPublishEvent(
pe.Relation = p.Relation pe.Relation = p.Relation
pe.Verify = false pe.Verify = false
if b2, err := json.Marshal(pe); err == nil { if b2, err := json.Marshal(pe); err == nil {
if _, err := ps.PublishCommon(dt, user, p.PeerID, ProtocolUpdateResource, b2); err != nil { if _, err := ps.PublishCommon(dt, user, groups, p.PeerID, ProtocolUpdateResource, b2); err != nil {
return err return err
} }
@@ -102,7 +102,7 @@ func (ps *StreamService) ToPartnerPublishEvent(
case tools.PB_UPDATE: case tools.PB_UPDATE:
proto = ProtocolUpdateResource proto = ProtocolUpdateResource
} }
ps.PublishesCommon(dt, user, &dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided ps.PublishesCommon(dt, user, groups, &dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided
And: map[string][]dbs.Filter{ And: map[string][]dbs.Filter{
"relation": {{Operator: dbs.EQUAL.String(), Value: peer.PARTNER}}, "relation": {{Operator: dbs.EQUAL.String(), Value: peer.PARTNER}},
}, },

View File

@@ -101,7 +101,6 @@ func (s *StreamService) HandleResponse(stream network.Stream) {
stream.Protocol(), protocols[stream.Protocol()]) stream.Protocol(), protocols[stream.Protocol()])
} }
func (s *StreamService) connectToPartners() error { func (s *StreamService) connectToPartners() error {
logger := oclib.GetLogger() logger := oclib.GetLogger()
// Register handlers for partner resource protocols (create/update/delete). // Register handlers for partner resource protocols (create/update/delete).
@@ -123,7 +122,6 @@ func (s *StreamService) connectToPartners() error {
return nil return nil
} }
func (s *StreamService) searchPeer(search string) ([]*peer.Peer, error) { func (s *StreamService) searchPeer(search string) ([]*peer.Peer, error) {
ps := []*peer.Peer{} ps := []*peer.Peer{}
if conf.GetConfig().PeerIDS != "" { if conf.GetConfig().PeerIDS != "" {
@@ -219,11 +217,12 @@ func (ps *StreamService) readLoop(s *common.Stream, id pp.ID, proto protocol.ID,
} }
} }
func (abs *StreamService) FilterPeer(peerID string, search string) *dbs.Filters { func (abs *StreamService) FilterPeer(peerID string, groups []string, search string) *dbs.Filters {
p, err := oclib.GetMySelf() p, err := oclib.GetMySelf()
if err != nil { if err != nil {
return nil return nil
} }
groups = append(groups, "*")
filter := map[string][]dbs.Filter{ filter := map[string][]dbs.Filter{
"abstractinstanciatedresource.abstractresource.abstractobject.creator_id": {{Operator: dbs.EQUAL.String(), Value: p.GetID()}}, // is my resource... "abstractinstanciatedresource.abstractresource.abstractobject.creator_id": {{Operator: dbs.EQUAL.String(), Value: p.GetID()}}, // is my resource...
"": {{Operator: dbs.OR.String(), Value: &dbs.Filters{ "": {{Operator: dbs.OR.String(), Value: &dbs.Filters{
@@ -233,7 +232,7 @@ func (abs *StreamService) FilterPeer(peerID string, search string) *dbs.Filters
And: map[string][]dbs.Filter{ And: map[string][]dbs.Filter{
"resourceinstance.partnerships": {{Operator: dbs.ELEMMATCH.String(), Value: &dbs.Filters{ "resourceinstance.partnerships": {{Operator: dbs.ELEMMATCH.String(), Value: &dbs.Filters{
And: map[string][]dbs.Filter{ And: map[string][]dbs.Filter{
"resourcepartnership.peer_groups." + peerID: {{Operator: dbs.EXISTS.String(), Value: true}}, "resourcepartnership.peer_groups." + peerID: {{Operator: dbs.IN.String(), Value: groups}},
}, },
}}}, }}},
}, },