mirror of
https://github.com/absmach/magistrala.git
synced 2026-06-23 04:10:28 +00:00
7f03134d8e
Property Based Tests / api-test (push) Has been cancelled
Continuous Delivery / lint-and-build (push) Has been cancelled
Deploy GitHub Pages / swagger-ui (push) Has been cancelled
CI Pipeline / Lint Proto (push) Has been cancelled
CI Pipeline / Detect Changes (push) Has been cancelled
Continuous Delivery / Build and Push Docker Images (push) Has been cancelled
CI Pipeline / lint-and-build (push) Has been cancelled
CI Pipeline / Test ${{ matrix.module }} (push) Has been cancelled
CI Pipeline / Upload Coverage (push) Has been cancelled
Signed-off-by: nyagamunene <stevenyaga2014@gmail.com> Signed-off-by: JeffMboya <jangina.mboya@gmail.com> Co-authored-by: JeffMboya <jangina.mboya@gmail.com>
82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
// Copyright (c) Abstract Machines
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package bootstrap
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// BindingRequest carries a user's intent to bind a named profile slot to
|
|
// a concrete resource.
|
|
type BindingRequest struct {
|
|
Slot string `json:"slot"`
|
|
Type string `json:"type"` // "client" | "channel" | "cert"
|
|
ResourceID string `json:"resource_id"` // ID of the resource in its owning service
|
|
}
|
|
|
|
// BindingSnapshot is a Bootstrap-owned point-in-time copy of the resource
|
|
// fields needed for template rendering. It is populated at binding time so
|
|
// that the render path never calls external services.
|
|
type BindingSnapshot struct {
|
|
ConfigID string `json:"config_id"`
|
|
Slot string `json:"slot"`
|
|
Type string `json:"type"`
|
|
ResourceID string `json:"resource_id"`
|
|
Snapshot map[string]any `json:"snapshot,omitempty"`
|
|
SecretSnapshot map[string]any `json:"secret_snapshot,omitempty"` // encrypted at rest
|
|
UpdatedAt time.Time `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
// BindingStore is the persistence interface for BindingSnapshots.
|
|
type BindingStore interface {
|
|
// Save upserts all given snapshots for the config.
|
|
Save(ctx context.Context, configID string, bindings []BindingSnapshot) error
|
|
|
|
// Retrieve returns all snapshots for the given config.
|
|
Retrieve(ctx context.Context, configID string) ([]BindingSnapshot, error)
|
|
|
|
// Delete removes the snapshot for a specific slot of a config.
|
|
Delete(ctx context.Context, configID, slot string) error
|
|
}
|
|
|
|
// ResolveRequest carries everything the BindingResolver needs to snapshot a
|
|
// set of resource bindings.
|
|
type ResolveRequest struct {
|
|
Enrollment Config
|
|
Token string
|
|
Requested []BindingRequest
|
|
}
|
|
|
|
// BindingResolver validates that requested resources exist in their owning
|
|
// services, verifies type and slot compatibility, and returns snapshots ready
|
|
// for storage. It is called at binding time only; the render path must not
|
|
// call it.
|
|
type BindingResolver interface {
|
|
Resolve(ctx context.Context, req ResolveRequest) ([]BindingSnapshot, error)
|
|
}
|
|
|
|
// RenderContext is the typed value injected into Go templates during rendering.
|
|
type RenderContext struct {
|
|
Device DeviceContext
|
|
Vars map[string]any
|
|
Bindings map[string]BindingContext
|
|
}
|
|
|
|
// DeviceContext holds enrollment identity fields available inside templates.
|
|
type DeviceContext struct {
|
|
ID string
|
|
ExternalID string
|
|
DomainID string
|
|
}
|
|
|
|
// BindingContext holds the resolved resource data available inside templates
|
|
// for a specific slot.
|
|
type BindingContext struct {
|
|
Type string
|
|
ID string
|
|
Snapshot map[string]any
|
|
Secret map[string]any
|
|
}
|