add groups
This commit is contained in:
@@ -19,7 +19,8 @@ type Event struct {
|
|||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
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"`
|
||||||
|
|||||||
@@ -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"]),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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}},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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}},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ type StreamService struct {
|
|||||||
Key pp.ID
|
Key pp.ID
|
||||||
Host host.Host
|
Host host.Host
|
||||||
Node common.DiscoveryPeer
|
Node common.DiscoveryPeer
|
||||||
Streams common.ProtocolStream
|
Streams common.ProtocolStream
|
||||||
maxNodesConn int
|
maxNodesConn int
|
||||||
Mu sync.RWMutex
|
Mu sync.RWMutex
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ func InitStream(ctx context.Context, h host.Host, key pp.ID, maxNode int, node c
|
|||||||
Key: key,
|
Key: key,
|
||||||
Node: node,
|
Node: node,
|
||||||
Host: h,
|
Host: h,
|
||||||
Streams: common.ProtocolStream{},
|
Streams: common.ProtocolStream{},
|
||||||
maxNodesConn: maxNode,
|
maxNodesConn: maxNode,
|
||||||
}
|
}
|
||||||
for proto := range protocols {
|
for proto := range protocols {
|
||||||
@@ -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}},
|
||||||
},
|
},
|
||||||
}}},
|
}}},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user