From a4ab3285e34c2a671de386f1ee361ec2cfc17e1f Mon Sep 17 00:00:00 2001 From: mr Date: Mon, 30 Mar 2026 10:21:09 +0200 Subject: [PATCH] Add attr inspired by docker --- entrypoint.go | 2 +- models/peer/peer.go | 13 +++++++------ models/peer/peer_mongo_accessor.go | 17 +++++++++++++++++ models/resources/processing.go | 4 +++- models/resources/resource.go | 3 +++ models/resources/resource_accessor.go | 11 +++++------ tools/enums.go | 2 +- 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/entrypoint.go b/entrypoint.go index 300e100..baba381 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -203,7 +203,7 @@ func ExtractTokenInfo(request http.Request) (string, string, []string) { if reqToken != "" { token := strings.Split(reqToken, ".") if len(token) > 2 { - bytes, err := base64.StdEncoding.DecodeString(token[2]) + bytes, err := base64.RawURLEncoding.DecodeString(token[1]) if err != nil { return "", "", []string{} } diff --git a/models/peer/peer.go b/models/peer/peer.go index 0819b2e..b18ca50 100644 --- a/models/peer/peer.go +++ b/models/peer/peer.go @@ -44,19 +44,20 @@ func (m PeerRelation) EnumIndex() int { // BehaviorWarning records a single misbehavior observed by a trusted service. type BehaviorWarning struct { - At time.Time `json:"at" bson:"at"` - ReporterApp string `json:"reporter_app" bson:"reporter_app"` + At time.Time `json:"at" bson:"at"` + ReporterApp string `json:"reporter_app" bson:"reporter_app"` Severity tools.BehaviorSeverity `json:"severity" bson:"severity"` - Reason string `json:"reason" bson:"reason"` - Evidence string `json:"evidence,omitempty" bson:"evidence,omitempty"` + Reason string `json:"reason" bson:"reason"` + Evidence string `json:"evidence,omitempty" bson:"evidence,omitempty"` } // Peer is a struct that represents a peer type Peer struct { utils.AbstractObject - Verify bool `json:"verify" bson:"verify"` - PeerID string `json:"peer_id" bson:"peer_id" validate:"required"` + Verify bool `json:"verify" bson:"verify"` + OrganizationID string `json:"organization_id" bson:"organization_id"` + PeerID string `json:"peer_id" bson:"peer_id" validate:"required"` APIUrl string `json:"api_url" bson:"api_url" validate:"required"` // Url is the URL of the peer (base64url) StreamAddress string `json:"stream_address" bson:"stream_address" validate:"required"` // Url is the URL of the peer (base64url) diff --git a/models/peer/peer_mongo_accessor.go b/models/peer/peer_mongo_accessor.go index 08a0399..9a52d7a 100644 --- a/models/peer/peer_mongo_accessor.go +++ b/models/peer/peer_mongo_accessor.go @@ -42,6 +42,23 @@ func (wfa *peerMongoAccessor) ShouldVerifyAuth() bool { return !wfa.OverrideAuth } +/* +TODO : organization_ID est un peer_ID duquel on se revendique faire parti. +Ca implique une clé d'organisation + une demande d'intégration. + +Slave-Master IOT +*/ +func (dca *peerMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, int, error) { + pp, _ := utils.GetMySelf(NewAccessor(&tools.APIRequest{Admin: true})) + if data != nil { + d := data.(*Peer) + if pp != nil && d.OrganizationID != "" && d.OrganizationID == pp.(*Peer).OrganizationID { + d.Relation = PARTNER // defaulting on partner if same organization. + } + } + return utils.GenericStoreOne(data, dca) +} + /* * Nothing special here, just the basic CRUD operations */ diff --git a/models/resources/processing.go b/models/resources/processing.go index c1d624f..5f227b6 100755 --- a/models/resources/processing.go +++ b/models/resources/processing.go @@ -47,7 +47,9 @@ type ProcessingResourceAccess struct { type ProcessingInstance struct { ResourceInstance[*ResourcePartnerShip[*ProcessingResourcePricingProfile]] - Access *ProcessingResourceAccess `json:"access,omitempty" bson:"access,omitempty"` // Access is the access + Access *ProcessingResourceAccess `json:"access,omitempty" bson:"access,omitempty"` // Access is the access + SizeGB int `json:"size_gb,omitempty" bson:"size_gb,omitempty"` + ContentType string `json:"content_type,omitempty" bson:"content_type,omitempty"` } func (ri *ProcessingInstance) StoreDraftDefault() { diff --git a/models/resources/resource.go b/models/resources/resource.go index e1943a0..9a21f5a 100755 --- a/models/resources/resource.go +++ b/models/resources/resource.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "slices" + "time" "cloud.o-forge.io/core/oc-lib/config" "cloud.o-forge.io/core/oc-lib/dbs" @@ -212,6 +213,8 @@ type GeoPoint struct { type ResourceInstance[T ResourcePartnerITF] struct { utils.AbstractObject + ContentType string `json:"content_type,omitempty" bson:"content_type,omitempty"` + LastUpdate time.Time `json:"last_update,omitempty" bson:"last_update,omitempty"` Origin OriginMeta `json:"origin,omitempty" bson:"origin,omitempty"` Location GeoPoint `json:"location,omitempty" bson:"location,omitempty"` Country countries.CountryCode `json:"country,omitempty" bson:"country,omitempty"` diff --git a/models/resources/resource_accessor.go b/models/resources/resource_accessor.go index cd0ecb2..6daa0d2 100755 --- a/models/resources/resource_accessor.go +++ b/models/resources/resource_accessor.go @@ -108,12 +108,11 @@ func (a *ResourceMongoAccessor[T]) GetExec(isDraft bool) func(utils.DBObject) ut func (abs *ResourceMongoAccessor[T]) GetObjectFilters(search string) *dbs.Filters { return &dbs.Filters{ Or: map[string][]dbs.Filter{ // filter by like name, short_description, description, owner, url if no filters are provided - "abstractinstanciatedresource.abstractresource.abstractobject.name": {{Operator: dbs.LIKE.String(), Value: search}}, - "abstractinstanciatedresource.abstractresource.type": {{Operator: dbs.LIKE.String(), Value: search}}, - "abstractinstanciatedresource.abstractresource.short_description": {{Operator: dbs.LIKE.String(), Value: search}}, - "abstractinstanciatedresource.abstractresource.description": {{Operator: dbs.LIKE.String(), Value: search}}, - "abstractinstanciatedresource.abstractresource.owners.name": {{Operator: dbs.LIKE.String(), Value: search}}, - "abstractinstanciatedresource.abstractresource.abstractobject.creator_id": {{Operator: dbs.EQUAL.String(), Value: search}}, + "abstractinstanciatedresource.abstractresource.abstractobject.name": {{Operator: dbs.LIKE.String(), Value: search}}, + "abstractinstanciatedresource.abstractresource.type": {{Operator: dbs.LIKE.String(), Value: search}}, + "abstractinstanciatedresource.abstractresource.short_description": {{Operator: dbs.LIKE.String(), Value: search}}, + "abstractinstanciatedresource.abstractresource.description": {{Operator: dbs.LIKE.String(), Value: search}}, + "abstractinstanciatedresource.abstractresource.owners.name": {{Operator: dbs.LIKE.String(), Value: search}}, }, } } diff --git a/tools/enums.go b/tools/enums.go index 98f54d7..33256d7 100644 --- a/tools/enums.go +++ b/tools/enums.go @@ -152,7 +152,7 @@ func DataTypeList() []DataType { return []DataType{DATA_RESOURCE, PROCESSING_RESOURCE, STORAGE_RESOURCE, COMPUTE_RESOURCE, WORKFLOW_RESOURCE, WORKFLOW, WORKFLOW_EXECUTION, WORKSPACE, PEER, COLLABORATIVE_AREA, RULE, BOOKING, WORKFLOW_HISTORY, WORKSPACE_HISTORY, ORDER, PURCHASE_RESOURCE, - LIVE_DATACENTER, LIVE_STORAGE, BILL, NATIVE_TOOL} + LIVE_DATACENTER, LIVE_STORAGE, BILL, NATIVE_TOOL, EXECUTION_VERIFICATION, ALLOWED_IMAGE} } type PropalgationMessage struct {