Fully Working Network Peers
This commit is contained in:
@@ -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,56 +113,62 @@ 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
|
||||
}*/
|
||||
}
|
||||
}
|
||||
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,
|
||||
@@ -181,8 +178,6 @@ func (o *PeerController) changeRelation(dest *peer.Peer, user string, groups []s
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
// store and return Id or post with UUID
|
||||
if dest != nil {
|
||||
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,24 +231,25 @@ 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) {
|
||||
func Websocket(ctx ctx.Context, user string, conn *websocket.Conn) {
|
||||
defer conn.Close()
|
||||
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
var discard interface{}
|
||||
for {
|
||||
if websocket.JSON.Receive(ws, &discard) != nil {
|
||||
if conn.ReadJSON(&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)
|
||||
delete(infrastructure.SearchStreamAction, user)
|
||||
infrastructure.SearchMu.Unlock()
|
||||
}
|
||||
fmt.Println("CLOSE !")
|
||||
@@ -267,7 +264,11 @@ func Websocket(ctx ctx.Context, user string, r http.ResponseWriter, w *http.Requ
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
if websocket.JSON.Send(ws, msg) != nil {
|
||||
infrastructure.SearchMu.Lock()
|
||||
infrastructure.SearchStreamAction[user] = append(infrastructure.SearchStreamAction[user], msg)
|
||||
infrastructure.SearchMu.Unlock()
|
||||
|
||||
if conn.WriteJSON(msg) != nil {
|
||||
continue
|
||||
}
|
||||
case <-done:
|
||||
@@ -276,7 +277,6 @@ func Websocket(ctx ctx.Context, user string, r http.ResponseWriter, w *http.Requ
|
||||
return
|
||||
}
|
||||
}
|
||||
}).ServeHTTP(r, w)
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
3
go.mod
3
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
|
||||
|
||||
6
go.sum
6
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=
|
||||
|
||||
@@ -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,27 +93,20 @@ 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())
|
||||
} 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) {
|
||||
if !slices.Contains(ressourceCols, oclib.LibDataEnum(resp.Datatype)) {
|
||||
@@ -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()
|
||||
|
||||
8
main.go
8
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()
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
<br>
|
||||
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
|
||||
<br>
|
||||
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
|
||||
<br>
|
||||
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
|
||||
<br>
|
||||
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
|
||||
<br>
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user