diff --git a/controllers/peer.go b/controllers/peer.go
index 015bbce..4b2cd12 100644
--- a/controllers/peer.go
+++ b/controllers/peer.go
@@ -4,7 +4,6 @@ import (
ctx "context"
"encoding/json"
"fmt"
- "net/http"
"oc-peer/infrastructure"
oclib "cloud.o-forge.io/core/oc-lib"
@@ -12,7 +11,7 @@ import (
"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"
- "golang.org/x/net/websocket"
+ "github.com/gorilla/websocket"
)
// Operations about workflow
@@ -25,7 +24,7 @@ type PeerController struct {
// @Param search path string true "the word search you want to get"
// @Param is_draft query string false
// @Success 200 {workspace} models.workspace
-// @router /peer/search/:search [get]
+// @router /search/:search [get]
func (o *PeerController) Search() {
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
// store and return Id or post with UUIDLibDataEnum
@@ -39,7 +38,7 @@ func (o *PeerController) Search() {
// @Description find all peer
// @Param is_draft query string false
// @Success 200 {peer} models.peer
-// @router /peer [get]
+// @router / [get]
func (o *PeerController) GetAll() {
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
isDraft := o.Ctx.Input.Query("is_draft")
@@ -60,7 +59,7 @@ func (o *PeerController) GetAll() {
// @Description find peer by peerid
// @Param id path string true "the peer id you want to get"
// @Success 200 {peer} models.peer
-// @router /peer/:id [get]
+// @router /:id [get]
func (o *PeerController) Get() {
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
id := o.Ctx.Input.Param(":id")
@@ -72,19 +71,10 @@ func (o *PeerController) Get() {
// @Description find peer by peerid
// @Param id path string true "the peer id you want to get"
// @Success 200 {peer} models.peer
-// @router /peer/:id/valid [get]
+// @router /valid/:id [get]
func (o *PeerController) Valid() {
user, _, groups := 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 validate a link relation",
- }
- o.ServeJSON()
- return
- }*/
if ok, _ := oclib.IsMySelf(id); ok {
o.Data["json"] = map[string]interface{}{
"data": nil,
@@ -94,6 +84,7 @@ func (o *PeerController) Valid() {
o.ServeJSON()
return
}
+ fmt.Println(id)
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
l := req.LoadOne(id)
if l.Data != nil && l.ToPeer().Verify && (l.ToPeer().Relation == peer.PARTNER || l.ToPeer().Relation == peer.PENDING_PARTNER) {
@@ -122,67 +113,71 @@ func (o *PeerController) Valid() {
o.ServeJSON()
}
-// @Title unknown
-// @Description add unknown peer by peerid
+// @Title known
+// @Description add kwown peer by peerid
// @Param id path string true "the peer id you want to blacklist"
// @Success 200 {peer} models.peer
-// @router /peer/:id/unknown [post]
-func (o *PeerController) Unknown() {
+// @router /:id/known [post]
+func (o *PeerController) Known() {
user, _, groups := 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(), user, groups, peer.NONE, req)
+
+ o.changeRelation(id, data.ToPeer(), user, groups, peer.NONE, req)
}
// @Title Partner
// @Description add partner peer by peerid
// @Param id path string true "the peer id you want to blacklist"
// @Success 200 {peer} models.peer
-// @router /peer/:id/partner [post]
+// @router /:id/partner [post]
func (o *PeerController) Partner() {
user, _, groups := 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(), user, groups, peer.PARTNER, req)
+ o.changeRelation(id, data.ToPeer(), user, groups, peer.PARTNER, req)
}
// @Title Blacklist
// @Description add blacklist peer by peerid
// @Param id path string true "the peer id you want to blacklist"
// @Success 200 {peer} models.peer
-// @router /peer/:id/blacklist [post]
+// @router /:id/blacklist [post]
func (o *PeerController) Blacklist() {
user, _, groups := 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(), user, groups, peer.BLACKLIST, req)
+ o.changeRelation(id, data.ToPeer(), user, groups, peer.BLACKLIST, req)
}
// used from : peer ask, or response, only from peer origin is authorized to change...
-func (o *PeerController) changeRelation(dest *peer.Peer, user string, groups []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 if not ourself",
+func (o *PeerController) changeRelation(id string, dest *peer.Peer, user string, groups []string, relation peer.PeerRelation, request *oclib.Request) {
+ infrastructure.SearchMu.Lock()
+ if dest == nil && infrastructure.SearchStreamAction[user] != nil { // add auto in base if not existing
+ req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
+ for _, pp := range infrastructure.SearchStreamAction[user] {
+ if pp.GetID() == id {
+ data := req.StoreOne(pp.Serialize(pp))
+ dest = data.ToPeer()
+ break
+ }
}
- o.ServeJSON()
- return
- }*/
- if ok, _ := oclib.IsMySelf(dest.GetID()); ok {
- o.Data["json"] = map[string]interface{}{
- "data": nil,
- "code": 400,
- "error": "can't change ourself",
- }
- o.ServeJSON()
- return
}
+ infrastructure.SearchMu.Unlock()
// store and return Id or post with UUID
if dest != nil {
+ if ok, _ := oclib.IsMySelf(dest.GetID()); ok {
+ o.Data["json"] = map[string]interface{}{
+ "data": nil,
+ "code": 400,
+ "error": "can't change ourself",
+ }
+ o.ServeJSON()
+ return
+ }
if !dest.Verify {
switch relation {
case peer.PARTNER:
@@ -194,6 +189,7 @@ func (o *PeerController) changeRelation(dest *peer.Peer, user string, groups []s
if dest.Verify && relation == peer.PENDING_PARTNER {
relation = peer.PARTNER
}
+ fmt.Println("CHANGE REL", dest.GetID())
data := request.UpdateOne(map[string]interface{}{
"relation": relation,
}, dest.GetID())
@@ -225,7 +221,7 @@ func (o *PeerController) changeRelation(dest *peer.Peer, user string, groups []s
// @Description delete state peer by peerid
// @Param id path string true "the peer id you want to delete state"
// @Success 200 {peer} models.peer
-// @router /peer/:id/undo_state [post]
+// @router /:id/undo_state [post]
func (o *PeerController) DeleteState() {
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
id := o.Ctx.Input.Param(":id")
@@ -235,48 +231,52 @@ func (o *PeerController) DeleteState() {
o.ServeJSON()
}
-func Websocket(ctx ctx.Context, user string, r http.ResponseWriter, w *http.Request) {
- websocket.Handler(func(ws *websocket.Conn) {
- done := make(chan struct{})
- go func() {
- var discard interface{}
- for {
- if websocket.JSON.Receive(ws, &discard) != nil {
- close(done)
- return
- }
- }
- }()
- defer func() {
- ws.Close()
- if ch, ok := infrastructure.SearchStream[user]; ok {
- close(ch)
- infrastructure.SearchMu.Lock()
- delete(infrastructure.SearchStream, user)
- infrastructure.SearchMu.Unlock()
- }
- fmt.Println("CLOSE !")
- infrastructure.EmitNATS(user, nil, tools.PropalgationMessage{
- Action: tools.PB_CLOSE_SEARCH,
- DataType: tools.PEER.EnumIndex(),
- })
- }()
+func Websocket(ctx ctx.Context, user string, conn *websocket.Conn) {
+ defer conn.Close()
+
+ done := make(chan struct{})
+ go func() {
+ var discard interface{}
for {
- select {
- case msg, ok := <-infrastructure.SearchStream[user]:
- if !ok {
- continue
- }
- if websocket.JSON.Send(ws, msg) != nil {
- continue
- }
- case <-done:
- return
- case <-ctx.Done():
+ if conn.ReadJSON(&discard) != nil {
+ close(done)
return
}
}
- }).ServeHTTP(r, w)
+ }()
+ defer func() {
+ if ch, ok := infrastructure.SearchStream[user]; ok {
+ close(ch)
+ infrastructure.SearchMu.Lock()
+ delete(infrastructure.SearchStream, user)
+ delete(infrastructure.SearchStreamAction, user)
+ infrastructure.SearchMu.Unlock()
+ }
+ fmt.Println("CLOSE !")
+ infrastructure.EmitNATS(user, nil, tools.PropalgationMessage{
+ Action: tools.PB_CLOSE_SEARCH,
+ DataType: tools.PEER.EnumIndex(),
+ })
+ }()
+ for {
+ select {
+ case msg, ok := <-infrastructure.SearchStream[user]:
+ if !ok {
+ continue
+ }
+ infrastructure.SearchMu.Lock()
+ infrastructure.SearchStreamAction[user] = append(infrastructure.SearchStreamAction[user], msg)
+ infrastructure.SearchMu.Unlock()
+
+ if conn.WriteJSON(msg) != nil {
+ continue
+ }
+ case <-done:
+ return
+ case <-ctx.Done():
+ return
+ }
+ }
}
/*
diff --git a/go.mod b/go.mod
index 08edcb7..85f371b 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module oc-peer
go 1.25.0
require (
- cloud.o-forge.io/core/oc-lib v0.0.0-20260312141150-a335c905b3a2
+ cloud.o-forge.io/core/oc-lib v0.0.0-20260331144112-c0722483b86c
github.com/beego/beego/v2 v2.3.8
github.com/smartystreets/goconvey v1.7.2
)
@@ -57,6 +57,7 @@ require (
github.com/google/uuid v1.6.0 // indirect
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect
github.com/goraz/onion v0.1.3 // indirect
+ github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/klauspost/compress v1.18.0 // indirect
diff --git a/go.sum b/go.sum
index 03df4d1..a399d32 100644
--- a/go.sum
+++ b/go.sum
@@ -34,6 +34,10 @@ cloud.o-forge.io/core/oc-lib v0.0.0-20260312104524-e28b79ac0d62 h1:sHzacZxPIKHyj
cloud.o-forge.io/core/oc-lib v0.0.0-20260312104524-e28b79ac0d62/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA=
cloud.o-forge.io/core/oc-lib v0.0.0-20260312141150-a335c905b3a2 h1:DuB6SDThFVJVQ0iI0pZnBqtCE0uW+SNI7R7ndKixu2k=
cloud.o-forge.io/core/oc-lib v0.0.0-20260312141150-a335c905b3a2/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260327114131-45f2351b2f1f h1:lY+EJlJazoDBoM25E0vCOjIh8OdFuyPppWsNERDNkMo=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260327114131-45f2351b2f1f/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260331144112-c0722483b86c h1:wTIridvhud8zwMsMkwxgrQ+j+6UAo2IHDr3N80AA6zc=
+cloud.o-forge.io/core/oc-lib v0.0.0-20260331144112-c0722483b86c/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=
@@ -143,6 +147,8 @@ github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRid
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/goraz/onion v0.1.3 h1:KhyvbDA2b70gcz/d5izfwTiOH8SmrvV43AsVzpng3n0=
github.com/goraz/onion v0.1.3/go.mod h1:XEmz1XoBz+wxTgWB8NwuvRm4RAu3vKxvrmYtzK+XCuQ=
+github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=
+github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
diff --git a/infrastructure/nats.go b/infrastructure/nats.go
index 1204665..a0b9f63 100644
--- a/infrastructure/nats.go
+++ b/infrastructure/nats.go
@@ -18,6 +18,7 @@ var ressourceCols = []oclib.LibDataEnum{
}
var SearchMu sync.RWMutex
+var SearchStreamAction = map[string][]*peer.Peer{}
var SearchStream = map[string]chan *peer.Peer{}
func EmitNATS(user string, groups []string, message tools.PropalgationMessage) {
@@ -25,6 +26,7 @@ func EmitNATS(user string, groups []string, message tools.PropalgationMessage) {
if message.Action == tools.PB_SEARCH {
SearchMu.Lock()
SearchStream[user] = make(chan *peer.Peer, 128)
+ SearchStreamAction[user] = []*peer.Peer{}
SearchMu.Unlock()
}
tools.NewNATSCaller().SetNATSPub(tools.PROPALGATION_EVENT, tools.NATSResponse{
@@ -55,6 +57,8 @@ func EmitNATS(user string, groups []string, message tools.PropalgationMessage) {
// lui va vérifier la signature de la ressource qu'il possède correspondante si elle existe, si non. AIE,
// on met à jour mais on pète une erreur.
+var self *peer.Peer
+
func ListenNATS() {
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
tools.CREATE_RESOURCE: func(resp tools.NATSResponse) {
@@ -66,12 +70,19 @@ func ListenNATS() {
/*if err := verify(resp.Payload); err != nil {
return // don't trust anyone... only friends and foes are privilege
}*/
+
fmt.Println("CREATE_RESOURCE", p.GetID())
+ if ok, _ := oclib.IsMySelf(p.GetID()); ok {
+ fmt.Println("it's ourselve !")
+ return
+ }
+
access := oclib.NewRequestAdmin(oclib.LibDataEnum(resp.Datatype), nil)
if data := access.LoadOne(p.GetID()); data.Data != nil {
- if p.Relation == peer.PENDING_PARTNER {
+ if p.Relation == peer.PENDING_PARTNER || p.Relation == peer.PARTNER {
if data.ToPeer().Verify {
+ fmt.Println("UPDATE 2", p.GetID())
access.UpdateOne(map[string]interface{}{
"verify": false,
"relation": peer.PARTNER,
@@ -82,26 +93,19 @@ func ListenNATS() {
"relation": peer.PENDING_PARTNER,
}, p.GetID())
}
- } else if data.ToPeer().Relation != peer.BLACKLIST && data.ToPeer().Relation != peer.SELF {
+ } else if data.ToPeer().Relation == peer.NONE {
access.UpdateOne(map[string]interface{}{
+ "verify": false,
"relation": p.Relation,
}, p.GetID())
}
- } else if p.Relation != peer.SELF {
- if p.Relation != peer.SELF {
- access.StoreOne(p.Serialize(p))
- } else if data := access.Search(&dbs.Filters{
- And: map[string][]dbs.Filter{
- "relation": {{Operator: dbs.EQUAL.String(), Value: peer.SELF.EnumIndex()}},
- },
- }, "", false); len(data.Data) == 0 {
- access.StoreOne(p.Serialize(p))
- } else if len(data.Data) == 1 && data.Data[0].GetID() != p.GetID() {
- access.DeleteOne(data.Data[0].GetID())
- access.StoreOne(p.Serialize(p))
+ } else if p.Relation != peer.SELF && p.Relation != peer.BLACKLIST {
+ if p.Relation == peer.PARTNER || p.Relation == peer.PENDING_PARTNER {
+ p.Verify = true
+ p.Relation = peer.PENDING_PARTNER
}
+ access.StoreOne(p.Serialize(p))
}
-
}
},
tools.SEARCH_EVENT: func(resp tools.NATSResponse) {
@@ -111,7 +115,17 @@ func ListenNATS() {
p := &peer.Peer{}
err := json.Unmarshal(resp.Payload, p)
if err == nil {
- fmt.Println("ADD in SEARCH STREAM")
+ access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
+ fmt.Println("ADD in SEARCH STREAM", p.GetID())
+ if s := access.Search(&dbs.Filters{
+ And: map[string][]dbs.Filter{
+ "peer_id": {{Operator: dbs.EQUAL.String(), Value: p.PeerID}},
+ },
+ }, "", false); len(s.Data) > 0 {
+ p.Relation = s.Data[0].(*peer.Peer).Relation
+ } else {
+ p.NotInCatalog = true
+ }
SearchMu.Lock()
SearchStream[resp.User] <- p // TODO when do we update it in our catalog ?
SearchMu.Unlock()
diff --git a/main.go b/main.go
index 254e8a8..98d599b 100644
--- a/main.go
+++ b/main.go
@@ -1,6 +1,7 @@
package main
import (
+ "fmt"
"oc-peer/infrastructure"
_ "oc-peer/routers"
@@ -11,7 +12,12 @@ import (
const appname = "oc-peer"
func main() {
- oclib.InitAPI(appname)
+ for _, info := range beego.BeeApp.Handlers.GetAllControllerInfo() {
+ fmt.Println(info.GetPattern())
+ }
+ oclib.InitAPI(appname, map[string][]string{
+ "/oc/decentralized/search/:search": {"GET"},
+ })
go infrastructure.ListenNATS()
beego.Run()
}
diff --git a/oc-peer b/oc-peer
index fb53c92..36d9c83 100755
Binary files a/oc-peer and b/oc-peer differ
diff --git a/routers/commentsRouter.go b/routers/commentsRouter.go
index f4baf26..45b9fb5 100644
--- a/routers/commentsRouter.go
+++ b/routers/commentsRouter.go
@@ -10,7 +10,7 @@ func init() {
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "GetAll",
- Router: `/peer`,
+ Router: `/`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
@@ -19,7 +19,7 @@ func init() {
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "Get",
- Router: `/peer/:id`,
+ Router: `/:id`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
@@ -28,7 +28,16 @@ func init() {
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "Blacklist",
- Router: `/peer/:id/blacklist`,
+ Router: `/:id/blacklist`,
+ AllowHTTPMethods: []string{"post"},
+ MethodParams: param.Make(),
+ Filters: nil,
+ Params: nil})
+
+ beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
+ beego.ControllerComments{
+ Method: "Known",
+ Router: `/:id/known`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
@@ -37,7 +46,7 @@ func init() {
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "Partner",
- Router: `/peer/:id/partner`,
+ Router: `/:id/partner`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
@@ -46,34 +55,25 @@ func init() {
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
beego.ControllerComments{
Method: "DeleteState",
- Router: `/peer/:id/undo_state`,
+ Router: `/:id/undo_state`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
- beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
- beego.ControllerComments{
- Method: "Unknown",
- Router: `/peer/:id/unknown`,
- AllowHTTPMethods: []string{"post"},
- MethodParams: param.Make(),
- 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",
- Router: `/peer/search/:search`,
+ Router: `/search/:search`,
+ 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: "Valid",
+ Router: `/valid/:id`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
diff --git a/routers/router.go b/routers/router.go
index 6e9c61b..66203a7 100644
--- a/routers/router.go
+++ b/routers/router.go
@@ -17,10 +17,17 @@ import (
oclib "cloud.o-forge.io/core/oc-lib"
"cloud.o-forge.io/core/oc-lib/tools"
beego "github.com/beego/beego/v2/server/web"
+ "github.com/gorilla/websocket"
)
+var upgrader = websocket.Upgrader{
+ CheckOrigin: func(r *http.Request) bool {
+ return true
+ },
+}
+
func init() {
- ns := beego.NewNamespace("/oc/",
+ ns := beego.NewNamespace("/oc",
beego.NSNamespace("/status",
beego.NSInclude(
&controllers.StatusController{},
@@ -40,6 +47,11 @@ func init() {
// 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) {
+ conn, err := upgrader.Upgrade(w, r, nil)
+ if err != nil {
+ return
+ }
+ defer conn.Close()
parts := strings.Split(strings.TrimSuffix(r.URL.Path, "/"), "/")
search := parts[len(parts)-1]
@@ -50,6 +62,6 @@ func init() {
DataType: tools.PEER.EnumIndex(),
Payload: b,
})
- controllers.Websocket(r.Context(), user, w, r)
+ controllers.Websocket(r.Context(), user, conn)
}))
}
diff --git a/swagger/swagger.json b/swagger/swagger.json
index 0299c02..c21a485 100644
--- a/swagger/swagger.json
+++ b/swagger/swagger.json
@@ -13,38 +13,9 @@
"url": "https://www.gnu.org/licenses/agpl-3.0.html"
}
},
- "basePath": "/oc/",
+ "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": [
"oc-peer/controllersPeerController"
@@ -66,7 +37,7 @@
}
}
},
- "/peer/search/{search}": {
+ "/search/{search}": {
"get": {
"tags": [
"oc-peer/controllersPeerController"
@@ -95,144 +66,6 @@
}
}
},
- "/peer/{id}": {
- "get": {
- "tags": [
- "oc-peer/controllersPeerController"
- ],
- "description": "find peer by peerid\n\u003cbr\u003e",
- "operationId": "PeerController.Get",
- "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}/blacklist": {
- "post": {
- "tags": [
- "oc-peer/controllersPeerController"
- ],
- "description": "add blacklist peer by peerid\n\u003cbr\u003e",
- "operationId": "PeerController.Blacklist",
- "parameters": [
- {
- "in": "path",
- "name": "id",
- "description": "the peer id you want to blacklist",
- "required": true,
- "type": "string"
- }
- ],
- "responses": {
- "200": {
- "description": "{peer} models.peer"
- }
- }
- }
- },
- "/peer/{id}/partner": {
- "post": {
- "tags": [
- "oc-peer/controllersPeerController"
- ],
- "description": "add partner peer by peerid\n\u003cbr\u003e",
- "operationId": "PeerController.Partner",
- "parameters": [
- {
- "in": "path",
- "name": "id",
- "description": "the peer id you want to blacklist",
- "required": true,
- "type": "string"
- }
- ],
- "responses": {
- "200": {
- "description": "{peer} models.peer"
- }
- }
- }
- },
- "/peer/{id}/undo_state": {
- "post": {
- "tags": [
- "oc-peer/controllersPeerController"
- ],
- "description": "delete state peer by peerid\n\u003cbr\u003e",
- "operationId": "PeerController.DeleteState",
- "parameters": [
- {
- "in": "path",
- "name": "id",
- "description": "the peer id you want to delete state",
- "required": true,
- "type": "string"
- }
- ],
- "responses": {
- "200": {
- "description": "{peer} models.peer"
- }
- }
- }
- },
- "/peer/{id}/unknown": {
- "post": {
- "tags": [
- "oc-peer/controllersPeerController"
- ],
- "description": "add unknown peer by peerid\n\u003cbr\u003e",
- "operationId": "PeerController.unknown",
- "parameters": [
- {
- "in": "path",
- "name": "id",
- "description": "the peer id you want to blacklist",
- "required": true,
- "type": "string"
- }
- ],
- "responses": {
- "200": {
- "description": "{peer} models.peer"
- }
- }
- }
- },
- "/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": [
@@ -257,6 +90,29 @@
}
}
},
+ "/valid/{id}": {
+ "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"
+ }
+ }
+ }
+ },
"/version/": {
"get": {
"tags": [
@@ -270,6 +126,121 @@
}
}
}
+ },
+ "/{id}": {
+ "get": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "find peer by peerid\n\u003cbr\u003e",
+ "operationId": "PeerController.Get",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "the peer id you want to get",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{peer} models.peer"
+ }
+ }
+ }
+ },
+ "/{id}/blacklist": {
+ "post": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "add blacklist peer by peerid\n\u003cbr\u003e",
+ "operationId": "PeerController.Blacklist",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "the peer id you want to blacklist",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{peer} models.peer"
+ }
+ }
+ }
+ },
+ "/{id}/known": {
+ "post": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "add kwown peer by peerid\n\u003cbr\u003e",
+ "operationId": "PeerController.known",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "the peer id you want to blacklist",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{peer} models.peer"
+ }
+ }
+ }
+ },
+ "/{id}/partner": {
+ "post": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "add partner peer by peerid\n\u003cbr\u003e",
+ "operationId": "PeerController.Partner",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "the peer id you want to blacklist",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{peer} models.peer"
+ }
+ }
+ }
+ },
+ "/{id}/undo_state": {
+ "post": {
+ "tags": [
+ "oc-peer/controllersPeerController"
+ ],
+ "description": "delete state peer by peerid\n\u003cbr\u003e",
+ "operationId": "PeerController.DeleteState",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "description": "the peer id you want to delete state",
+ "required": true,
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{peer} models.peer"
+ }
+ }
+ }
}
},
"definitions": {
diff --git a/swagger/swagger.yml b/swagger/swagger.yml
index eb84d67..d819807 100644
--- a/swagger/swagger.yml
+++ b/swagger/swagger.yml
@@ -10,30 +10,9 @@ info:
license:
name: AGPL
url: https://www.gnu.org/licenses/agpl-3.0.html
-basePath: /oc/
+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:
- oc-peer/controllersPeerController
@@ -49,7 +28,7 @@ paths:
responses:
"200":
description: '{peer} models.peer'
- /peer/{id}:
+ /{id}:
get:
tags:
- oc-peer/controllersPeerController
@@ -66,7 +45,7 @@ paths:
responses:
"200":
description: '{peer} models.peer'
- /peer/{id}/blacklist:
+ /{id}/blacklist:
post:
tags:
- oc-peer/controllersPeerController
@@ -83,7 +62,24 @@ paths:
responses:
"200":
description: '{peer} models.peer'
- /peer/{id}/partner:
+ /{id}/known:
+ post:
+ tags:
+ - oc-peer/controllersPeerController
+ description: |-
+ add kwown peer by peerid
+
+ operationId: PeerController.known
+ parameters:
+ - in: path
+ name: id
+ description: the peer id you want to blacklist
+ required: true
+ type: string
+ responses:
+ "200":
+ description: '{peer} models.peer'
+ /{id}/partner:
post:
tags:
- oc-peer/controllersPeerController
@@ -100,7 +96,7 @@ paths:
responses:
"200":
description: '{peer} models.peer'
- /peer/{id}/undo_state:
+ /{id}/undo_state:
post:
tags:
- oc-peer/controllersPeerController
@@ -117,41 +113,7 @@ paths:
responses:
"200":
description: '{peer} models.peer'
- /peer/{id}/unknown:
- post:
- tags:
- - oc-peer/controllersPeerController
- description: |-
- add unknown peer by peerid
-
- operationId: PeerController.unknown
- parameters:
- - in: path
- name: id
- description: the peer id you want to blacklist
- required: true
- type: string
- 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}:
+ /search/{search}:
get:
tags:
- oc-peer/controllersPeerController
@@ -189,6 +151,23 @@ paths:
responses:
"200":
description: '{status} models.status'
+ /valid/{id}:
+ 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'
/version/:
get:
tags: