Peer Evolve
This commit is contained in:
@@ -233,15 +233,20 @@ func GetConfLoader() *onion.Onion {
|
||||
}
|
||||
|
||||
type Request struct {
|
||||
collection LibDataEnum
|
||||
user string
|
||||
peerID string
|
||||
groups []string
|
||||
caller *tools.HTTPCaller
|
||||
Collection LibDataEnum
|
||||
User string
|
||||
PeerID string
|
||||
Groups []string
|
||||
Caller *tools.HTTPCaller
|
||||
admin bool
|
||||
}
|
||||
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).Search(filters, word, isDraft)
|
||||
if err != nil {
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).LoadAll(isDraft)
|
||||
if err != nil {
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).LoadOne(id)
|
||||
if err != nil {
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
model := models.Model(r.collection.EnumIndex())
|
||||
model := models.Model(r.Collection.EnumIndex())
|
||||
d, code, err := model.GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).UpdateOne(model.Deserialize(set, model), id)
|
||||
if err != nil {
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
d, code, err := models.Model(r.collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
d, code, err := models.Model(r.Collection.EnumIndex()).GetAccessor(&tools.APIRequest{
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).DeleteOne(id)
|
||||
if err != nil {
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
model := models.Model(r.collection.EnumIndex())
|
||||
model := models.Model(r.Collection.EnumIndex())
|
||||
d, code, err := model.GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).StoreOne(model.Deserialize(object, model))
|
||||
if err != nil {
|
||||
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())}
|
||||
}
|
||||
}()
|
||||
model := models.Model(r.collection.EnumIndex())
|
||||
model := models.Model(r.Collection.EnumIndex())
|
||||
d, code, err := model.GetAccessor(&tools.APIRequest{
|
||||
Caller: r.caller,
|
||||
Username: r.user,
|
||||
PeerID: r.peerID,
|
||||
Groups: r.groups,
|
||||
Caller: r.Caller,
|
||||
Username: r.User,
|
||||
PeerID: r.PeerID,
|
||||
Groups: r.Groups,
|
||||
Admin: r.admin,
|
||||
}).CopyOne(model.Deserialize(object, model))
|
||||
if err != nil {
|
||||
data = LibData{Data: d, Code: code, Err: err.Error()}
|
||||
|
||||
@@ -30,11 +30,11 @@ const (
|
||||
SELF
|
||||
PARTNER
|
||||
BLACKLIST
|
||||
UNKNOWN
|
||||
PENDING
|
||||
)
|
||||
|
||||
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 {
|
||||
@@ -63,15 +63,17 @@ func IsMySelf(peerID string) (bool, string) {
|
||||
type Peer struct {
|
||||
utils.AbstractObject
|
||||
|
||||
PeerID string `json:"peer_id" bson:"peer_id" validate:"required"`
|
||||
Url string `json:"url" bson:"url" validate:"required"` // Url is the URL of the peer (base64url)
|
||||
NATSUrl string `json:"nats_url" bson:"nats_url" validate:"required"`
|
||||
WalletAddress string `json:"wallet_address" bson:"wallet_address" validate:"required"` // WalletAddress is the wallet address of the peer
|
||||
PublicKey string `json:"public_key" bson:"public_key" validate:"required"` // PublicKey is the public key of the peer
|
||||
State PeerState `json:"state" bson:"state" default:"0"`
|
||||
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
|
||||
Verify bool `json:"verify" bson:"verify"`
|
||||
PartnershipPending *PeerRelation `json:"partnership_pending" bson:"partnership_pending"`
|
||||
PeerID string `json:"peer_id" bson:"peer_id" validate:"required"`
|
||||
Url string `json:"url" bson:"url" validate:"required"` // Url is the URL of the peer (base64url)
|
||||
NATSUrl string `json:"nats_url" bson:"nats_url" validate:"required"`
|
||||
WalletAddress string `json:"wallet_address" bson:"wallet_address" validate:"required"` // WalletAddress is the wallet address of the peer
|
||||
PublicKey string `json:"public_key" bson:"public_key" validate:"required"` // PublicKey is the public key of the peer
|
||||
State PeerState `json:"state" bson:"state" default:"0"`
|
||||
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 {
|
||||
|
||||
@@ -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 != "")
|
||||
}
|
||||
|
||||
// TODO : check write per auth
|
||||
|
||||
func (ao *AbstractObject) GetObjectFilters(search string) *dbs.Filters {
|
||||
if search == "*" {
|
||||
search = ""
|
||||
|
||||
Reference in New Issue
Block a user