diff --git a/controllers/peer.go b/controllers/peer.go
index 3705cfa..c640ff6 100644
--- a/controllers/peer.go
+++ b/controllers/peer.go
@@ -3,16 +3,15 @@ package controllers
import (
ctx "context"
"encoding/json"
+ "fmt"
"net/http"
"oc-peer/infrastructure"
oclib "cloud.o-forge.io/core/oc-lib"
- "cloud.o-forge.io/core/oc-lib/config"
"cloud.o-forge.io/core/oc-lib/dbs"
"cloud.o-forge.io/core/oc-lib/models/peer"
"cloud.o-forge.io/core/oc-lib/tools"
beego "github.com/beego/beego/v2/server/web"
- "github.com/beego/beego/v2/server/web/context"
"golang.org/x/net/websocket"
)
@@ -69,55 +68,56 @@ func (o *PeerController) Get() {
o.ServeJSON()
}
-// @Title Link
+// @Title Valid
// @Description find peer by peerid
// @Param id path string true "the peer id you want to get"
// @Success 200 {peer} models.peer
-// @router /peer/:from/link/:relation [get]
-func (o *PeerController) Link() {
- _, peerID, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
- id := o.Ctx.Input.Param(":from")
- if ok, _ := oclib.IsMySelf(peerID); ok {
+// @router /peer/:id/valid [get]
+func (o *PeerController) Valid() {
+ user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ id := o.Ctx.Input.Param(":id")
+ /*if ok, _ := oclib.IsMySelf(peerID); !ok {
o.Data["json"] = map[string]interface{}{
"data": nil,
"code": 400,
- "error": "can't link relation by ourself",
+ "error": "can't validate a link relation",
+ }
+ o.ServeJSON()
+ return
+ }*/
+ if ok, _ := oclib.IsMySelf(id); ok {
+ o.Data["json"] = map[string]interface{}{
+ "data": nil,
+ "code": 400,
+ "error": "can't validate a link relation for ourself",
}
o.ServeJSON()
return
}
- if ok, _ := oclib.IsMySelf(id); !ok {
- o.Data["json"] = map[string]interface{}{
- "data": nil,
- "code": 400,
- "error": "can't link relation to an other peer",
- }
- o.ServeJSON()
- return
- }
- relation := o.Ctx.Input.Param(":relation") // as partner, blacklist, unknown
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
l := req.LoadOne(id)
- if p := l.ToPeer(); p != nil {
- if peer.GetRelationPath(relation) != -1 {
- o.Data["json"] = req.UpdateOne(map[string]interface{}{
- "relation": peer.GetRelationPath(relation),
- "verify": !(p.Relation == peer.PENDING_PARTNER || relation == peer.NONE.Path()),
- }, p.GetID())
- return
- }
- o.Data["json"] = map[string]interface{}{
- "data": nil,
- "code": 400,
- "error": "relation unavailable",
+ if l.Data != nil && l.ToPeer().Verify && (l.ToPeer().Relation == peer.PARTNER || l.ToPeer().Relation == peer.PENDING_PARTNER) {
+ data := req.UpdateOne(map[string]interface{}{
+ "verify": false,
+ "relation": peer.PARTNER,
+ }, l.ToPeer().GetID())
+ fmt.Println(l.Data, data.Data)
+ if data.Data != nil {
+ b, _ := json.Marshal(data.Data)
+ go infrastructure.EmitNATS(user, tools.PropalgationMessage{
+ DataType: tools.PEER.EnumIndex(),
+ Action: tools.PB_CREATE,
+ Payload: b,
+ })
}
+ o.Data["json"] = data
o.ServeJSON()
return
}
o.Data["json"] = map[string]interface{}{
"data": nil,
"code": 404,
- "error": "peer not found",
+ "error": "peer to verify not found",
}
o.ServeJSON()
}
@@ -128,11 +128,11 @@ func (o *PeerController) Link() {
// @Success 200 {peer} models.peer
// @router /peer/:id/unknown [post]
func (o *PeerController) Unknown() {
- //user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
id := o.Ctx.Input.Param(":id")
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
data := req.LoadOne(id)
- o.changeRelation(data.ToPeer(), peer.NONE, req)
+ o.changeRelation(data.ToPeer(), user, peer.NONE, req)
}
// @Title Partner
@@ -141,11 +141,11 @@ func (o *PeerController) Unknown() {
// @Success 200 {peer} models.peer
// @router /peer/:id/partner [post]
func (o *PeerController) Partner() {
- // user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
id := o.Ctx.Input.Param(":id")
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
data := req.LoadOne(id)
- o.changeRelation(data.ToPeer(), peer.PARTNER, req)
+ o.changeRelation(data.ToPeer(), user, peer.PARTNER, req)
}
// @Title Blacklist
@@ -154,24 +154,24 @@ func (o *PeerController) Partner() {
// @Success 200 {peer} models.peer
// @router /peer/:id/blacklist [post]
func (o *PeerController) Blacklist() {
- // user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
+ user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
id := o.Ctx.Input.Param(":id")
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
data := req.LoadOne(id)
- o.changeRelation(data.ToPeer(), peer.BLACKLIST, req)
+ o.changeRelation(data.ToPeer(), user, peer.BLACKLIST, req)
}
// used from : peer ask, or response, only from peer origin is authorized to change...
-func (o *PeerController) changeRelation(dest *peer.Peer, relation peer.PeerRelation, request *oclib.Request) {
- if ok, _ := oclib.IsMySelf(request.PeerID); !ok {
+func (o *PeerController) changeRelation(dest *peer.Peer, user string, relation peer.PeerRelation, request *oclib.Request) {
+ /*if ok, _ := oclib.IsMySelf(request.PeerID); !ok {
o.Data["json"] = map[string]interface{}{
"data": nil,
"code": 400,
- "error": "can't change relation",
+ "error": "can't change relation if not ourself",
}
o.ServeJSON()
return
- }
+ }*/
if ok, _ := oclib.IsMySelf(dest.GetID()); ok {
o.Data["json"] = map[string]interface{}{
"data": nil,
@@ -190,15 +190,6 @@ func (o *PeerController) changeRelation(dest *peer.Peer, relation peer.PeerRelat
case peer.BLACKLIST:
relation = peer.NONE
}
- if _, err := tools.NewHTTPCaller(map[tools.DataType]map[tools.METHOD]string{}).CallGet(
- dest.APIUrl, "/"+request.PeerID+"/link/"+relation.Path()); err != nil {
- o.Data["json"] = map[string]interface{}{
- "data": nil,
- "code": 400,
- "error": err.Error(),
- }
- o.ServeJSON()
- }
}
if dest.Verify && relation == peer.PENDING_PARTNER {
relation = peer.PARTNER
@@ -207,17 +198,15 @@ func (o *PeerController) changeRelation(dest *peer.Peer, relation peer.PeerRelat
"relation": relation,
}, dest.GetID())
- if data.Err != "" && data.Data != nil {
+ fmt.Println(data.Err, data.Data)
+ if data.Err == "" && data.Data != nil {
b, _ := json.Marshal(data.Data)
- go tools.NewNATSCaller().SetNATSPub(tools.CREATE_RESOURCE, tools.NATSResponse{
- FromApp: config.GetAppName(),
- Datatype: tools.DataType(tools.PEER),
- Method: int(tools.CREATE_RESOURCE),
- SearchAttr: "peer_id",
- Payload: b,
+ go infrastructure.EmitNATS(user, tools.PropalgationMessage{
+ DataType: tools.PEER.EnumIndex(),
+ Action: tools.PB_CREATE,
+ Payload: b,
})
}
-
o.Data["json"] = data
o.ServeJSON()
return
@@ -246,40 +235,11 @@ func (o *PeerController) DeleteState() {
o.ServeJSON()
}
-// @Title Search Decentralized
-// @Description find workflow by key word
-// @Param search path string true "the search you want to get"
-// @Param is_draft query string false "draft wished"
-// @Success 200 {workflow} models.workflow
-// @router /decentralized/search/:search[get]
-func (o *PeerController) SearchDecentralized() {
- user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request)
- search := o.Ctx.Input.Param(":search")
- b, err := json.Marshal(map[string]string{
- "search": search,
- })
- infrastructure.EmitNATS(user, tools.PropalgationMessage{
- Action: tools.PB_SEARCH,
- DataType: tools.PEER.EnumIndex(),
- Payload: b,
- })
- if err != nil {
- o.Data["json"] = map[string]interface{}{
- "data": nil,
- "code": 400,
- "error": err,
- }
- o.ServeJSON()
- return
- }
- Websocket(o.Ctx.Request.Context(), user, o.Ctx.ResponseWriter, o.Ctx.Request)
-}
-
-func Websocket(ctx ctx.Context, user string, r *context.Response, w *http.Request) {
+func Websocket(ctx ctx.Context, user string, r http.ResponseWriter, w *http.Request) {
websocket.Handler(func(ws *websocket.Conn) {
defer ws.Close()
- for {
- if msg, ok := <-infrastructure.SearchStream[user]; !ok || websocket.Message.Send(ws, msg) != nil {
+ for msg := range infrastructure.SearchStream[user] {
+ if websocket.JSON.Send(ws, msg) != nil {
return
}
}
diff --git a/go.mod b/go.mod
index 8618b68..3f1b88b 100644
--- a/go.mod
+++ b/go.mod
@@ -1,19 +1,46 @@
module oc-peer
-go 1.24.6
-
-toolchain go1.24.11
+go 1.25.0
require (
- cloud.o-forge.io/core/oc-lib v0.0.0-20260223145640-e039fa56b64c
+ cloud.o-forge.io/core/oc-lib v0.0.0-20260302152414-542b0b73aba5
github.com/beego/beego/v2 v2.3.8
github.com/smartystreets/goconvey v1.7.2
)
require (
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect
+ github.com/emicklei/go-restful/v3 v3.12.2 // indirect
+ github.com/fxamacker/cbor/v2 v2.9.0 // indirect
+ github.com/go-logr/logr v1.4.3 // indirect
+ github.com/go-openapi/jsonpointer v0.21.0 // indirect
+ github.com/go-openapi/jsonreference v0.20.2 // indirect
+ github.com/go-openapi/swag v0.23.0 // indirect
+ github.com/google/gnostic-models v0.7.0 // indirect
+ github.com/josharian/intern v1.0.0 // indirect
+ github.com/json-iterator/go v1.1.12 // indirect
github.com/libp2p/go-libp2p/core v0.43.0-rc2 // indirect
+ github.com/mailru/easyjson v0.7.7 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
+ github.com/x448/float16 v0.8.4 // indirect
+ go.yaml.in/yaml/v3 v3.0.4 // indirect
+ golang.org/x/oauth2 v0.30.0 // indirect
+ golang.org/x/term v0.37.0 // indirect
+ golang.org/x/time v0.9.0 // indirect
+ gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
+ gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
+ k8s.io/api v0.35.1 // indirect
+ k8s.io/apimachinery v0.35.1 // indirect
+ k8s.io/client-go v0.35.1 // indirect
+ k8s.io/klog/v2 v2.130.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
+ k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
+ sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
+ sigs.k8s.io/randfill v1.0.0 // indirect
+ sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
+ sigs.k8s.io/yaml v1.6.0 // indirect
)
require (
diff --git a/go.sum b/go.sum
index 4303b26..80647a5 100644
--- a/go.sum
+++ b/go.sum
@@ -24,6 +24,10 @@ cloud.o-forge.io/core/oc-lib v0.0.0-20260218132556-0b41e2505e2f h1:OFuJhi23D/UNw
cloud.o-forge.io/core/oc-lib v0.0.0-20260218132556-0b41e2505e2f/go.mod h1:jmyBwmsac/4V7XPL347qawF60JsBCDmNAMfn/ySXKYo=
cloud.o-forge.io/core/oc-lib v0.0.0-20260223145640-e039fa56b64c h1:3PRvQdSSGjmw+Txkf0zWs3F+V9URq22zQCLR3o7bNBY=
cloud.o-forge.io/core/oc-lib v0.0.0-20260223145640-e039fa56b64c/go.mod h1:jmyBwmsac/4V7XPL347qawF60JsBCDmNAMfn/ySXKYo=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260302144605-44812309db51 h1:YTZg78dWfigoV6/IT4iBtqGXP+wwkTvyp56UzYWmXfk=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260302144605-44812309db51/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260302152414-542b0b73aba5 h1:h+Fkyj6cfwAirc0QGCBEkZSSrgcyThXswg7ytOLm948=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260302152414-542b0b73aba5/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -69,8 +73,12 @@ github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
+github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
+github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/etcd-io/etcd v3.3.17+incompatible/go.mod h1:cdZ77EstHBwVtD6iTgzgvogwcjo9m4iOqoijouPJ4bs=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
+github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0=
github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
@@ -78,6 +86,16 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
+github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
+github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
+github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
+github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
+github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
+github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
+github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
+github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -104,6 +122,8 @@ github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8l
github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
+github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
+github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -122,9 +142,13 @@ github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iP
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
@@ -133,6 +157,7 @@ github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYW
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -148,6 +173,8 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/libp2p/go-libp2p/core v0.43.0-rc2 h1:1X1aDJNWhMfodJ/ynbaGLkgnC8f+hfBIqQDrzxFZOqI=
github.com/libp2p/go-libp2p/core v0.43.0-rc2/go.mod h1:NYeJ9lvyBv9nbDk2IuGb8gFKEOkIv/W5YRIy1pAJB2Q=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
@@ -161,9 +188,13 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
+github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
@@ -231,14 +262,21 @@ github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3
github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
github.com/wendal/errors v0.0.0-20181209125328-7f31f4b264ec/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
+github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
+github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
@@ -255,6 +293,8 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
+go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
+go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -273,6 +313,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
+golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -304,12 +346,16 @@ golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
+golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -330,7 +376,11 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo=
+gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -339,5 +389,26 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+k8s.io/api v0.35.1 h1:0PO/1FhlK/EQNVK5+txc4FuhQibV25VLSdLMmGpDE/Q=
+k8s.io/api v0.35.1/go.mod h1:28uR9xlXWml9eT0uaGo6y71xK86JBELShLy4wR1XtxM=
+k8s.io/apimachinery v0.35.1 h1:yxO6gV555P1YV0SANtnTjXYfiivaTPvCTKX6w6qdDsU=
+k8s.io/apimachinery v0.35.1/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns=
+k8s.io/client-go v0.35.1 h1:+eSfZHwuo/I19PaSxqumjqZ9l5XiTEKbIaJ+j1wLcLM=
+k8s.io/client-go v0.35.1/go.mod h1:1p1KxDt3a0ruRfc/pG4qT/3oHmUj1AhSHEcxNSGg+OA=
+k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
+k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
+k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
+k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
+k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
+sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
+sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
+sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
+sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
+sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
+sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
diff --git a/infrastructure/nats.go b/infrastructure/nats.go
index d8b062c..d1d3de4 100644
--- a/infrastructure/nats.go
+++ b/infrastructure/nats.go
@@ -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 ?
}
},
diff --git a/main.go b/main.go
index feccdb5..254e8a8 100644
--- a/main.go
+++ b/main.go
@@ -5,7 +5,6 @@ import (
_ "oc-peer/routers"
oclib "cloud.o-forge.io/core/oc-lib"
- "cloud.o-forge.io/core/oc-lib/tools"
beego "github.com/beego/beego/v2/server/web"
)
@@ -13,7 +12,6 @@ const appname = "oc-peer"
func main() {
oclib.InitAPI(appname)
- go oclib.InitNATSDecentralizedEmitter(tools.PEER)
go infrastructure.ListenNATS()
beego.Run()
}
diff --git a/oc-peer b/oc-peer
index f66460f..fb53c92 100755
Binary files a/oc-peer and b/oc-peer differ
diff --git a/routers/commentsRouter.go b/routers/commentsRouter.go
index 1190997..f4baf26 100644
--- a/routers/commentsRouter.go
+++ b/routers/commentsRouter.go
@@ -16,15 +16,6 @@ func init() {
Filters: nil,
Params: nil})
- beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
- beego.ControllerComments{
- Method: "Link",
- Router: `/peer/:from/link/:relation`,
- AllowHTTPMethods: []string{"get"},
- MethodParams: param.Make(),
- Filters: nil,
- Params: nil})
-
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "Get",
@@ -70,6 +61,15 @@ func init() {
Filters: nil,
Params: nil})
+ beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
+ beego.ControllerComments{
+ Method: "Valid",
+ Router: `/peer/:id/valid`,
+ AllowHTTPMethods: []string{"get"},
+ MethodParams: param.Make(),
+ Filters: nil,
+ Params: nil})
+
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "Search",
diff --git a/routers/router.go b/routers/router.go
index 23a78ac..788bd28 100644
--- a/routers/router.go
+++ b/routers/router.go
@@ -8,8 +8,14 @@
package routers
import (
+ "encoding/json"
+ "net/http"
"oc-peer/controllers"
+ "oc-peer/infrastructure"
+ "strings"
+ oclib "cloud.o-forge.io/core/oc-lib"
+ "cloud.o-forge.io/core/oc-lib/tools"
beego "github.com/beego/beego/v2/server/web"
)
@@ -30,4 +36,20 @@ func init() {
),
)
beego.AddNamespace(ns)
+
+ // WebSocket route enregistrée en dehors du pipeline Beego
+ // beego.Handler bypasse le controller pipeline (pas de WriteHeader parasite)
+ beego.Handler("/oc/decentralized/search/:search", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ parts := strings.Split(strings.TrimSuffix(r.URL.Path, "/"), "/")
+ search := parts[len(parts)-1]
+
+ user, _, _ := oclib.ExtractTokenInfo(*r)
+ b, _ := json.Marshal(map[string]string{"search": search})
+ infrastructure.EmitNATS(user, tools.PropalgationMessage{
+ Action: tools.PB_SEARCH,
+ DataType: tools.PEER.EnumIndex(),
+ Payload: b,
+ })
+ controllers.Websocket(r.Context(), user, w, r)
+ }))
}
diff --git a/swagger/swagger.json b/swagger/swagger.json
index ad7aca0..0299c02 100644
--- a/swagger/swagger.json
+++ b/swagger/swagger.json
@@ -15,6 +15,35 @@
},
"basePath": "/oc/",
"paths": {
+ "/decentralized/search/{search}": {
+ "get": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "find workflow by key word\n\u003cbr\u003e",
+ "operationId": "PeerController.Search Decentralized",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "search",
+ "description": "the search you want to get",
+ "required": true,
+ "type": "string"
+ },
+ {
+ "in": "query",
+ "name": "is_draft",
+ "description": "draft wished",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{workflow} models.workflow"
+ }
+ }
+ }
+ },
"/peer": {
"get": {
"tags": [
@@ -66,29 +95,6 @@
}
}
},
- "/peer/{from}/link/{relation}": {
- "get": {
- "tags": [
- "oc-peer/controllersPeerController"
- ],
- "description": "find peer by peerid\n\u003cbr\u003e",
- "operationId": "PeerController.Link",
- "parameters": [
- {
- "in": "path",
- "name": "id",
- "description": "the peer id you want to get",
- "required": true,
- "type": "string"
- }
- ],
- "responses": {
- "200": {
- "description": "{peer} models.peer"
- }
- }
- }
- },
"/peer/{id}": {
"get": {
"tags": [
@@ -204,6 +210,29 @@
}
}
},
+ "/peer/{id}/valid": {
+ "get": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "find peer by peerid\n\u003cbr\u003e",
+ "operationId": "PeerController.Valid",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "the peer id you want to get",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{peer} models.peer"
+ }
+ }
+ }
+ },
"/status/": {
"post": {
"tags": [
diff --git a/swagger/swagger.yml b/swagger/swagger.yml
index ef55e18..eb84d67 100644
--- a/swagger/swagger.yml
+++ b/swagger/swagger.yml
@@ -12,6 +12,27 @@ info:
url: https://www.gnu.org/licenses/agpl-3.0.html
basePath: /oc/
paths:
+ /decentralized/search/{search}:
+ get:
+ tags:
+ - oc-peer/controllersPeerController
+ description: |-
+ find workflow by key word
+
+ operationId: PeerController.Search Decentralized
+ parameters:
+ - in: path
+ name: search
+ description: the search you want to get
+ required: true
+ type: string
+ - in: query
+ name: is_draft
+ description: draft wished
+ type: string
+ responses:
+ "200":
+ description: '{workflow} models.workflow'
/peer:
get:
tags:
@@ -28,23 +49,6 @@ paths:
responses:
"200":
description: '{peer} models.peer'
- /peer/{from}/link/{relation}:
- get:
- tags:
- - oc-peer/controllersPeerController
- description: |-
- find peer by peerid
-
- operationId: PeerController.Link
- parameters:
- - in: path
- name: id
- description: the peer id you want to get
- required: true
- type: string
- responses:
- "200":
- description: '{peer} models.peer'
/peer/{id}:
get:
tags:
@@ -130,6 +134,23 @@ paths:
responses:
"200":
description: '{peer} models.peer'
+ /peer/{id}/valid:
+ get:
+ tags:
+ - oc-peer/controllersPeerController
+ description: |-
+ find peer by peerid
+
+ operationId: PeerController.Valid
+ parameters:
+ - in: path
+ name: id
+ description: the peer id you want to get
+ required: true
+ type: string
+ responses:
+ "200":
+ description: '{peer} models.peer'
/peer/search/{search}:
get:
tags:
diff --git a/ws.go b/ws.go
new file mode 100644
index 0000000..5defcc5
--- /dev/null
+++ b/ws.go
@@ -0,0 +1,102 @@
+//go:build ignore
+
+package main
+
+import (
+ "encoding/json"
+ "flag"
+ "fmt"
+ "log"
+ "os"
+ "os/signal"
+ "time"
+
+ "golang.org/x/net/websocket"
+)
+
+func main() {
+ timeout := flag.Int("timeout", 10, "secondes sans message avant de quitter")
+ flag.Parse()
+
+ args := flag.Args()
+ url := "ws://localhost:8093/oc/decentralized/search/test"
+ token := ""
+
+ if len(args) >= 1 {
+ url = args[0]
+ }
+ if len(args) >= 2 {
+ token = args[1]
+ }
+
+ // websocket.Dial attend une "origin" (peut être n'importe quelle URL)
+ origin := "http://localhost/"
+ config, err := websocket.NewConfig(url, origin)
+ if err != nil {
+ log.Fatalf("Config invalide : %v", err)
+ }
+ if token != "" {
+ config.Header.Set("Authorization", "Bearer "+token)
+ fmt.Printf("Token : %s...\n", token[:min(20, len(token))])
+ }
+
+ fmt.Printf("Connexion à : %s\n", url)
+ ws, err := websocket.DialConfig(config)
+ if err != nil {
+ log.Fatalf("Impossible de se connecter : %v", err)
+ }
+ defer ws.Close()
+ fmt.Println("Connecté — en attente de messages...\n")
+
+ // Gestion Ctrl+C
+ stop := make(chan os.Signal, 1)
+ signal.Notify(stop, os.Interrupt)
+
+ msgs := make(chan string)
+ errs := make(chan error, 1)
+
+ go func() {
+ for {
+ var raw string
+ if err := websocket.Message.Receive(ws, &raw); err != nil {
+ errs <- err
+ return
+ }
+ msgs <- raw
+ }
+ }()
+
+ idleTimer := time.NewTimer(time.Duration(*timeout) * time.Second)
+ defer idleTimer.Stop()
+
+ for {
+ select {
+ case <-stop:
+ fmt.Println("\nInterruption — fermeture.")
+ return
+ case err := <-errs:
+ fmt.Printf("Connexion fermée : %v\n", err)
+ return
+ case <-idleTimer.C:
+ fmt.Printf("Timeout (%ds) — aucun message reçu, fermeture.\n", *timeout)
+ return
+ case raw := <-msgs:
+ idleTimer.Reset(time.Duration(*timeout) * time.Second)
+ // Tente d'afficher en JSON formaté
+ var data any
+ if err := json.Unmarshal([]byte(raw), &data); err == nil {
+ b, _ := json.MarshalIndent(data, "", " ")
+ fmt.Println(string(b))
+ } else {
+ fmt.Printf("Message brut : %s\n", raw)
+ }
+ }
+ }
+}
+
+func min(a, b int) int {
+ if a < b {
+ return a
+ }
+ return b
+}