Peer Evolve
This commit is contained in:
@@ -233,15 +233,20 @@ func GetConfLoader() *onion.Onion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Request struct {
|
type Request struct {
|
||||||
collection LibDataEnum
|
Collection LibDataEnum
|
||||||
user string
|
User string
|
||||||
peerID string
|
PeerID string
|
||||||
groups []string
|
Groups []string
|
||||||
caller *tools.HTTPCaller
|
Caller *tools.HTTPCaller
|
||||||
|
admin bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRequest(collection LibDataEnum, user string, peerID string, groups []string, caller *tools.HTTPCaller) *Request {
|
func NewRequest(collection LibDataEnum, user string, peerID string, groups []string, caller *tools.HTTPCaller) *Request {
|
||||||
return &Request{collection: collection, user: user, peerID: peerID, groups: groups, caller: caller}
|
return &Request{Collection: collection, User: user, PeerID: peerID, Groups: groups, Caller: caller}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRequestAdmin(collection LibDataEnum, user string, peerID string, groups []string, caller *tools.HTTPCaller) *Request {
|
||||||
|
return &Request{Collection: collection, User: user, PeerID: peerID, Groups: groups, Caller: caller, admin: true}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -270,11 +275,12 @@ func (r *Request) Search(filters *dbs.Filters, word string, isDraft bool) (data
|
|||||||
data = LibDataShallow{Data: nil, Code: 500, Err: "Panic recovered in LoadAll : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibDataShallow{Data: nil, Code: 500, Err: "Panic recovered in LoadAll : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).Search(filters, word, isDraft)
|
}).Search(filters, word, isDraft)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
data = LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
||||||
@@ -297,11 +303,12 @@ func (r *Request) LoadAll(isDraft bool) (data LibDataShallow) {
|
|||||||
data = LibDataShallow{Data: nil, Code: 500, Err: "Panic recovered in LoadAll : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibDataShallow{Data: nil, Code: 500, Err: "Panic recovered in LoadAll : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).LoadAll(isDraft)
|
}).LoadAll(isDraft)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
data = LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
||||||
@@ -325,11 +332,12 @@ func (r *Request) LoadOne(id string) (data LibData) {
|
|||||||
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in LoadOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in LoadOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).LoadOne(id)
|
}).LoadOne(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibData{Data: d, Code: code, Err: err.Error()}
|
data = LibData{Data: d, Code: code, Err: err.Error()}
|
||||||
@@ -354,12 +362,13 @@ func (r *Request) UpdateOne(set map[string]interface{}, id string) (data LibData
|
|||||||
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in UpdateOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in UpdateOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
model := models.Model(r.collection.EnumIndex())
|
model := models.Model(r.Collection.EnumIndex())
|
||||||
d, code, err := model.GetAccessor(&tools.APIRequest{
|
d, code, err := model.GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).UpdateOne(model.Deserialize(set, model), id)
|
}).UpdateOne(model.Deserialize(set, model), id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibData{Data: d, Code: code, Err: err.Error()}
|
data = LibData{Data: d, Code: code, Err: err.Error()}
|
||||||
@@ -383,11 +392,12 @@ func (r *Request) DeleteOne(id string) (data LibData) {
|
|||||||
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in DeleteOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in DeleteOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).DeleteOne(id)
|
}).DeleteOne(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibData{Data: d, Code: code, Err: err.Error()}
|
data = LibData{Data: d, Code: code, Err: err.Error()}
|
||||||
@@ -411,12 +421,13 @@ func (r *Request) StoreOne(object map[string]interface{}) (data LibData) {
|
|||||||
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in StoreOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in StoreOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
model := models.Model(r.collection.EnumIndex())
|
model := models.Model(r.Collection.EnumIndex())
|
||||||
d, code, err := model.GetAccessor(&tools.APIRequest{
|
d, code, err := model.GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).StoreOne(model.Deserialize(object, model))
|
}).StoreOne(model.Deserialize(object, model))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibData{Data: d, Code: code, Err: err.Error()}
|
data = LibData{Data: d, Code: code, Err: err.Error()}
|
||||||
@@ -440,12 +451,13 @@ func (r *Request) CopyOne(object map[string]interface{}) (data LibData) {
|
|||||||
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in UpdateOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
data = LibData{Data: nil, Code: 500, Err: "Panic recovered in UpdateOne : " + fmt.Sprintf("%v", r) + " - " + string(debug.Stack())}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
model := models.Model(r.collection.EnumIndex())
|
model := models.Model(r.Collection.EnumIndex())
|
||||||
d, code, err := model.GetAccessor(&tools.APIRequest{
|
d, code, err := model.GetAccessor(&tools.APIRequest{
|
||||||
Caller: r.caller,
|
Caller: r.Caller,
|
||||||
Username: r.user,
|
Username: r.User,
|
||||||
PeerID: r.peerID,
|
PeerID: r.PeerID,
|
||||||
Groups: r.groups,
|
Groups: r.Groups,
|
||||||
|
Admin: r.admin,
|
||||||
}).CopyOne(model.Deserialize(object, model))
|
}).CopyOne(model.Deserialize(object, model))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
data = LibData{Data: d, Code: code, Err: err.Error()}
|
data = LibData{Data: d, Code: code, Err: err.Error()}
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ const (
|
|||||||
SELF
|
SELF
|
||||||
PARTNER
|
PARTNER
|
||||||
BLACKLIST
|
BLACKLIST
|
||||||
UNKNOWN
|
PENDING
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m PeerRelation) String() string {
|
func (m PeerRelation) String() string {
|
||||||
return [...]string{"NONE", "SELF", "PARTNER", "BLACKLIST"}[m]
|
return [...]string{"NONE", "SELF", "PARTNER", "BLACKLIST", "PENDING"}[m]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m PeerRelation) EnumIndex() int {
|
func (m PeerRelation) EnumIndex() int {
|
||||||
@@ -63,15 +63,17 @@ func IsMySelf(peerID string) (bool, string) {
|
|||||||
type Peer struct {
|
type Peer struct {
|
||||||
utils.AbstractObject
|
utils.AbstractObject
|
||||||
|
|
||||||
PeerID string `json:"peer_id" bson:"peer_id" validate:"required"`
|
Verify bool `json:"verify" bson:"verify"`
|
||||||
Url string `json:"url" bson:"url" validate:"required"` // Url is the URL of the peer (base64url)
|
PartnershipPending *PeerRelation `json:"partnership_pending" bson:"partnership_pending"`
|
||||||
NATSUrl string `json:"nats_url" bson:"nats_url" validate:"required"`
|
PeerID string `json:"peer_id" bson:"peer_id" validate:"required"`
|
||||||
WalletAddress string `json:"wallet_address" bson:"wallet_address" validate:"required"` // WalletAddress is the wallet address of the peer
|
Url string `json:"url" bson:"url" validate:"required"` // Url is the URL of the peer (base64url)
|
||||||
PublicKey string `json:"public_key" bson:"public_key" validate:"required"` // PublicKey is the public key of the peer
|
NATSUrl string `json:"nats_url" bson:"nats_url" validate:"required"`
|
||||||
State PeerState `json:"state" bson:"state" default:"0"`
|
WalletAddress string `json:"wallet_address" bson:"wallet_address" validate:"required"` // WalletAddress is the wallet address of the peer
|
||||||
Relation PeerRelation `json:"relation" bson:"state" default:"0"`
|
PublicKey string `json:"public_key" bson:"public_key" validate:"required"` // PublicKey is the public key of the peer
|
||||||
ServicesState map[string]int `json:"services_state,omitempty" bson:"services_state,omitempty"`
|
State PeerState `json:"state" bson:"state" default:"0"`
|
||||||
FailedExecution []PeerExecution `json:"failed_execution" bson:"failed_execution"` // FailedExecution is the list of failed executions, to be retried
|
Relation PeerRelation `json:"relation" bson:"state" default:"0"`
|
||||||
|
ServicesState map[string]int `json:"services_state,omitempty" bson:"services_state,omitempty"`
|
||||||
|
FailedExecution []PeerExecution `json:"failed_execution" bson:"failed_execution"` // FailedExecution is the list of failed executions, to be retried
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ao *Peer) VerifyAuth(callName string, request *tools.APIRequest) bool {
|
func (ao *Peer) VerifyAuth(callName string, request *tools.APIRequest) bool {
|
||||||
|
|||||||
@@ -102,6 +102,8 @@ func (ao *AbstractObject) VerifyAuth(callName string, request *tools.APIRequest)
|
|||||||
return (ao.AccessMode == Public && callName == "get") || request.Admin || (request != nil && ao.CreatorID == request.PeerID && request.PeerID != "")
|
return (ao.AccessMode == Public && callName == "get") || request.Admin || (request != nil && ao.CreatorID == request.PeerID && request.PeerID != "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO : check write per auth
|
||||||
|
|
||||||
func (ao *AbstractObject) GetObjectFilters(search string) *dbs.Filters {
|
func (ao *AbstractObject) GetObjectFilters(search string) *dbs.Filters {
|
||||||
if search == "*" {
|
if search == "*" {
|
||||||
search = ""
|
search = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user