54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
|
// Copyright (C) 2021 Storj Labs, Inc.
|
||
|
// See LICENSE for copying information.
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"storj.io/storj/cmd/uplinkng/ulext"
|
||
|
"storj.io/storj/cmd/uplinkng/ulfs"
|
||
|
"storj.io/uplink"
|
||
|
privateAccess "storj.io/uplink/private/access"
|
||
|
)
|
||
|
|
||
|
func (ex *external) OpenFilesystem(ctx context.Context, accessName string, options ...ulext.Option) (ulfs.Filesystem, error) {
|
||
|
project, err := ex.OpenProject(ctx, accessName, options...)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return ulfs.NewMixed(ulfs.NewLocal(), ulfs.NewRemote(project)), nil
|
||
|
}
|
||
|
|
||
|
func (ex *external) OpenProject(ctx context.Context, accessName string, options ...ulext.Option) (*uplink.Project, error) {
|
||
|
opts := ulext.LoadOptions(options...)
|
||
|
|
||
|
accessDefault, accesses, err := ex.GetAccessInfo(true)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
if accessName != "" {
|
||
|
accessDefault = accessName
|
||
|
}
|
||
|
|
||
|
var access *uplink.Access
|
||
|
if data, ok := accesses[accessDefault]; ok {
|
||
|
access, err = uplink.ParseAccess(data)
|
||
|
} else {
|
||
|
access, err = uplink.ParseAccess(accessDefault)
|
||
|
// TODO: if this errors then it's probably a name so don't report an error
|
||
|
// that says "it failed to parse"
|
||
|
}
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if opts.EncryptionBypass {
|
||
|
if err := privateAccess.EnablePathEncryptionBypass(access); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return uplink.OpenProject(ctx, access)
|
||
|
}
|