add partnershipping mechanism
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
oclib "cloud.o-forge.io/core/oc-lib"
|
||||
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||
"cloud.o-forge.io/core/oc-lib/models/peer"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
@@ -28,23 +28,6 @@ func (o *PeerController) Search() {
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
// @Title Update
|
||||
// @Description create peers
|
||||
// @Param id path string true "the peer id you want to get"
|
||||
// @Param body body models.peer true "The peer content"
|
||||
// @Success 200 {object} models.peer
|
||||
// @router /:id [put]
|
||||
func (o *PeerController) Put() {
|
||||
// store and return Id or post with UUID
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
var res map[string]interface{}
|
||||
id := o.Ctx.Input.Param(":id")
|
||||
json.Unmarshal(o.Ctx.Input.CopyBody(10000), &res)
|
||||
data := oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).UpdateOne(res, id)
|
||||
o.Data["json"] = data
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
// @Title GetAll
|
||||
// @Description find all peer
|
||||
// @Param is_draft query string false
|
||||
@@ -53,7 +36,16 @@ func (o *PeerController) Put() {
|
||||
func (o *PeerController) GetAll() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
isDraft := o.Ctx.Input.Query("is_draft")
|
||||
o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).LoadAll(isDraft == "true")
|
||||
verify := o.Ctx.Input.Query("verify")
|
||||
if verify == "true" {
|
||||
o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search(&dbs.Filters{
|
||||
And: map[string][]dbs.Filter{
|
||||
"verify": {{Operator: dbs.EQUAL.String(), Value: true}},
|
||||
},
|
||||
}, "", false)
|
||||
} else {
|
||||
o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).LoadAll(isDraft == "true")
|
||||
}
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
@@ -69,18 +61,83 @@ func (o *PeerController) Get() {
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
// @Title Partner
|
||||
// @Description add partner peer by peerid
|
||||
// @Param id path string true "the peer id you want to partner"
|
||||
// @Title Link
|
||||
// @Description find peer by peerid
|
||||
// @Param id path string true "the peer id you want to get"
|
||||
// @Success 200 {peer} models.peer
|
||||
// @router /:id/partner [post]
|
||||
func (o *PeerController) Nano() {
|
||||
// @router /:from/link/:relation [get]
|
||||
func (o *PeerController) Link() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
id := o.Ctx.Input.Param(":from")
|
||||
if ok, _ := peer.IsMySelf(peerID); ok {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": "can't link relation to ourself",
|
||||
}
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
if ok, _ := peer.IsMySelf(id); !ok {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": "can't link relation",
|
||||
}
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
relation := o.Ctx.Input.Param(":relation") // as partner, blacklist, unknown
|
||||
req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil)
|
||||
l := req.LoadOne(id)
|
||||
if p := l.ToPeer(); p != nil {
|
||||
if peer.GetRelationPath(relation) != -1 {
|
||||
o.Data["json"] = req.UpdateOne(map[string]interface{}{
|
||||
"relation": peer.GetRelationPath(relation),
|
||||
"verify": !(p.Relation == peer.PENDING_PARTNER || relation == peer.NONE.Path()),
|
||||
}, p.GetID())
|
||||
return
|
||||
}
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": "relation unavailable",
|
||||
}
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 404,
|
||||
"error": "peer not found",
|
||||
}
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
// @Title unknown
|
||||
// @Description add unknown peer by peerid
|
||||
// @Param id path string true "the peer id you want to blacklist"
|
||||
// @Success 200 {peer} models.peer
|
||||
// @router /:id/unknown [post]
|
||||
func (o *PeerController) Unknown() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
id := o.Ctx.Input.Param(":id")
|
||||
o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).UpdateOne(map[string]interface{}{
|
||||
"state": peer.PARTNER,
|
||||
}, id)
|
||||
o.ServeJSON()
|
||||
req := oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil)
|
||||
data := req.LoadOne(id)
|
||||
o.changeRelation(data.ToPeer(), 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 /:id/partner [post]
|
||||
func (o *PeerController) Partner() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
id := o.Ctx.Input.Param(":id")
|
||||
req := oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil)
|
||||
data := req.LoadOne(id)
|
||||
o.changeRelation(data.ToPeer(), peer.PARTNER, req)
|
||||
}
|
||||
|
||||
// @Title Blacklist
|
||||
@@ -92,8 +149,59 @@ func (o *PeerController) Blacklist() {
|
||||
user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request)
|
||||
id := o.Ctx.Input.Param(":id")
|
||||
o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).UpdateOne(map[string]interface{}{
|
||||
"state": peer.BLACKLIST,
|
||||
"relation": peer.BLACKLIST,
|
||||
}, id)
|
||||
}
|
||||
|
||||
// used from : peer ask, or response, only from peer origin is authorized to change...
|
||||
func (o *PeerController) changeRelation(dest *peer.Peer, relation peer.PeerRelation, request *oclib.Request) {
|
||||
if ok, _ := peer.IsMySelf(request.PeerID); !ok {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": "can't change relation",
|
||||
}
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
if ok, _ := peer.IsMySelf(dest.GetID()); ok {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": "can't change ourself",
|
||||
}
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
// store and return Id or post with UUID
|
||||
if dest != nil {
|
||||
if !dest.Verify && relation == peer.PARTNER {
|
||||
relation = peer.PENDING_PARTNER
|
||||
if _, err := tools.NewHTTPCaller(map[tools.DataType]map[tools.METHOD]string{}).CallGet(dest.Url, "/"+request.PeerID+"/link/"+relation.Path()); err != nil {
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": err.Error(),
|
||||
}
|
||||
o.ServeJSON()
|
||||
}
|
||||
}
|
||||
if dest.Verify && relation == peer.PENDING_PARTNER {
|
||||
relation = peer.PARTNER
|
||||
}
|
||||
data := request.UpdateOne(map[string]interface{}{
|
||||
"relation": relation,
|
||||
}, dest.GetID())
|
||||
|
||||
o.Data["json"] = data
|
||||
o.ServeJSON()
|
||||
return
|
||||
}
|
||||
o.Data["json"] = map[string]interface{}{
|
||||
"data": nil,
|
||||
"code": 400,
|
||||
"error": "peer not found.",
|
||||
}
|
||||
o.ServeJSON()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user