1
0
mirror of https://github.com/Luzifer/cloudbox.git synced 2024-09-18 22:52:58 +00:00

Implement share command

Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
Knut Ahlers 2019-06-29 22:30:22 +02:00
parent e98a3dc32d
commit 8f77f5dd6d
Signed by: luzifer
GPG Key ID: DC2729FDD34BE99E
2 changed files with 58 additions and 0 deletions

View File

@ -15,11 +15,13 @@ type commandFunc func() error
const (
cmdHelp command = "help"
cmdShare command = "share"
cmdSync command = "sync"
cmdWriteConfig command = "write-config"
)
var cmdFuncs = map[command]commandFunc{
cmdShare: execShare,
cmdSync: execSync,
cmdWriteConfig: execWriteSampleConfig,
}

56
cmd/cloudbox/share.go Normal file
View File

@ -0,0 +1,56 @@
package main
import (
"fmt"
"os"
"text/template"
"github.com/pkg/errors"
"github.com/Luzifer/cloudbox/providers"
"github.com/Luzifer/rconfig"
)
func execShare() error {
conf, err := loadConfig(false)
if err != nil {
return errors.Wrap(err, "Unable to load config")
}
remote, err := providerFromURI(conf.Sync.RemoteURI)
if err != nil {
return errors.Wrap(err, "Unable to initialize remote provider")
}
if !remote.Capabilities().Has(providers.CapShare) {
return errors.New("Remote provider does not support sharing")
}
if len(rconfig.Args()) < 3 {
return errors.New("No filename provided to share")
}
relativeName := rconfig.Args()[2]
providerURL, err := remote.Share(relativeName)
if err != nil {
return errors.Wrap(err, "Unable to share file")
}
if !conf.Share.OverrideURI {
fmt.Println(providerURL)
return nil
}
tpl, err := template.New("share_uri").Parse(conf.Share.URITemplate)
if err != nil {
return errors.Wrap(err, "Unable to parse URI template")
}
if err := tpl.Execute(os.Stdout, map[string]interface{}{
"file": relativeName,
}); err != nil {
return errors.Wrap(err, "Unable to render share URI")
}
return nil
}