From 00bcca379fe66afaba0ac0708654c7c3acaff190 Mon Sep 17 00:00:00 2001 From: mr Date: Thu, 22 Jan 2026 15:55:27 +0100 Subject: [PATCH] Peer Evolve --- entrypoint.go | 94 ++++++++++++++++++++++----------------- models/peer/peer.go | 24 +++++----- models/utils/abstracts.go | 2 + 3 files changed, 68 insertions(+), 52 deletions(-) diff --git a/entrypoint.go b/entrypoint.go index 30b2b84..b737a7f 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -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()} diff --git a/models/peer/peer.go b/models/peer/peer.go index be219a7..b214500 100644 --- a/models/peer/peer.go +++ b/models/peer/peer.go @@ -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 { diff --git a/models/utils/abstracts.go b/models/utils/abstracts.go index 8776cb8..d6694f2 100755 --- a/models/utils/abstracts.go +++ b/models/utils/abstracts.go @@ -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 = ""