Fully Working Network Peers
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
|||||||
ctx "context"
|
ctx "context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"oc-peer/infrastructure"
|
"oc-peer/infrastructure"
|
||||||
|
|
||||||
oclib "cloud.o-forge.io/core/oc-lib"
|
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/models/peer"
|
||||||
"cloud.o-forge.io/core/oc-lib/tools"
|
"cloud.o-forge.io/core/oc-lib/tools"
|
||||||
beego "github.com/beego/beego/v2/server/web"
|
beego "github.com/beego/beego/v2/server/web"
|
||||||
"golang.org/x/net/websocket"
|
"github.com/gorilla/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Operations about workflow
|
// Operations about workflow
|
||||||
@@ -25,7 +24,7 @@ type PeerController struct {
|
|||||||
// @Param search path string true "the word search you want to get"
|
// @Param search path string true "the word search you want to get"
|
||||||
// @Param is_draft query string false
|
// @Param is_draft query string false
|
||||||
// @Success 200 {workspace} models.workspace
|
// @Success 200 {workspace} models.workspace
|
||||||
// @router /peer/search/:search [get]
|
// @router /search/:search [get]
|
||||||
func (o *PeerController) Search() {
|
func (o *PeerController) Search() {
|
||||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
// store and return Id or post with UUIDLibDataEnum
|
// store and return Id or post with UUIDLibDataEnum
|
||||||
@@ -39,7 +38,7 @@ func (o *PeerController) Search() {
|
|||||||
// @Description find all peer
|
// @Description find all peer
|
||||||
// @Param is_draft query string false
|
// @Param is_draft query string false
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer [get]
|
// @router / [get]
|
||||||
func (o *PeerController) GetAll() {
|
func (o *PeerController) GetAll() {
|
||||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
isDraft := o.Ctx.Input.Query("is_draft")
|
isDraft := o.Ctx.Input.Query("is_draft")
|
||||||
@@ -60,7 +59,7 @@ func (o *PeerController) GetAll() {
|
|||||||
// @Description find peer by peerid
|
// @Description find peer by peerid
|
||||||
// @Param id path string true "the peer id you want to get"
|
// @Param id path string true "the peer id you want to get"
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer/:id [get]
|
// @router /:id [get]
|
||||||
func (o *PeerController) Get() {
|
func (o *PeerController) Get() {
|
||||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
id := o.Ctx.Input.Param(":id")
|
id := o.Ctx.Input.Param(":id")
|
||||||
@@ -72,19 +71,10 @@ func (o *PeerController) Get() {
|
|||||||
// @Description find peer by peerid
|
// @Description find peer by peerid
|
||||||
// @Param id path string true "the peer id you want to get"
|
// @Param id path string true "the peer id you want to get"
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer/:id/valid [get]
|
// @router /valid/:id [get]
|
||||||
func (o *PeerController) Valid() {
|
func (o *PeerController) Valid() {
|
||||||
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
id := o.Ctx.Input.Param(":id")
|
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 {
|
if ok, _ := oclib.IsMySelf(id); ok {
|
||||||
o.Data["json"] = map[string]interface{}{
|
o.Data["json"] = map[string]interface{}{
|
||||||
"data": nil,
|
"data": nil,
|
||||||
@@ -94,6 +84,7 @@ func (o *PeerController) Valid() {
|
|||||||
o.ServeJSON()
|
o.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
fmt.Println(id)
|
||||||
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||||
l := req.LoadOne(id)
|
l := req.LoadOne(id)
|
||||||
if l.Data != nil && l.ToPeer().Verify && (l.ToPeer().Relation == peer.PARTNER || l.ToPeer().Relation == peer.PENDING_PARTNER) {
|
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()
|
o.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Title unknown
|
// @Title known
|
||||||
// @Description add unknown peer by peerid
|
// @Description add kwown peer by peerid
|
||||||
// @Param id path string true "the peer id you want to blacklist"
|
// @Param id path string true "the peer id you want to blacklist"
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer/:id/unknown [post]
|
// @router /:id/known [post]
|
||||||
func (o *PeerController) Unknown() {
|
func (o *PeerController) Known() {
|
||||||
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
id := o.Ctx.Input.Param(":id")
|
id := o.Ctx.Input.Param(":id")
|
||||||
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||||
data := req.LoadOne(id)
|
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
|
// @Title Partner
|
||||||
// @Description add partner peer by peerid
|
// @Description add partner peer by peerid
|
||||||
// @Param id path string true "the peer id you want to blacklist"
|
// @Param id path string true "the peer id you want to blacklist"
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer/:id/partner [post]
|
// @router /:id/partner [post]
|
||||||
func (o *PeerController) Partner() {
|
func (o *PeerController) Partner() {
|
||||||
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
id := o.Ctx.Input.Param(":id")
|
id := o.Ctx.Input.Param(":id")
|
||||||
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||||
data := req.LoadOne(id)
|
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
|
// @Title Blacklist
|
||||||
// @Description add blacklist peer by peerid
|
// @Description add blacklist peer by peerid
|
||||||
// @Param id path string true "the peer id you want to blacklist"
|
// @Param id path string true "the peer id you want to blacklist"
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer/:id/blacklist [post]
|
// @router /:id/blacklist [post]
|
||||||
func (o *PeerController) Blacklist() {
|
func (o *PeerController) Blacklist() {
|
||||||
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
id := o.Ctx.Input.Param(":id")
|
id := o.Ctx.Input.Param(":id")
|
||||||
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||||
data := req.LoadOne(id)
|
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...
|
// 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) {
|
func (o *PeerController) changeRelation(id string, dest *peer.Peer, user string, groups []string, relation peer.PeerRelation, request *oclib.Request) {
|
||||||
/*if ok, _ := oclib.IsMySelf(request.PeerID); !ok {
|
infrastructure.SearchMu.Lock()
|
||||||
o.Data["json"] = map[string]interface{}{
|
if dest == nil && infrastructure.SearchStreamAction[user] != nil { // add auto in base if not existing
|
||||||
"data": nil,
|
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||||
"code": 400,
|
for _, pp := range infrastructure.SearchStreamAction[user] {
|
||||||
"error": "can't change relation if not ourself",
|
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
|
// store and return Id or post with UUID
|
||||||
if dest != nil {
|
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 {
|
if !dest.Verify {
|
||||||
switch relation {
|
switch relation {
|
||||||
case peer.PARTNER:
|
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 {
|
if dest.Verify && relation == peer.PENDING_PARTNER {
|
||||||
relation = peer.PARTNER
|
relation = peer.PARTNER
|
||||||
}
|
}
|
||||||
|
fmt.Println("CHANGE REL", dest.GetID())
|
||||||
data := request.UpdateOne(map[string]interface{}{
|
data := request.UpdateOne(map[string]interface{}{
|
||||||
"relation": relation,
|
"relation": relation,
|
||||||
}, dest.GetID())
|
}, dest.GetID())
|
||||||
@@ -225,7 +221,7 @@ func (o *PeerController) changeRelation(dest *peer.Peer, user string, groups []s
|
|||||||
// @Description delete state peer by peerid
|
// @Description delete state peer by peerid
|
||||||
// @Param id path string true "the peer id you want to delete state"
|
// @Param id path string true "the peer id you want to delete state"
|
||||||
// @Success 200 {peer} models.peer
|
// @Success 200 {peer} models.peer
|
||||||
// @router /peer/:id/undo_state [post]
|
// @router /:id/undo_state [post]
|
||||||
func (o *PeerController) DeleteState() {
|
func (o *PeerController) DeleteState() {
|
||||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||||
id := o.Ctx.Input.Param(":id")
|
id := o.Ctx.Input.Param(":id")
|
||||||
@@ -235,48 +231,52 @@ func (o *PeerController) DeleteState() {
|
|||||||
o.ServeJSON()
|
o.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Websocket(ctx ctx.Context, user string, r http.ResponseWriter, w *http.Request) {
|
func Websocket(ctx ctx.Context, user string, conn *websocket.Conn) {
|
||||||
websocket.Handler(func(ws *websocket.Conn) {
|
defer conn.Close()
|
||||||
done := make(chan struct{})
|
|
||||||
go func() {
|
done := make(chan struct{})
|
||||||
var discard interface{}
|
go func() {
|
||||||
for {
|
var discard interface{}
|
||||||
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(),
|
|
||||||
})
|
|
||||||
}()
|
|
||||||
for {
|
for {
|
||||||
select {
|
if conn.ReadJSON(&discard) != nil {
|
||||||
case msg, ok := <-infrastructure.SearchStream[user]:
|
close(done)
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if websocket.JSON.Send(ws, msg) != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
case <-done:
|
|
||||||
return
|
|
||||||
case <-ctx.Done():
|
|
||||||
return
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
3
go.mod
3
go.mod
@@ -3,7 +3,7 @@ module oc-peer
|
|||||||
go 1.25.0
|
go 1.25.0
|
||||||
|
|
||||||
require (
|
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/beego/beego/v2 v2.3.8
|
||||||
github.com/smartystreets/goconvey v1.7.2
|
github.com/smartystreets/goconvey v1.7.2
|
||||||
)
|
)
|
||||||
@@ -57,6 +57,7 @@ require (
|
|||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect
|
||||||
github.com/goraz/onion v0.1.3 // 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/hashicorp/golang-lru v1.0.2 // indirect
|
||||||
github.com/jtolds/gls v4.20.0+incompatible // indirect
|
github.com/jtolds/gls v4.20.0+incompatible // indirect
|
||||||
github.com/klauspost/compress v1.18.0 // 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-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 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-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/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
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=
|
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/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 h1:KhyvbDA2b70gcz/d5izfwTiOH8SmrvV43AsVzpng3n0=
|
||||||
github.com/goraz/onion v0.1.3/go.mod h1:XEmz1XoBz+wxTgWB8NwuvRm4RAu3vKxvrmYtzK+XCuQ=
|
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 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 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
|
||||||
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
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 SearchMu sync.RWMutex
|
||||||
|
var SearchStreamAction = map[string][]*peer.Peer{}
|
||||||
var SearchStream = map[string]chan *peer.Peer{}
|
var SearchStream = map[string]chan *peer.Peer{}
|
||||||
|
|
||||||
func EmitNATS(user string, groups []string, message tools.PropalgationMessage) {
|
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 {
|
if message.Action == tools.PB_SEARCH {
|
||||||
SearchMu.Lock()
|
SearchMu.Lock()
|
||||||
SearchStream[user] = make(chan *peer.Peer, 128)
|
SearchStream[user] = make(chan *peer.Peer, 128)
|
||||||
|
SearchStreamAction[user] = []*peer.Peer{}
|
||||||
SearchMu.Unlock()
|
SearchMu.Unlock()
|
||||||
}
|
}
|
||||||
tools.NewNATSCaller().SetNATSPub(tools.PROPALGATION_EVENT, tools.NATSResponse{
|
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,
|
// 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.
|
// on met à jour mais on pète une erreur.
|
||||||
|
|
||||||
|
var self *peer.Peer
|
||||||
|
|
||||||
func ListenNATS() {
|
func ListenNATS() {
|
||||||
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
|
tools.NewNATSCaller().ListenNats(map[tools.NATSMethod]func(tools.NATSResponse){
|
||||||
tools.CREATE_RESOURCE: func(resp tools.NATSResponse) {
|
tools.CREATE_RESOURCE: func(resp tools.NATSResponse) {
|
||||||
@@ -66,12 +70,19 @@ func ListenNATS() {
|
|||||||
/*if err := verify(resp.Payload); err != nil {
|
/*if err := verify(resp.Payload); err != nil {
|
||||||
return // don't trust anyone... only friends and foes are privilege
|
return // don't trust anyone... only friends and foes are privilege
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
fmt.Println("CREATE_RESOURCE", p.GetID())
|
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)
|
access := oclib.NewRequestAdmin(oclib.LibDataEnum(resp.Datatype), nil)
|
||||||
if data := access.LoadOne(p.GetID()); data.Data != 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 {
|
if data.ToPeer().Verify {
|
||||||
|
fmt.Println("UPDATE 2", p.GetID())
|
||||||
access.UpdateOne(map[string]interface{}{
|
access.UpdateOne(map[string]interface{}{
|
||||||
"verify": false,
|
"verify": false,
|
||||||
"relation": peer.PARTNER,
|
"relation": peer.PARTNER,
|
||||||
@@ -82,26 +93,19 @@ func ListenNATS() {
|
|||||||
"relation": peer.PENDING_PARTNER,
|
"relation": peer.PENDING_PARTNER,
|
||||||
}, p.GetID())
|
}, 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{}{
|
access.UpdateOne(map[string]interface{}{
|
||||||
|
"verify": false,
|
||||||
"relation": p.Relation,
|
"relation": p.Relation,
|
||||||
}, p.GetID())
|
}, p.GetID())
|
||||||
}
|
}
|
||||||
} else if p.Relation != peer.SELF {
|
} else if p.Relation != peer.SELF && p.Relation != peer.BLACKLIST {
|
||||||
if p.Relation != peer.SELF {
|
if p.Relation == peer.PARTNER || p.Relation == peer.PENDING_PARTNER {
|
||||||
access.StoreOne(p.Serialize(p))
|
p.Verify = true
|
||||||
} else if data := access.Search(&dbs.Filters{
|
p.Relation = peer.PENDING_PARTNER
|
||||||
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))
|
|
||||||
}
|
}
|
||||||
|
access.StoreOne(p.Serialize(p))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
tools.SEARCH_EVENT: func(resp tools.NATSResponse) {
|
tools.SEARCH_EVENT: func(resp tools.NATSResponse) {
|
||||||
@@ -111,7 +115,17 @@ func ListenNATS() {
|
|||||||
p := &peer.Peer{}
|
p := &peer.Peer{}
|
||||||
err := json.Unmarshal(resp.Payload, p)
|
err := json.Unmarshal(resp.Payload, p)
|
||||||
if err == nil {
|
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()
|
SearchMu.Lock()
|
||||||
SearchStream[resp.User] <- p // TODO when do we update it in our catalog ?
|
SearchStream[resp.User] <- p // TODO when do we update it in our catalog ?
|
||||||
SearchMu.Unlock()
|
SearchMu.Unlock()
|
||||||
|
|||||||
8
main.go
8
main.go
@@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"oc-peer/infrastructure"
|
"oc-peer/infrastructure"
|
||||||
_ "oc-peer/routers"
|
_ "oc-peer/routers"
|
||||||
|
|
||||||
@@ -11,7 +12,12 @@ import (
|
|||||||
const appname = "oc-peer"
|
const appname = "oc-peer"
|
||||||
|
|
||||||
func main() {
|
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()
|
go infrastructure.ListenNATS()
|
||||||
beego.Run()
|
beego.Run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ func init() {
|
|||||||
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "GetAll",
|
Method: "GetAll",
|
||||||
Router: `/peer`,
|
Router: `/`,
|
||||||
AllowHTTPMethods: []string{"get"},
|
AllowHTTPMethods: []string{"get"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
@@ -19,7 +19,7 @@ func init() {
|
|||||||
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "Get",
|
Method: "Get",
|
||||||
Router: `/peer/:id`,
|
Router: `/:id`,
|
||||||
AllowHTTPMethods: []string{"get"},
|
AllowHTTPMethods: []string{"get"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
@@ -28,7 +28,16 @@ func init() {
|
|||||||
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "Blacklist",
|
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"},
|
AllowHTTPMethods: []string{"post"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
@@ -37,7 +46,7 @@ func init() {
|
|||||||
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "Partner",
|
Method: "Partner",
|
||||||
Router: `/peer/:id/partner`,
|
Router: `/:id/partner`,
|
||||||
AllowHTTPMethods: []string{"post"},
|
AllowHTTPMethods: []string{"post"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
@@ -46,34 +55,25 @@ func init() {
|
|||||||
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "DeleteState",
|
Method: "DeleteState",
|
||||||
Router: `/peer/:id/undo_state`,
|
Router: `/:id/undo_state`,
|
||||||
AllowHTTPMethods: []string{"post"},
|
AllowHTTPMethods: []string{"post"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "Search",
|
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"},
|
AllowHTTPMethods: []string{"get"},
|
||||||
MethodParams: param.Make(),
|
MethodParams: param.Make(),
|
||||||
Filters: nil,
|
Filters: nil,
|
||||||
|
|||||||
@@ -17,10 +17,17 @@ import (
|
|||||||
oclib "cloud.o-forge.io/core/oc-lib"
|
oclib "cloud.o-forge.io/core/oc-lib"
|
||||||
"cloud.o-forge.io/core/oc-lib/tools"
|
"cloud.o-forge.io/core/oc-lib/tools"
|
||||||
beego "github.com/beego/beego/v2/server/web"
|
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() {
|
func init() {
|
||||||
ns := beego.NewNamespace("/oc/",
|
ns := beego.NewNamespace("/oc",
|
||||||
beego.NSNamespace("/status",
|
beego.NSNamespace("/status",
|
||||||
beego.NSInclude(
|
beego.NSInclude(
|
||||||
&controllers.StatusController{},
|
&controllers.StatusController{},
|
||||||
@@ -40,6 +47,11 @@ func init() {
|
|||||||
// WebSocket route enregistrée en dehors du pipeline Beego
|
// WebSocket route enregistrée en dehors du pipeline Beego
|
||||||
// beego.Handler bypasse le controller pipeline (pas de WriteHeader parasite)
|
// 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) {
|
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, "/"), "/")
|
parts := strings.Split(strings.TrimSuffix(r.URL.Path, "/"), "/")
|
||||||
search := parts[len(parts)-1]
|
search := parts[len(parts)-1]
|
||||||
|
|
||||||
@@ -50,6 +62,6 @@ func init() {
|
|||||||
DataType: tools.PEER.EnumIndex(),
|
DataType: tools.PEER.EnumIndex(),
|
||||||
Payload: b,
|
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"
|
"url": "https://www.gnu.org/licenses/agpl-3.0.html"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"basePath": "/oc/",
|
"basePath": "/oc",
|
||||||
"paths": {
|
"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": {
|
"get": {
|
||||||
"tags": [
|
"tags": [
|
||||||
"oc-peer/controllersPeerController"
|
"oc-peer/controllersPeerController"
|
||||||
@@ -66,7 +37,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/peer/search/{search}": {
|
"/search/{search}": {
|
||||||
"get": {
|
"get": {
|
||||||
"tags": [
|
"tags": [
|
||||||
"oc-peer/controllersPeerController"
|
"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/": {
|
"/status/": {
|
||||||
"post": {
|
"post": {
|
||||||
"tags": [
|
"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/": {
|
"/version/": {
|
||||||
"get": {
|
"get": {
|
||||||
"tags": [
|
"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": {
|
"definitions": {
|
||||||
|
|||||||
@@ -10,30 +10,9 @@ info:
|
|||||||
license:
|
license:
|
||||||
name: AGPL
|
name: AGPL
|
||||||
url: https://www.gnu.org/licenses/agpl-3.0.html
|
url: https://www.gnu.org/licenses/agpl-3.0.html
|
||||||
basePath: /oc/
|
basePath: /oc
|
||||||
paths:
|
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:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- oc-peer/controllersPeerController
|
- oc-peer/controllersPeerController
|
||||||
@@ -49,7 +28,7 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: '{peer} models.peer'
|
description: '{peer} models.peer'
|
||||||
/peer/{id}:
|
/{id}:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- oc-peer/controllersPeerController
|
- oc-peer/controllersPeerController
|
||||||
@@ -66,7 +45,7 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: '{peer} models.peer'
|
description: '{peer} models.peer'
|
||||||
/peer/{id}/blacklist:
|
/{id}/blacklist:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- oc-peer/controllersPeerController
|
- oc-peer/controllersPeerController
|
||||||
@@ -83,7 +62,24 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: '{peer} models.peer'
|
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:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- oc-peer/controllersPeerController
|
- oc-peer/controllersPeerController
|
||||||
@@ -100,7 +96,7 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: '{peer} models.peer'
|
description: '{peer} models.peer'
|
||||||
/peer/{id}/undo_state:
|
/{id}/undo_state:
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
- oc-peer/controllersPeerController
|
- oc-peer/controllersPeerController
|
||||||
@@ -117,41 +113,7 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: '{peer} models.peer'
|
description: '{peer} models.peer'
|
||||||
/peer/{id}/unknown:
|
/search/{search}:
|
||||||
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}:
|
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
- oc-peer/controllersPeerController
|
- oc-peer/controllersPeerController
|
||||||
@@ -189,6 +151,23 @@ paths:
|
|||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: '{status} models.status'
|
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/:
|
/version/:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
Reference in New Issue
Block a user