Documentation
¶
Index ¶
- Constants
- Variables
- func AddRecoveryKey(ctx context.Context, rawStore store.ObjectStore, kc keychain.Chain, ...) (string, error)
- func ChangePassword(ctx context.Context, rawStore store.ObjectStore, kc keychain.Chain, ...) error
- func EnsureProfilesMaps(cfg *ProfilesConfig)
- func SaveProfilesFile(path string, cfg *ProfilesConfig) error
- func UpgradeRepoFormat(ctx context.Context, rawStore store.ObjectStore, to int, encryptionKey []byte) error
- type AddRecoveryKeyOptions
- type BackupOption
- type BackupProfile
- type BackupResult
- type CatResult
- type CheckError
- type CheckOption
- type CheckResult
- type Client
- func (c *Client) Backup(ctx context.Context, src source.Source, opts ...BackupOption) (*BackupResult, error)
- func (c *Client) BreakLock(ctx context.Context) ([]*RepoLock, error)
- func (c *Client) Cat(ctx context.Context, keys ...string) ([]*CatResult, error)
- func (c *Client) Check(ctx context.Context, opts ...CheckOption) (*CheckResult, error)
- func (c *Client) Diff(ctx context.Context, snap1, snap2 string, opts ...DiffOption) (*DiffResult, error)
- func (c *Client) DiscoverSources(ctx context.Context) ([]DiscoveredSource, error)
- func (c *Client) Find(ctx context.Context, opts ...FindOption) (*FindResult, error)
- func (c *Client) Forget(ctx context.Context, snapshotID string, opts ...ForgetOption) (*ForgetResult, error)
- func (c *Client) ForgetPolicy(ctx context.Context, opts ...ForgetOption) (*PolicyResult, error)
- func (c *Client) List(ctx context.Context, opts ...ListOption) (*ListResult, error)
- func (c *Client) LsSnapshot(ctx context.Context, snapshotID string, opts ...LsSnapshotOption) (*LsSnapshotResult, error)
- func (c *Client) Prune(ctx context.Context, opts ...PruneOption) (*PruneResult, error)
- func (c *Client) Restore(ctx context.Context, w io.Writer, snapshotRef string, opts ...RestoreOption) (*RestoreResult, error)
- func (c *Client) RestoreToDir(ctx context.Context, outputDir, snapshotRef string, opts ...RestoreOption) (*RestoreResult, error)
- func (c *Client) Store() store.ObjectStore
- type ClientOption
- type DiffOption
- type DiffResult
- type DiscoveredSource
- type FileMatch
- type FileVersion
- type FindOption
- type FindQuery
- type FindResult
- type ForgetOption
- type ForgetResult
- type InitOption
- type InitResult
- type KMSClient
- type KeySlot
- type ListOption
- type ListResult
- type LsSnapshotOption
- type LsSnapshotResult
- type PasswordProvider
- type PasswordProviderFunc
- type PasswordString
- type Phase
- type PolicyResult
- type ProfileAuth
- type ProfileStore
- type ProfilesConfig
- type PruneOption
- type PruneResult
- type RepoConfig
- type RepoLock
- type RepoStatus
- type Reporter
- type RestoreOption
- type RestoreResult
- type SizeCompare
- type SizeOp
- type SnapshotRef
- type WorkstationApplyResult
- type WorkstationCoverageSummary
- type WorkstationFolderCandidate
- type WorkstationProfileDraft
- type WorkstationSetupOption
- type WorkstationSetupPlan
Constants ¶
const ( SizeAtLeast = engine.SizeAtLeast SizeAtMost = engine.SizeAtMost SizeExactly = engine.SizeExactly )
Variables ¶
var ( WithInitCredentials = engine.WithInitCredentials WithInitRecovery = engine.WithInitRecovery WithInitNoEncryption = engine.WithInitNoEncryption WithInitAdoptSlots = engine.WithInitAdoptSlots )
var ( WithVerbose = engine.WithVerbose WithBackupDryRun = engine.WithBackupDryRun WithIgnoreEmptySnapshot = engine.WithIgnoreEmptySnapshot WithTags = engine.WithTags WithGenerator = engine.WithGenerator WithMeta = engine.WithMeta WithExcludeHash = engine.WithExcludeHash WithWorkstationProfiles = engine.WithWorkstationProfiles WithWorkstationStoreRef = engine.WithWorkstationStoreRef )
var ( // ErrSnapshotNotFound means no snapshot matched a requested reference. ErrSnapshotNotFound = engine.ErrSnapshotNotFound // ErrSnapshotRefAmbiguous means more than one snapshot matched a hash prefix. ErrSnapshotRefAmbiguous = engine.ErrSnapshotRefAmbiguous WithRestoreDryRun = engine.WithRestoreDryRun WithRestoreVerbose = engine.WithRestoreVerbose WithRestorePath = engine.WithRestorePath WithRestoreNoVerify = engine.WithRestoreNoVerify )
var ( WithFindPattern = engine.WithFindPattern WithFindName = engine.WithFindName WithFindPath = engine.WithFindPath WithFindRegex = engine.WithFindRegex WithFindIgnoreCase = engine.WithFindIgnoreCase WithFindFileID = engine.WithFindFileID WithFindContentHash = engine.WithFindContentHash WithFindRef = engine.WithFindRef WithFindType = engine.WithFindType WithFindSize = engine.WithFindSize WithFindNewer = engine.WithFindNewer WithFindOlder = engine.WithFindOlder WithFindSnapshots = engine.WithFindSnapshots WithFindSource = engine.WithFindSource WithFindTags = engine.WithFindTags WithFindLatest = engine.WithFindLatest WithFindSince = engine.WithFindSince WithFindUntil = engine.WithFindUntil WithFindGroupByContent = engine.WithFindGroupByContent WithFindMaxResults = engine.WithFindMaxResults WithFindNoDelta = engine.WithFindNoDelta WithFindVerbose = engine.WithFindVerbose ParseSizeCompare = engine.ParseSizeCompare ParseFindTime = engine.ParseFindTime )
var ( WithPruneDryRun = engine.WithPruneDryRun WithPruneVerbose = engine.WithPruneVerbose )
var ( WithPrune = engine.WithPrune WithDryRun = engine.WithDryRun WithForgetVerbose = engine.WithForgetVerbose WithKeepLast = engine.WithKeepLast WithKeepHourly = engine.WithKeepHourly WithKeepDaily = engine.WithKeepDaily WithKeepWeekly = engine.WithKeepWeekly WithKeepMonthly = engine.WithKeepMonthly WithKeepYearly = engine.WithKeepYearly WithGroupBy = engine.WithGroupBy WithFilterTag = engine.WithFilterTag WithFilterSource = engine.WithFilterSource WithFilterAccount = engine.WithFilterAccount WithFilterPath = engine.WithFilterPath )
var ( WithReadData = engine.WithReadData WithCheckVerbose = engine.WithCheckVerbose WithSnapshotRef = engine.WithSnapshotRef )
var WithDiffVerbose = engine.WithDiffVerbose
var WithListVerbose = engine.WithListVerbose
var WithLsVerbose = engine.WithLsVerbose
Functions ¶
func AddRecoveryKey ¶ added in v1.7.0
func AddRecoveryKey(ctx context.Context, rawStore store.ObjectStore, kc keychain.Chain, opts AddRecoveryKeyOptions) (string, error)
AddRecoveryKey generates a BIP39 recovery key for the repository, authenticating with kc to obtain the master key. Returns the 24-word mnemonic phrase.
If a recovery slot with the requested label already exists and opts.Replace is false, it returns a *keychain.SlotExistsError and writes nothing.
func ChangePassword ¶ added in v1.7.0
func ChangePassword(ctx context.Context, rawStore store.ObjectStore, kc keychain.Chain, pwd PasswordProvider) error
ChangePassword replaces the password key slot using the provided keychain to authenticate and newPassword as the new passphrase.
func EnsureProfilesMaps ¶ added in v1.17.0
func EnsureProfilesMaps(cfg *ProfilesConfig)
EnsureProfilesMaps guarantees cfg's map fields are non-nil, so callers can write into them unconditionally.
func SaveProfilesFile ¶ added in v1.11.0
func SaveProfilesFile(path string, cfg *ProfilesConfig) error
SaveProfilesFile writes a backup profiles YAML file.
func UpgradeRepoFormat ¶ added in v1.16.0
func UpgradeRepoFormat( ctx context.Context, rawStore store.ObjectStore, to int, encryptionKey []byte, ) error
UpgradeRepoFormat raises a repository's recorded format version to `to`, leaving it alone if it already meets or exceeds that.
Repositories are upgraded in place and partially: new structures are written in the current format while older ones are read as they are and rewritten only opportunistically. A repository is therefore a permanent mixture of eras, and its recorded version is not a claim that migration finished. It is the *minimum reader version*: the oldest build that can still read everything the repository now contains.
Call this from the write path that first stores something an older build would misread — at the moment of that write, not on mere access. Stamping a repository just because a newer binary opened it would lock older builds out of data they can still read correctly, which is the same harm the version gate exists to prevent.
A mutation calls it — never a read — so a repository written by this build tells other machines sharing it to upgrade. When it stamps relative to the write depends on the mutation: prune and forget stamp afterwards (best-effort, via Client.stampWriteFormat), because what they write is decoded correctly at either format; backup stamps beforehand (fatal, via Client.raiseRepoFormat), because it writes content whose encoding an older build would misread and which cannot be rewritten once stored. See core.FramedCompressionFormat and docs/compatibility.md.
encryptionKey is required for an encrypted repository, whose marker is sealed: the version lives inside the sealed blob, so raising it means unsealing and resealing. Pass nil for an unencrypted repository.
Types ¶
type AddRecoveryKeyOptions ¶ added in v1.16.0
type AddRecoveryKeyOptions struct {
// Label names the slot (object key keys/recovery-<label>). Empty means the
// default slot. Distinct labels let a repository hold several recovery keys,
// all of which stay valid.
Label string
// Replace permits overwriting an existing slot with the same label, which
// invalidates the mnemonic that slot was issued for.
Replace bool
}
AddRecoveryKeyOptions controls which recovery slot AddRecoveryKey writes.
type BackupOption ¶
type BackupOption = engine.BackupOption
type BackupProfile ¶ added in v1.11.0
type BackupProfile = engine.BackupProfile
type BackupResult ¶ added in v1.2.0
type CatResult ¶ added in v1.4.6
type CatResult struct {
Key string // The object key requested
Data []byte // Raw object data (typically JSON)
}
CatResult contains the raw data for an object key.
type CheckError ¶ added in v1.4.7
type CheckError = engine.CheckError
type CheckOption ¶ added in v1.4.7
type CheckOption = engine.CheckOption
type CheckResult ¶ added in v1.4.7
type CheckResult = engine.CheckResult
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is the high-level interface for using Cloudstic as a library.
func NewClient ¶
func NewClient(ctx context.Context, base store.ObjectStore, opts ...ClientOption) (*Client, error)
func (*Client) Backup ¶
func (c *Client) Backup(ctx context.Context, src source.Source, opts ...BackupOption) (*BackupResult, error)
func (*Client) Cat ¶ added in v1.4.6
Cat fetches the raw data for one or more object keys from the repository. Object keys can be snapshot/<hash>, filemeta/<hash>, content/<hash>, node/<hash>, chunk/<hash>, config, index/latest, keys/<slot>, etc.
This is useful for debugging, inspection, and understanding the internal structure of the repository.
func (*Client) Check ¶ added in v1.4.7
func (c *Client) Check(ctx context.Context, opts ...CheckOption) (*CheckResult, error)
Check verifies the integrity of the repository by walking the full reference chain (snapshots → HAMT nodes → filemeta → content → chunks) and checking that every referenced object can be read. With WithReadData(), chunk data is re-hashed for byte-level verification.
func (*Client) Diff ¶
func (c *Client) Diff(ctx context.Context, snap1, snap2 string, opts ...DiffOption) (*DiffResult, error)
Diff compares snapshots selected by latest, full hashes, or unambiguous hash prefixes. An ambiguous prefix is rejected.
func (*Client) DiscoverSources ¶ added in v1.14.0
func (c *Client) DiscoverSources(ctx context.Context) ([]DiscoveredSource, error)
func (*Client) Find ¶ added in v1.17.0
func (c *Client) Find(ctx context.Context, opts ...FindOption) (*FindResult, error)
Find locates files across the repository's snapshots without the caller having to know which snapshot holds them.
Unlike every other read operation, Find takes a snapshot as *output* rather than input: it searches every snapshot by default, and reports for each matching file the versions it has had and the snapshots each version lives in.
It is a pure read path — no lock is taken, nothing is written, and the repository format is not stamped.
func (*Client) Forget ¶
func (c *Client) Forget(ctx context.Context, snapshotID string, opts ...ForgetOption) (*ForgetResult, error)
func (*Client) ForgetPolicy ¶
func (c *Client) ForgetPolicy(ctx context.Context, opts ...ForgetOption) (*PolicyResult, error)
func (*Client) List ¶
func (c *Client) List(ctx context.Context, opts ...ListOption) (*ListResult, error)
func (*Client) LsSnapshot ¶
func (c *Client) LsSnapshot(ctx context.Context, snapshotID string, opts ...LsSnapshotOption) (*LsSnapshotResult, error)
LsSnapshot lists a snapshot selected by latest, full hash, or unambiguous hash prefix. An ambiguous prefix is rejected.
func (*Client) Prune ¶
func (c *Client) Prune(ctx context.Context, opts ...PruneOption) (*PruneResult, error)
func (*Client) Restore ¶
func (c *Client) Restore(ctx context.Context, w io.Writer, snapshotRef string, opts ...RestoreOption) (*RestoreResult, error)
Restore writes the snapshot's file tree as a ZIP archive to w. snapshotRef can be "", "latest", a bare hash or unambiguous hash prefix, or "snapshot/<hash-or-prefix>". An ambiguous prefix is rejected.
func (*Client) RestoreToDir ¶ added in v1.12.0
func (c *Client) RestoreToDir(ctx context.Context, outputDir, snapshotRef string, opts ...RestoreOption) (*RestoreResult, error)
RestoreToDir writes the snapshot's file tree directly into outputDir. snapshotRef can be "", "latest", a bare hash or unambiguous hash prefix, or "snapshot/<hash-or-prefix>". An ambiguous prefix is rejected.
func (*Client) Store ¶ added in v1.1.0
func (c *Client) Store() store.ObjectStore
type ClientOption ¶
type ClientOption func(*Client)
ClientOption configures a Client.
func WithEncryptionKey ¶ added in v1.1.0
func WithEncryptionKey(key []byte) ClientOption
WithEncryptionKey directly sets the AES-256-GCM encryption key (32 bytes). This bypasses repo config detection and unconditionally applies encryption. The HMAC deduplication key is automatically derived from this key. Use this for the SaaS product where the key is already resolved externally.
func WithKeychain ¶ added in v1.9.0
func WithKeychain(kc keychain.Chain) ClientOption
WithKeychain sets a Keychain for automatic master key resolution. During NewClient, the repo config is read from the store; if the repository is encrypted, Resolve is called to obtain the master key and the encryption key is derived. If the repository is not encrypted, the keychain is silently ignored.
func WithPackfile ¶ added in v1.4.3
func WithPackfile(enable bool) ClientOption
WithPackfile enables bundling small objects into 8MB packs to save API calls.
func WithReporter ¶
func WithReporter(r Reporter) ClientOption
WithReporter sets the progress reporter for the client.
type DiffOption ¶
type DiffOption = engine.DiffOption
type DiffResult ¶
type DiffResult = engine.DiffResult
type DiscoveredSource ¶ added in v1.14.0
type DiscoveredSource = engine.DiscoveredSource
type FileVersion ¶ added in v1.17.0
type FileVersion = engine.FileVersion
type FindOption ¶ added in v1.17.0
type FindOption = engine.FindOption
type FindResult ¶ added in v1.17.0
type FindResult = engine.FindResult
type ForgetOption ¶
type ForgetOption = engine.ForgetOption
type ForgetResult ¶ added in v1.2.0
type ForgetResult = engine.ForgetResult
type InitOption ¶ added in v1.7.0
type InitOption = engine.InitOption
type InitResult ¶ added in v1.7.0
type InitResult = engine.InitResult
func InitRepo ¶ added in v1.7.0
func InitRepo(ctx context.Context, rawStore store.ObjectStore, opts ...InitOption) (*InitResult, error)
InitRepo bootstraps a new repository on the given raw (undecorated) store. This is a package-level function because init runs before the full Client decorator chain (encryption, compression, packfiles) is set up.
type KeySlot ¶ added in v1.4.6
KeySlot is re-exported for callers that need to inspect slot metadata.
func ListKeySlots ¶ added in v1.7.0
ListKeySlots returns all encryption key slots in the repository. Returns an error if the repository is not initialized or not encrypted.
type ListOption ¶
type ListOption = engine.ListOption
type ListResult ¶
type ListResult = engine.ListResult
type LsSnapshotOption ¶
type LsSnapshotOption = engine.LsSnapshotOption
type LsSnapshotResult ¶
type LsSnapshotResult = engine.LsSnapshotResult
type PasswordProvider ¶ added in v1.7.0
PasswordProvider supplies a new password when prompted. It is used by ChangePassword to obtain the replacement passphrase. Implementations may prompt the user interactively, derive a password programmatically, or return a static value.
type PasswordProviderFunc ¶ added in v1.7.0
PasswordProviderFunc is a function adapter for PasswordProvider. Any func(context.Context) (string, error) can be used as a PasswordProvider:
client.ChangePassword(ctx, store, creds, cloudstic.PasswordProviderFunc(func(ctx context.Context) (string, error) {
return promptUser("New password: ")
}))
func (PasswordProviderFunc) NewPassword ¶ added in v1.7.0
func (f PasswordProviderFunc) NewPassword(ctx context.Context) (string, error)
type PasswordString ¶ added in v1.7.0
type PasswordString string
PasswordString is a PasswordProvider that returns a fixed string. Use this when the new password is already known at call time:
client.ChangePassword(ctx, store, creds, cloudstic.PasswordString("my-new-password"))
func (PasswordString) NewPassword ¶ added in v1.7.0
func (p PasswordString) NewPassword(ctx context.Context) (string, error)
type PolicyResult ¶
type PolicyResult = engine.PolicyResult
type ProfileAuth ¶ added in v1.11.0
type ProfileAuth = engine.ProfileAuth
type ProfileStore ¶ added in v1.11.0
type ProfileStore = engine.ProfileStore
type ProfilesConfig ¶ added in v1.11.0
type ProfilesConfig = engine.ProfilesConfig
func LoadProfilesFile ¶ added in v1.11.0
func LoadProfilesFile(path string) (*ProfilesConfig, error)
LoadProfilesFile parses a backup profiles YAML file.
func LoadProfilesFileOrEmpty ¶ added in v1.17.0
func LoadProfilesFileOrEmpty(path string) (*ProfilesConfig, error)
LoadProfilesFileOrEmpty loads profiles from path, treating a missing file as an empty, version-1 config rather than an error.
type PruneOption ¶
type PruneOption = engine.PruneOption
type PruneResult ¶ added in v1.2.0
type PruneResult = engine.PruneResult
type RepoConfig ¶ added in v1.2.0
type RepoConfig = core.RepoConfig
RepoConfig is the repository marker written by "init".
func LoadRepoConfig ¶ added in v1.7.0
func LoadRepoConfig( ctx context.Context, rawStore store.ObjectStore, encryptionKey []byte, ) (*RepoConfig, error)
LoadRepoConfig reads the repository marker from a raw (undecorated) store. Returns (nil, nil) if the repository has not been initialized yet. Returns an error if the store is unreachable (e.g. invalid credentials).
encryptionKey is required when the marker is sealed and ignored otherwise. Callers that only need to know whether a repository is initialized or encrypted should use InspectRepo, which needs no key.
type RepoStatus ¶ added in v1.17.0
type RepoStatus struct {
// Initialized reports whether a config marker exists at all.
Initialized bool
// Encrypted reports whether the repository uses encryption. A sealed marker
// answers this on its own: only an encrypted repository has a key to seal
// with.
Encrypted bool
// Sealed reports whether the marker itself is sealed. An encrypted
// repository written before sealing existed is Encrypted but not Sealed.
Sealed bool
}
RepoStatus is what can be determined about a repository without resolving its encryption key.
func InspectRepo ¶ added in v1.17.0
func InspectRepo(ctx context.Context, rawStore store.ObjectStore) (RepoStatus, error)
InspectRepo reports what can be learned about a repository without its key.
This exists for callers that only need to know whether a repository is initialized or encrypted — deciding whether to prompt for credentials, for instance — which sealing would otherwise make impossible to answer without first doing the very unlock the caller is trying to decide about.
type RestoreOption ¶
type RestoreOption = engine.RestoreOption
type RestoreResult ¶
type RestoreResult = engine.RestoreResult
type SizeCompare ¶ added in v1.17.0
type SizeCompare = engine.SizeCompare
type SnapshotRef ¶ added in v1.17.0
type SnapshotRef = engine.SnapshotRef
type WorkstationApplyResult ¶ added in v1.14.0
type WorkstationApplyResult = engine.WorkstationApplyResult
func ApplyWorkstationSetupPlan ¶ added in v1.14.0
func ApplyWorkstationSetupPlan(cfg *ProfilesConfig, plan *WorkstationSetupPlan) (*WorkstationApplyResult, error)
type WorkstationCoverageSummary ¶ added in v1.14.0
type WorkstationCoverageSummary = engine.WorkstationCoverageSummary
type WorkstationFolderCandidate ¶ added in v1.14.0
type WorkstationFolderCandidate = engine.WorkstationFolderCandidate
type WorkstationProfileDraft ¶ added in v1.14.0
type WorkstationProfileDraft = engine.WorkstationProfileDraft
type WorkstationSetupOption ¶ added in v1.14.0
type WorkstationSetupOption = engine.WorkstationSetupOption
type WorkstationSetupPlan ¶ added in v1.14.0
type WorkstationSetupPlan = engine.WorkstationSetupPlan
func PlanWorkstationSetup ¶ added in v1.14.0
func PlanWorkstationSetup(ctx context.Context, opts ...WorkstationSetupOption) (*WorkstationSetupPlan, error)
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
cloudstic
command
|
|
|
internal
|
|
|
pathmatch
Package pathmatch matches slash-separated paths against glob patterns.
|
Package pathmatch matches slash-separated paths against glob patterns. |
|
repoconfig
Package repoconfig encodes and decodes the repository config marker.
|
Package repoconfig encodes and decodes the repository config marker. |
|
tui/forms
Package forms provides Bubble Tea form components for the interactive TUI.
|
Package forms provides Bubble Tea form components for the interactive TUI. |
|
pkg
|
|
|
crypto
Package crypto provides authenticated encryption primitives for backup data.
|
Package crypto provides authenticated encryption primitives for backup data. |
|
store/storetest
Package storetest provides test doubles for store.ObjectStore.
|
Package storetest provides test doubles for store.ObjectStore. |