2021-05-26 21:19:29 +01:00
|
|
|
// Copyright (C) 2021 Storj Labs, Inc.
|
|
|
|
// See LICENSE for copying information.
|
|
|
|
|
|
|
|
// Package ulext provides an interface for the CLI to interface with the external world.
|
|
|
|
package ulext
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"github.com/zeebo/clingy"
|
|
|
|
|
|
|
|
"storj.io/storj/cmd/uplinkng/ulfs"
|
|
|
|
"storj.io/uplink"
|
|
|
|
)
|
|
|
|
|
|
|
|
// External is the interface for all of the ways that the uplink command may interact with
|
|
|
|
// any external state.
|
|
|
|
type External interface {
|
|
|
|
OpenFilesystem(ctx context.Context, accessName string, options ...Option) (ulfs.Filesystem, error)
|
|
|
|
OpenProject(ctx context.Context, accessName string, options ...Option) (*uplink.Project, error)
|
|
|
|
|
2021-06-22 23:41:22 +01:00
|
|
|
AccessInfoFile() string
|
|
|
|
OpenAccess(accessName string) (access *uplink.Access, err error)
|
2021-05-26 21:19:29 +01:00
|
|
|
GetAccessInfo(required bool) (string, map[string]string, error)
|
|
|
|
SaveAccessInfo(defaultName string, accesses map[string]string) error
|
2021-06-22 23:41:22 +01:00
|
|
|
RequestAccess(ctx context.Context, token, passphrase string) (*uplink.Access, error)
|
2021-05-26 21:19:29 +01:00
|
|
|
|
|
|
|
PromptInput(ctx clingy.Context, prompt string) (input string, err error)
|
2021-08-02 17:54:30 +01:00
|
|
|
PromptSecret(ctx clingy.Context, prompt string) (secret string, err error)
|
2021-05-26 21:19:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Options contains all of the possible options for opening a filesystem or project.
|
|
|
|
type Options struct {
|
|
|
|
EncryptionBypass bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// LoadOptions takes a slice of Option values and returns a filled out Options struct.
|
|
|
|
func LoadOptions(options ...Option) (opts Options) {
|
|
|
|
for _, opt := range options {
|
|
|
|
opt.apply(&opts)
|
|
|
|
}
|
|
|
|
return opts
|
|
|
|
}
|
|
|
|
|
|
|
|
// Option is a single option that controls the Options struct.
|
|
|
|
type Option struct {
|
|
|
|
apply func(*Options)
|
|
|
|
}
|
|
|
|
|
|
|
|
// BypassEncryption will disable decrypting of path names if bypass is true.
|
|
|
|
func BypassEncryption(bypass bool) Option {
|
|
|
|
return Option{apply: func(opt *Options) { opt.EncryptionBypass = bypass }}
|
|
|
|
}
|