gopasspw--gopass
117 行
3.3 KiB
Go
117 行
3.3 KiB
Go
package action
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/blang/semver/v4"
|
|
"github.com/gopasspw/gopass/internal/backend"
|
|
"github.com/gopasspw/gopass/internal/config"
|
|
"github.com/gopasspw/gopass/internal/reminder"
|
|
"github.com/gopasspw/gopass/internal/store/root"
|
|
"github.com/urfave/cli/v3"
|
|
)
|
|
|
|
// base holds the fields common to all handler types. Every handler embeds
|
|
// *base so it can access the store, config, and other shared state.
|
|
type base struct {
|
|
Name string
|
|
Store *root.Store
|
|
cfg *config.Config
|
|
version semver.Version
|
|
rem *reminder.Store
|
|
}
|
|
|
|
// secretHandler handles secret CRUD operations (show, insert, edit, delete,
|
|
// copy, move, link, merge).
|
|
type secretHandler struct {
|
|
*base
|
|
findFn func(ctx context.Context, cmd *cli.Command, needle string, cb showFunc, fuzzy bool) error
|
|
renderTemplateFn func(ctx context.Context, name string, content []byte) ([]byte, bool)
|
|
listFn func(ctx context.Context, cmd *cli.Command) error
|
|
findFuzzyFn func(ctx context.Context, cmd *cli.Command) error
|
|
}
|
|
|
|
// searchHandler handles search and list operations (find, grep, list, history).
|
|
type searchHandler struct {
|
|
*base
|
|
showFn showFunc
|
|
editFn func(ctx context.Context, cmd *cli.Command, name string) error
|
|
syncFn func(ctx context.Context, cmd *cli.Command) error
|
|
}
|
|
|
|
// generateHandler handles password generation (generate, create).
|
|
type generateHandler struct {
|
|
*base
|
|
editFn func(ctx context.Context, cmd *cli.Command) error
|
|
renderTemplateFn func(ctx context.Context, name string, content []byte) ([]byte, bool)
|
|
}
|
|
|
|
// mountHandler handles store mount management.
|
|
type mountHandler struct {
|
|
*base
|
|
initFn func(ctx context.Context, alias, path string, keys ...string) error
|
|
}
|
|
|
|
// recipientHandler handles recipient management.
|
|
type recipientHandler struct {
|
|
*base
|
|
}
|
|
|
|
// setupHandler handles store initialisation and onboarding (init, setup, clone, rcs).
|
|
type setupHandler struct {
|
|
*base
|
|
autoSyncFn func(ctx context.Context) error
|
|
printReminderFn func(ctx context.Context)
|
|
}
|
|
|
|
// syncHandler handles synchronisation with remote storage (sync, git).
|
|
type syncHandler struct {
|
|
*base
|
|
}
|
|
|
|
// auditHandler handles store auditing.
|
|
type auditHandler struct {
|
|
*base
|
|
}
|
|
|
|
// templateHandler handles secret templates.
|
|
type templateHandler struct {
|
|
*base
|
|
}
|
|
|
|
// binaryHandler handles binary secret operations.
|
|
type binaryHandler struct {
|
|
*base
|
|
}
|
|
|
|
// envHandler handles environment-variable injection.
|
|
type envHandler struct {
|
|
*base
|
|
}
|
|
|
|
// otpHandler handles one-time password operations.
|
|
type otpHandler struct {
|
|
*base
|
|
insertYAMLFn func(ctx context.Context, name, key string, content []byte, kvps map[string]string) error
|
|
findFn func(ctx context.Context, cmd *cli.Command, needle string, cb showFunc, fuzzy bool) error
|
|
}
|
|
|
|
// miscHandler handles miscellaneous operations that do not fit a narrower
|
|
// category (aliases, version, convert, reorg, process, unclip, update,
|
|
// reminder, repl, doctor, completion, config, otp-adjacent helpers).
|
|
type miscHandler struct {
|
|
*base
|
|
initCheckPrivateKeysFn func(ctx context.Context, crypto backend.Crypto) error
|
|
recipientsListFn func(ctx context.Context) []string
|
|
templatesListFn func(ctx context.Context) []string
|
|
}
|
|
|
|
// newBase constructs the shared base from a config.
|
|
func newBase(cfg *config.Config, sv semver.Version) *base {
|
|
return &base{
|
|
cfg: cfg,
|
|
version: sv,
|
|
Store: root.New(cfg),
|
|
}
|
|
}
|