fully Decentralized functionnal OC-PEER
This commit is contained in:
@@ -2,9 +2,11 @@ package infrastructure
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"slices"
|
||||
|
||||
oclib "cloud.o-forge.io/core/oc-lib"
|
||||
"cloud.o-forge.io/core/oc-lib/config"
|
||||
"cloud.o-forge.io/core/oc-lib/models/peer"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
)
|
||||
@@ -20,6 +22,7 @@ func EmitNATS(user string, message tools.PropalgationMessage) {
|
||||
if message.Action == tools.PB_SEARCH {
|
||||
SearchStream[user] = make(chan *peer.Peer, 128)
|
||||
}
|
||||
fmt.Println("qkjbndkqkjdnqksm")
|
||||
tools.NewNATSCaller().SetNATSPub(tools.PROPALGATION_EVENT, tools.NATSResponse{
|
||||
FromApp: "oc-peer",
|
||||
Datatype: -1,
|
||||
@@ -48,6 +51,43 @@ func EmitNATS(user string, message tools.PropalgationMessage) {
|
||||
|
||||
func ListenNATS() {
|
||||
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
|
||||
tools.CREATE_RESOURCE: func(resp tools.NATSResponse) {
|
||||
if resp.FromApp == config.GetAppName() || resp.Datatype != tools.PEER {
|
||||
return
|
||||
}
|
||||
m := map[string]interface{}{
|
||||
"verify": true,
|
||||
"relation": peer.PENDING_PARTNER,
|
||||
}
|
||||
p := &peer.Peer{}
|
||||
if err := json.Unmarshal(resp.Payload, &p); err == nil {
|
||||
/*if err := verify(resp.Payload); err != nil {
|
||||
return // don't trust anyone... only friends and foes are privilege
|
||||
}*/
|
||||
fmt.Println("CREATE_RESOURCE", p.GetID())
|
||||
|
||||
access := oclib.NewRequestAdmin(oclib.LibDataEnum(resp.Datatype), nil)
|
||||
if data := access.LoadOne(p.GetID()); data.Data != nil {
|
||||
if !data.ToPeer().Verify && data.ToPeer().Relation == peer.PENDING_PARTNER {
|
||||
access.UpdateOne(map[string]interface{}{
|
||||
"verify": false,
|
||||
"relation": peer.PARTNER,
|
||||
}, p.GetID())
|
||||
} else if data.ToPeer().Relation != peer.BLACKLIST && data.ToPeer().Relation != peer.SELF {
|
||||
if p.Relation == peer.NONE {
|
||||
access.UpdateOne(map[string]interface{}{
|
||||
"relation": peer.NONE,
|
||||
}, p.GetID())
|
||||
} else {
|
||||
access.UpdateOne(m, p.GetID())
|
||||
}
|
||||
}
|
||||
} else if err := json.Unmarshal(resp.Payload, &m); err == nil {
|
||||
access.StoreOne(m)
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
tools.SEARCH_EVENT: func(resp tools.NATSResponse) {
|
||||
if !slices.Contains(ressourceCols, oclib.LibDataEnum(resp.Datatype)) {
|
||||
return
|
||||
@@ -55,6 +95,7 @@ func ListenNATS() {
|
||||
p := &peer.Peer{}
|
||||
err := json.Unmarshal(resp.Payload, p)
|
||||
if err == nil {
|
||||
fmt.Println("ADD in SEARCH STREAM")
|
||||
SearchStream[resp.User] <- p // TODO when do we update it in our catalog ?
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user