added fs encryption overlay

This commit is contained in:
ston1th 2022-04-06 01:08:19 +02:00
commit fd1e8118a4
28 changed files with 3994 additions and 30 deletions

View file

@ -4,7 +4,8 @@ package parse
import (
"cachefs/pkg/provider"
"cachefs/pkg/provider/mount"
"cachefs/pkg/provider/crypto"
"cachefs/pkg/provider/os"
"cachefs/pkg/provider/sftp"
"errors"
"fmt"
@ -19,7 +20,7 @@ var (
ErrUnsupportedScheme = errors.New("unsupported scheme")
)
func FS(url string) (provider.FS, error) {
func FS(url string, key []byte) (provider.FS, error) {
u, err := neturl.Parse(url)
if err != nil {
return nil, err
@ -27,11 +28,20 @@ func FS(url string) (provider.FS, error) {
if !filepath.IsAbs(u.Path) {
return nil, ErrPathNotAbsolute
}
var fs provider.FS
switch u.Scheme {
case "file":
return mount.NewFS(u.Path)
fs, err = os.NewFS(u.Path)
case "sftp":
return sftp.NewFS(u, klogr.New().WithName("sftp"))
fs, err = sftp.NewFS(u, klogr.New().WithName("sftp"))
default:
return nil, fmt.Errorf("%w: %s", ErrUnsupportedScheme, u.Scheme)
}
return nil, fmt.Errorf("%w: %s", ErrUnsupportedScheme, u.Scheme)
if err != nil {
return nil, err
}
if key != nil {
fs, err = crypto.NewFS(fs, key)
}
return fs, err
}