59 lines · 1.4 KB · Go
RawDownload
package cryptdecode import (	"fmt" 	"github.com/ncw/rclone/cmd"	"github.com/ncw/rclone/crypt"	"github.com/ncw/rclone/fs"	"github.com/pkg/errors"	"github.com/spf13/cobra") func init() {	cmd.Root.AddCommand(commandDefinition)} var commandDefinition = &cobra.Command{	Use:   "cryptdecode encryptedremote: encryptedfilename",	Short: `Cryptdecode returns unencrypted file names.`,	Long: `rclone cryptdecode returns unencrypted file names when provided witha list of encrypted file names. List limit is 10 items. use it like this 	rclone cryptdecode encryptedremote: encryptedfilename1 encryptedfilename2`,	Run: func(command *cobra.Command, args []string) {		cmd.CheckArgs(2, 11, command, args)		fsrc := cmd.NewFsSrc(args)		cmd.Run(false, false, command, func() error {			return cryptDecode(fsrc, args[1:])		})	},} // cryptDecode returns the unencrypted file namefunc cryptDecode(fsrc fs.Fs, args []string) error {	// Check if fsrc is a crypt	fcrypt, ok := fsrc.(*crypt.Fs)	if !ok {		return errors.Errorf("%s:%s is not a crypt remote", fsrc.Name(), fsrc.Root())	} 	output := "" 	for _, encryptedFileName := range args {		fileName, err := fcrypt.DecryptFileName(encryptedFileName)		if err != nil {			output += fmt.Sprintln(encryptedFileName, "\t", "Failed to decrypt")		} else {			output += fmt.Sprintln(encryptedFileName, "\t", fileName)		}	} 	fmt.Printf(output) 	return nil}