|
@@ -52,9 +52,10 @@ var (
|
|
|
portableCmd = &cobra.Command{
|
|
|
Use: "portable",
|
|
|
Short: "Serve a single directory",
|
|
|
- Long: `To serve the current working directory with auto generated credentials simply use:
|
|
|
+ Long: `To serve the current working directory with auto generated credentials simply
|
|
|
+use:
|
|
|
|
|
|
-sftpgo portable
|
|
|
+$ sftpgo portable
|
|
|
|
|
|
Please take a look at the usage below to customize the serving parameters`,
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
@@ -145,45 +146,70 @@ Please take a look at the usage below to customize the serving parameters`,
|
|
|
func init() {
|
|
|
version.AddFeature("+portable")
|
|
|
|
|
|
- portableCmd.Flags().StringVarP(&directoryToServe, "directory", "d", ".",
|
|
|
- "Path to the directory to serve. This can be an absolute path or a path relative to the current directory")
|
|
|
- portableCmd.Flags().IntVarP(&portableSFTPDPort, "sftpd-port", "s", 0, "0 means a random non privileged port")
|
|
|
+ portableCmd.Flags().StringVarP(&directoryToServe, "directory", "d", ".", `Path to the directory to serve.
|
|
|
+This can be an absolute path or a path
|
|
|
+relative to the current directory
|
|
|
+`)
|
|
|
+ portableCmd.Flags().IntVarP(&portableSFTPDPort, "sftpd-port", "s", 0, "0 means a random unprivileged port")
|
|
|
portableCmd.Flags().StringSliceVarP(&portableSSHCommands, "ssh-commands", "c", sftpd.GetDefaultSSHCommands(),
|
|
|
- "SSH commands to enable. \"*\" means any supported SSH command including scp")
|
|
|
- portableCmd.Flags().StringVarP(&portableUsername, "username", "u", "", "Leave empty to use an auto generated value")
|
|
|
- portableCmd.Flags().StringVarP(&portablePassword, "password", "p", "", "Leave empty to use an auto generated value")
|
|
|
+ `SSH commands to enable.
|
|
|
+"*" means any supported SSH command
|
|
|
+including scp
|
|
|
+`)
|
|
|
+ portableCmd.Flags().StringVarP(&portableUsername, "username", "u", "", `Leave empty to use an auto generated
|
|
|
+value`)
|
|
|
+ portableCmd.Flags().StringVarP(&portablePassword, "password", "p", "", `Leave empty to use an auto generated
|
|
|
+value`)
|
|
|
portableCmd.Flags().StringVarP(&portableLogFile, logFilePathFlag, "l", "", "Leave empty to disable logging")
|
|
|
portableCmd.Flags().BoolVarP(&portableLogVerbose, logVerboseFlag, "v", false, "Enable verbose logs")
|
|
|
portableCmd.Flags().StringSliceVarP(&portablePublicKeys, "public-key", "k", []string{}, "")
|
|
|
portableCmd.Flags().StringSliceVarP(&portablePermissions, "permissions", "g", []string{"list", "download"},
|
|
|
- "User's permissions. \"*\" means any permission")
|
|
|
+ `User's permissions. "*" means any
|
|
|
+permission`)
|
|
|
portableCmd.Flags().StringArrayVar(&portableAllowedExtensions, "allowed-extensions", []string{},
|
|
|
- "Allowed file extensions case insensitive. The format is /dir::ext1,ext2. For example: \"/somedir::.jpg,.png\"")
|
|
|
+ `Allowed file extensions case
|
|
|
+insensitive. The format is
|
|
|
+/dir::ext1,ext2.
|
|
|
+For example: "/somedir::.jpg,.png"`)
|
|
|
portableCmd.Flags().StringArrayVar(&portableDeniedExtensions, "denied-extensions", []string{},
|
|
|
- "Denied file extensions case insensitive. The format is /dir::ext1,ext2. For example: \"/somedir::.jpg,.png\"")
|
|
|
+ `Denied file extensions case
|
|
|
+insensitive. The format is
|
|
|
+/dir::ext1,ext2.
|
|
|
+For example: "/somedir::.jpg,.png"`)
|
|
|
portableCmd.Flags().BoolVarP(&portableAdvertiseService, "advertise-service", "S", false,
|
|
|
- "Advertise SFTP service using multicast DNS")
|
|
|
+ `Advertise SFTP service using multicast
|
|
|
+DNS`)
|
|
|
portableCmd.Flags().BoolVarP(&portableAdvertiseCredentials, "advertise-credentials", "C", false,
|
|
|
- "If the SFTP service is advertised via multicast DNS, this flag allows to put username/password inside the advertised TXT record")
|
|
|
- portableCmd.Flags().IntVarP(&portableFsProvider, "fs-provider", "f", 0, "0 means local filesystem, 1 Amazon S3 compatible, "+
|
|
|
- "2 Google Cloud Storage")
|
|
|
+ `If the SFTP service is advertised via
|
|
|
+multicast DNS, this flag allows to put
|
|
|
+username/password inside the advertised
|
|
|
+TXT record`)
|
|
|
+ portableCmd.Flags().IntVarP(&portableFsProvider, "fs-provider", "f", 0, `0 means local filesystem,
|
|
|
+1 Amazon S3 compatible,
|
|
|
+2 Google Cloud Storage`)
|
|
|
portableCmd.Flags().StringVar(&portableS3Bucket, "s3-bucket", "", "")
|
|
|
portableCmd.Flags().StringVar(&portableS3Region, "s3-region", "", "")
|
|
|
portableCmd.Flags().StringVar(&portableS3AccessKey, "s3-access-key", "", "")
|
|
|
portableCmd.Flags().StringVar(&portableS3AccessSecret, "s3-access-secret", "", "")
|
|
|
portableCmd.Flags().StringVar(&portableS3Endpoint, "s3-endpoint", "", "")
|
|
|
portableCmd.Flags().StringVar(&portableS3StorageClass, "s3-storage-class", "", "")
|
|
|
- portableCmd.Flags().StringVar(&portableS3KeyPrefix, "s3-key-prefix", "", "Allows to restrict access to the virtual folder "+
|
|
|
- "identified by this prefix and its contents")
|
|
|
- portableCmd.Flags().IntVar(&portableS3ULPartSize, "s3-upload-part-size", 5, "The buffer size for multipart uploads (MB)")
|
|
|
- portableCmd.Flags().IntVar(&portableS3ULConcurrency, "s3-upload-concurrency", 2, "How many parts are uploaded in parallel")
|
|
|
+ portableCmd.Flags().StringVar(&portableS3KeyPrefix, "s3-key-prefix", "", `Allows to restrict access to the
|
|
|
+virtual folder identified by this
|
|
|
+prefix and its contents`)
|
|
|
+ portableCmd.Flags().IntVar(&portableS3ULPartSize, "s3-upload-part-size", 5, `The buffer size for multipart uploads
|
|
|
+(MB)`)
|
|
|
+ portableCmd.Flags().IntVar(&portableS3ULConcurrency, "s3-upload-concurrency", 2, `How many parts are uploaded in
|
|
|
+parallel`)
|
|
|
portableCmd.Flags().StringVar(&portableGCSBucket, "gcs-bucket", "", "")
|
|
|
portableCmd.Flags().StringVar(&portableGCSStorageClass, "gcs-storage-class", "", "")
|
|
|
- portableCmd.Flags().StringVar(&portableGCSKeyPrefix, "gcs-key-prefix", "", "Allows to restrict access to the virtual folder "+
|
|
|
- "identified by this prefix and its contents")
|
|
|
- portableCmd.Flags().StringVar(&portableGCSCredentialsFile, "gcs-credentials-file", "", "Google Cloud Storage JSON credentials file")
|
|
|
- portableCmd.Flags().IntVar(&portableGCSAutoCredentials, "gcs-automatic-credentials", 1, "0 means explicit credentials using a JSON "+
|
|
|
- "credentials file, 1 automatic")
|
|
|
+ portableCmd.Flags().StringVar(&portableGCSKeyPrefix, "gcs-key-prefix", "", `Allows to restrict access to the
|
|
|
+virtual folder identified by this
|
|
|
+prefix and its contents`)
|
|
|
+ portableCmd.Flags().StringVar(&portableGCSCredentialsFile, "gcs-credentials-file", "", `Google Cloud Storage JSON credentials
|
|
|
+file`)
|
|
|
+ portableCmd.Flags().IntVar(&portableGCSAutoCredentials, "gcs-automatic-credentials", 1, `0 means explicit credentials using
|
|
|
+a JSON credentials file, 1 automatic
|
|
|
+`)
|
|
|
rootCmd.AddCommand(portableCmd)
|
|
|
}
|
|
|
|