gopass/internal/store/leaf/context.go
AnomalRoil ed54973318
Fixing GPG ID related issues (#3275)
* Adding regression test

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* fixing recipient logic to honor subkeys

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* Revert "Adding regression test"

This reverts commit fcb85c9d2ee4ce3b1d53f934338c6a33e18d7d9d.

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* adding comment about noop

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* Linting

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* Addressing review comments

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

* avoid noise debug logs

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>

---------

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>
2025-10-08 15:14:19 +02:00

142 lines
3.7 KiB
Go

package leaf
import (
"context"
"github.com/gopasspw/gopass/internal/store"
)
type contextKey int
const (
ctxKeyFsckCheck contextKey = iota
ctxKeyFsckForce
ctxKeyFsckFunc
ctxKeyFsckDecrypt
ctxKeyNoGitOps
ctxKeyPubkeyUpdate
)
// WithFsckCheck returns a context with the flag for fscks check set.
func WithFsckCheck(ctx context.Context, check bool) context.Context {
return context.WithValue(ctx, ctxKeyFsckCheck, check)
}
// HasFsckCheck returns true if a value for fsck check has been set in this
// context.
func HasFsckCheck(ctx context.Context) bool {
return hasBool(ctx, ctxKeyFsckCheck)
}
// IsFsckCheck returns the value of fsck check.
func IsFsckCheck(ctx context.Context) bool {
bv, ok := ctx.Value(ctxKeyFsckCheck).(bool)
if !ok {
return false
}
return bv
}
// WithFsckForce returns a context with the flag for fsck force set.
func WithFsckForce(ctx context.Context, force bool) context.Context {
return context.WithValue(ctx, ctxKeyFsckForce, force)
}
// HasFsckForce returns true if a value for fsck force has been set in this
// context.
func HasFsckForce(ctx context.Context) bool {
return hasBool(ctx, ctxKeyFsckForce)
}
// IsFsckForce returns the value of fsck force.
func IsFsckForce(ctx context.Context) bool {
bv, ok := ctx.Value(ctxKeyFsckForce).(bool)
if !ok {
return false
}
return bv
}
// WithFsckFunc will return a context with the fsck confirmation callback set.
func WithFsckFunc(ctx context.Context, imf store.FsckCallback) context.Context {
return context.WithValue(ctx, ctxKeyFsckFunc, imf)
}
// HasFsckFunc returns true if a fsck func has been set in this context.
func HasFsckFunc(ctx context.Context) bool {
imf, ok := ctx.Value(ctxKeyFsckFunc).(store.FsckCallback)
return ok && imf != nil
}
// GetFsckFunc will return the fsck confirmation callback or a default one
// returning true.
// Note: will never return nil.
func GetFsckFunc(ctx context.Context) store.FsckCallback {
imf, ok := ctx.Value(ctxKeyFsckFunc).(store.FsckCallback)
if !ok || imf == nil {
return func(context.Context, string) bool {
return true
}
}
return imf
}
// WithFsckDecrypt will return a context with the value for the decrypt
// during fsck flag set.
func WithFsckDecrypt(ctx context.Context, d bool) context.Context {
return context.WithValue(ctx, ctxKeyFsckDecrypt, d)
}
// IsFsckDecrypt will return the value for the decrypt during fsck, defaulting
// to false.
func IsFsckDecrypt(ctx context.Context) bool {
return is(ctx, ctxKeyFsckDecrypt, false)
}
// WithNoGitOps returns a context with the value for NoGitOps set.
// This will skip any git operations in concurrent goroutines.
func WithNoGitOps(ctx context.Context, d bool) context.Context {
return context.WithValue(ctx, ctxKeyNoGitOps, d)
}
// IsNoGitOps returns the value for NoGitOps from the context
// or the default (false).
func IsNoGitOps(ctx context.Context) bool {
return is(ctx, ctxKeyNoGitOps, false)
}
// IsPubkeyUpdate returns true if we should update all exported
// recipients pub keys.
func IsPubkeyUpdate(ctx context.Context) bool {
return is(ctx, ctxKeyPubkeyUpdate, false)
}
// WithPubkeyUpdate returns a context with the selection to update
// all exported recipients pub keys set.
func WithPubkeyUpdate(ctx context.Context, d bool) context.Context {
return context.WithValue(ctx, ctxKeyPubkeyUpdate, d)
}
// hasBool is a helper function for checking if a bool has been set in
// the provided context.
func hasBool(ctx context.Context, key contextKey) bool {
_, ok := ctx.Value(key).(bool)
return ok
}
// is is a helper function for returning the value of a bool from the context
// or the provided default.
func is(ctx context.Context, key contextKey, def bool) bool {
bv, ok := ctx.Value(key).(bool)
if !ok {
return def
}
return bv
}