Peer Evolve

This commit is contained in:
mr
2026-01-22 15:55:27 +01:00
parent b987286759
commit 00bcca379f
3 changed files with 68 additions and 52 deletions

View File

@@ -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()}

View File

@@ -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 {

View File

@@ -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 = ""