refactor: tidy up sharing after the round of tweaks
- Go to's picker settings are one picker struct, set while picking.
- Opening a share link plans the save, then asks or saves; no more
offerWrite doing either by a flag.
- Closing the picker while it encrypts cancels the share, and a
second pick meanwhile is ignored.
- Favourites and Recent leave out plain env values as keys too.
- share.key in the config is checked with share.ParseKey, so
{{secrets/…}} is refused there already.
- A key that can't be read reads the same opening as sharing
("can't use …"); KeyError moved to share.go, maxFiles is
maxUnpacked (bytes), and a stray comment is gone.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
9 files changed
+218
-118
No files matched your search
+14
-4
@@ -47,8 +47,8 @@ const (
|
||||
MaxLink = 16 << 10
|
||||
// MinKey is the shortest key the rules can ask for.
|
||||
MinKey = 16
|
||||
// maxFiles caps what opening a link unpacks.
|
||||
maxFiles = 1 << 20
|
||||
// maxUnpacked caps the bytes opening a link unpacks.
|
||||
maxUnpacked = 1 << 20
|
||||
)
|
||||
|
||||
// workFactor is the scrypt work factor for sealing: 2^15, about 40 ms
|
||||
@@ -153,6 +153,16 @@ func Seal(h Header, key []byte, files []File, rules Rules) (ref.Ref, error) {
|
||||
return r, nil
|
||||
}
|
||||
|
||||
// KeyError is a key that can't be used: it can't be read, or doesn't
|
||||
// keep to the rules.
|
||||
type KeyError struct {
|
||||
Name string // the secret's
|
||||
Err error
|
||||
}
|
||||
|
||||
func (e *KeyError) Error() string { return "can't use " + e.Name + ": " + e.Err.Error() }
|
||||
func (e *KeyError) Unwrap() error { return e.Err }
|
||||
|
||||
// Read reads a share link's header.
|
||||
func Read(r ref.Ref) (Sealed, error) {
|
||||
bad := errors.New("share link is cut short or garbled: copy all of it")
|
||||
@@ -197,11 +207,11 @@ func (s Sealed) Open(key []byte) ([]File, error) {
|
||||
}
|
||||
return nil, fmt.Errorf("can't decrypt the link: %w", err)
|
||||
}
|
||||
b, err := io.ReadAll(io.LimitReader(flate.NewReader(dec), maxFiles+1))
|
||||
b, err := io.ReadAll(io.LimitReader(flate.NewReader(dec), maxUnpacked+1))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't decrypt the link: %w", err)
|
||||
}
|
||||
if len(b) > maxFiles {
|
||||
if len(b) > maxUnpacked {
|
||||
return nil, errors.New("the link holds more than lazysecrets unpacks")
|
||||
}
|
||||
var plain []file
|
||||
|
||||
Reference in new issue
Block a user