new route Nano + Master
This commit is contained in:
+125
-5
@@ -8,6 +8,7 @@ import (
|
||||
"strconv"
|
||||
|
||||
oclib "cloud.o-forge.io/core/oc-lib"
|
||||
"cloud.o-forge.io/core/oc-lib/config"
|
||||
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||
"cloud.o-forge.io/core/oc-lib/models/peer"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
@@ -22,21 +23,40 @@ type PeerController struct {
|
||||
|
||||
// @Title Search
|
||||
// @Description search workspace
|
||||
// @Param type path string true "the type you want to get"
|
||||
// @Param search path string true "the word search you want to get"
|
||||
// @Param is_draft query string false
|
||||
// @Param offset query string false
|
||||
// @Param limit query string false
|
||||
// @Success 200 {workspace} models.workspace
|
||||
// @router /search/:search [get]
|
||||
// @router /:type/search/:search [get]
|
||||
func (o *PeerController) Search() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
// store and return Id or post with UUIDLibDataEnum
|
||||
search := o.Ctx.Input.Param(":search")
|
||||
typ := o.Ctx.Input.Param(":type")
|
||||
isDraft := o.Ctx.Input.Query("is_draft")
|
||||
offset, _ := strconv.Atoi(o.Ctx.Input.Query("offset"))
|
||||
limit, _ := strconv.Atoi(o.Ctx.Input.Query("limit"))
|
||||
var filter *dbs.Filters
|
||||
fmt.Println("TYP", typ)
|
||||
relation := peer.GetRelationPath(typ)
|
||||
if relation != -1 {
|
||||
filter = &dbs.Filters{
|
||||
And: map[string][]dbs.Filter{ // search by name if no filters are provided
|
||||
"relation": {{Operator: dbs.EQUAL.String(), Value: relation}},
|
||||
},
|
||||
Or: map[string][]dbs.Filter{ // search by name if no filters are providedz
|
||||
"abstractobject.name": {{Operator: dbs.LIKE.String(), Value: search}},
|
||||
"url": {{Operator: dbs.LIKE.String(), Value: search}},
|
||||
"peer_id": {{Operator: dbs.LIKE.String(), Value: search}},
|
||||
},
|
||||
}
|
||||
search = ""
|
||||
}
|
||||
fmt.Println(filter, relation, "<", search, ">")
|
||||
o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search(
|
||||
nil, search, isDraft == "true", int64(offset), int64(limit))
|
||||
filter, search, isDraft == "true", int64(offset), int64(limit))
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
@@ -47,16 +67,19 @@ func (o *PeerController) Search() {
|
||||
// @Param limit query string false
|
||||
// @Param data body json true "body for data content (Json format)"
|
||||
// @Success 200 {workspace} models.workspace
|
||||
// @router /extended/search [post]
|
||||
// @router /:type/extended/search [post]
|
||||
func (o *PeerController) SearchExtended() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
// store and return Id or post with UUIDLibDataEnum
|
||||
isDraft := o.Ctx.Input.Query("is_draft")
|
||||
typ := o.Ctx.Input.Param(":type")
|
||||
offset, _ := strconv.Atoi(o.Ctx.Input.Query("offset"))
|
||||
limit, _ := strconv.Atoi(o.Ctx.Input.Query("limit"))
|
||||
var res map[string]interface{}
|
||||
json.Unmarshal(o.Ctx.Input.CopyBody(100000), &res)
|
||||
fmt.Println(res, oclib.FiltersFromFlatMap(res, &peer.Peer{}))
|
||||
relation := peer.GetRelationPath(typ)
|
||||
res["relation"] = relation
|
||||
data := oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search(
|
||||
oclib.FiltersFromFlatMap(res, &peer.Peer{}), "", isDraft == "true", int64(offset), int64(limit))
|
||||
o.Data["json"] = data
|
||||
@@ -144,6 +167,7 @@ func (o *PeerController) Valid() {
|
||||
"relation": peer.MASTER,
|
||||
}, l.ToPeer().GetID())
|
||||
fmt.Println(l.Data, data.Data)
|
||||
data.Data.(*peer.Peer).MasterID = masterPeerID
|
||||
data.Data.(*peer.Peer).Relation = peer.NANO // dest is a nano
|
||||
if data.Data != nil {
|
||||
b, _ := json.Marshal(data.Data)
|
||||
@@ -162,6 +186,34 @@ func (o *PeerController) Valid() {
|
||||
o.Data["json"] = data
|
||||
o.ServeJSON()
|
||||
return
|
||||
} else if l.Data != nil && l.ToPeer().Verify && (l.ToPeer().Relation == peer.NANO || l.ToPeer().Relation == peer.PENDING_NANO) {
|
||||
masterPeerID, err := oclib.GetMySelf()
|
||||
if err == nil {
|
||||
data := req.UpdateOne(map[string]interface{}{
|
||||
"verify": false,
|
||||
"relation": peer.NANO,
|
||||
}, l.ToPeer().GetID())
|
||||
fmt.Println(l.Data, data.Data)
|
||||
data.Data.(*peer.Peer).MasterID = masterPeerID.GetID()
|
||||
data.Data.(*peer.Peer).Relation = peer.MASTER // dest is a nano
|
||||
if data.Data != nil {
|
||||
b, _ := json.Marshal(data.Data)
|
||||
go infrastructure.EmitNATS(user, groups, tools.PropalgationMessage{
|
||||
DataType: tools.PEER.EnumIndex(),
|
||||
Action: tools.PB_CREATE,
|
||||
Payload: b,
|
||||
})
|
||||
}
|
||||
// This node is now a NANO of the confirmed master: stamp its libp2p PeerID on self.
|
||||
if self, serr := oclib.GetMySelf(); serr == nil && self != nil {
|
||||
oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil).UpdateOne(map[string]interface{}{
|
||||
"master_id": masterPeerID.GetID(),
|
||||
}, self.GetID())
|
||||
}
|
||||
o.Data["json"] = data
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
}
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
@@ -201,6 +253,62 @@ func (o *PeerController) Add() {
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
// @Title Master
|
||||
// @Description add master peer by peerid
|
||||
// @Param id path string true "the peer id you want to blacklist"
|
||||
// @Success 200 {peer} models.peer
|
||||
// @router /master/:id [post]
|
||||
func (o *PeerController) Master() {
|
||||
if !config.GetConfig().IsNano {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 409,
|
||||
"error": "not nano built can't ask for master",
|
||||
}
|
||||
}
|
||||
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)
|
||||
p := data.ToPeer()
|
||||
if p.IsNano {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 409,
|
||||
"error": "is not Master built can't ask for master",
|
||||
}
|
||||
}
|
||||
o.changeRelation(id, p, user, groups, peer.MASTER, req)
|
||||
}
|
||||
|
||||
// @Title Nano
|
||||
// @Description add Nano peer by peerid
|
||||
// @Param id path string true "the peer id you want to blacklist"
|
||||
// @Success 200 {peer} models.peer
|
||||
// @router /nano/:id [post]
|
||||
func (o *PeerController) Nano() {
|
||||
if config.GetConfig().IsNano {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 409,
|
||||
"error": "nano built can't ask for nano",
|
||||
}
|
||||
}
|
||||
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)
|
||||
p := data.ToPeer()
|
||||
if !p.IsNano {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 409,
|
||||
"error": "is not Nano built can't ask for nano",
|
||||
}
|
||||
}
|
||||
o.changeRelation(id, p, user, groups, peer.NANO, req)
|
||||
}
|
||||
|
||||
// @Title known
|
||||
// @Description add kwown peer by peerid
|
||||
// @Param id path string true "the peer id you want to blacklist"
|
||||
@@ -221,6 +329,13 @@ func (o *PeerController) Known() {
|
||||
// @Success 200 {peer} models.peer
|
||||
// @router /partner/:id [post]
|
||||
func (o *PeerController) Partner() {
|
||||
if config.GetConfig().IsNano {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 409,
|
||||
"error": "nano built can't ask for partner",
|
||||
}
|
||||
}
|
||||
user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
id := o.Ctx.Input.Param(":id")
|
||||
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||
@@ -243,8 +358,13 @@ func (o *PeerController) Blacklist() {
|
||||
|
||||
// used from : peer ask, or response, only from peer origin is authorized to change...
|
||||
func (o *PeerController) changeRelation(id string, dest *peer.Peer, user string, groups []string, relation peer.PeerRelation, request *oclib.Request) {
|
||||
if dest.IsNano {
|
||||
fmt.Println("can't change relation on nano")
|
||||
if dest.IsNano && relation != peer.NANO {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 409,
|
||||
"error": "can't change relation on nano",
|
||||
}
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
infrastructure.SearchMu.Lock()
|
||||
|
||||
Reference in New Issue
Block a user