mirror of
https://github.com/drakkan/sftpgo.git
synced 2024-11-22 23:50:32 +00:00
504cd3efda
Using groups simplifies the administration of multiple accounts by letting you assign settings once to a group, instead of multiple times to each individual user. Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
471 lines
No EOL
27 KiB
HTML
471 lines
No EOL
27 KiB
HTML
{{define "fshtml"}}
|
|
<div class="card bg-light mb-3">
|
|
<div class="card-header">
|
|
<b>Filesystem</b>
|
|
</div>
|
|
<div class="card-body pb-1">
|
|
<div class="form-group row">
|
|
<label for="idFilesystem" class="col-sm-2 col-form-label">Storage</label>
|
|
<div class="col-sm-10">
|
|
<select class="form-control selectpicker" id="idFilesystem" name="fs_provider"
|
|
onchange="onFilesystemChanged(this.value)">
|
|
{{ range ListFSProviders }}
|
|
<option value="{{.Name}}" {{if eq . $.Provider }}selected{{end}}>{{.ShortInfo}}</option>
|
|
{{end}}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
{{if or .IsUserPage .IsGroupPage}}
|
|
<div class="form-group row">
|
|
<label for="idHomeDir" class="col-sm-2 col-form-label">Home Dir</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idHomeDir" name="home_dir" placeholder="Absolute path to a local directory"
|
|
value="{{.DirPath}}" aria-describedby="homeDirHelpBlock">
|
|
<small id="homeDirHelpBlock" class="form-text text-muted">
|
|
{{if not .DirPath}}{{if .HasUsersBaseDir}}Leave blank for an appropriate default{{else}}{{if .IsGroupPage}}Leave blank and the storage to "local" to not override the root filesystem{{else}}Required for local storage providers. For non-local filesystems it will store temporary files, you can leave blank for an appropriate default{{end}}{{end}}{{end}}
|
|
</small>
|
|
</div>
|
|
</div>
|
|
{{else}}
|
|
<div class="form-group row">
|
|
<label for="idMappedPath" class="col-sm-2 col-form-label">Home Dir</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idMappedPath" name="mapped_path" placeholder="Absolute path to a local directory"
|
|
value="{{.DirPath}}" aria-describedby="mappedPathHelpBlock">
|
|
<small id="mappedPathHelpBlock" class="form-text text-muted">
|
|
Required for local storage providers. For non-local filesystems it will store temporary files, you can leave blank for an appropriate default
|
|
</small>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3Bucket" class="col-sm-2 col-form-label">Bucket</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idS3Bucket" name="s3_bucket" placeholder=""
|
|
value="{{.S3Config.Bucket}}" maxlength="255">
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idS3Region" class="col-sm-2 col-form-label">Region</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idS3Region" name="s3_region" placeholder=""
|
|
value="{{.S3Config.Region}}" maxlength="255">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3AccessKey" class="col-sm-2 col-form-label">Access Key</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idS3AccessKey" name="s3_access_key" placeholder=""
|
|
value="{{.S3Config.AccessKey}}" maxlength="255">
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idS3AccessSecret" class="col-sm-2 col-form-label">Access Secret</label>
|
|
<div class="col-sm-3">
|
|
<input type="password" class="form-control" id="idS3AccessSecret" name="s3_access_secret" placeholder=""
|
|
value="{{if .S3Config.AccessSecret.IsEncrypted}}{{.RedactedSecret}}{{else}}{{.S3Config.AccessSecret.GetPayload}}{{end}}">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3StorageClass" class="col-sm-2 col-form-label">Storage Class</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idS3StorageClass" name="s3_storage_class" placeholder=""
|
|
value="{{.S3Config.StorageClass}}" maxlength="255" aria-describedby="S3StorageClassHelpBlock">
|
|
<small id="S3StorageClassHelpBlock" class="form-text text-muted">
|
|
Leave blank for default
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idS3Endpoint" class="col-sm-2 col-form-label">Endpoint</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idS3Endpoint" name="s3_endpoint" placeholder=""
|
|
value="{{.S3Config.Endpoint}}" maxlength="512" aria-describedby="S3EndpointHelpBlock">
|
|
<small id="S3EndpointHelpBlock" class="form-text text-muted">
|
|
For AWS S3, leave blank to use the default endpoint for the specified region
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3PartSize" class="col-sm-2 col-form-label">UL Part Size (MB)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idS3PartSize" name="s3_upload_part_size" placeholder=""
|
|
value="{{.S3Config.UploadPartSize}}" aria-describedby="S3PartSizeHelpBlock">
|
|
<small id="S3PartSizeHelpBlock" class="form-text text-muted">
|
|
The buffer size for multipart uploads. Zero means the default (5 MB). Minimum is 5
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idS3UploadConcurrency" class="col-sm-2 col-form-label">UL Concurrency</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idS3UploadConcurrency" name="s3_upload_concurrency"
|
|
placeholder="" value="{{.S3Config.UploadConcurrency}}" min="0"
|
|
aria-describedby="S3ConcurrencyHelpBlock">
|
|
<small id="S3ConcurrencyHelpBlock" class="form-text text-muted">
|
|
How many parts are uploaded in parallel. Zero means the default (5)
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3DLPartSize" class="col-sm-2 col-form-label">DL Part Size (MB)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idS3DLPartSize" name="s3_download_part_size" placeholder=""
|
|
value="{{.S3Config.DownloadPartSize}}" aria-describedby="S3DLPartSizeHelpBlock">
|
|
<small id="S3DLPartSizeHelpBlock" class="form-text text-muted">
|
|
The buffer size for multipart downloads. Zero means the default (5 MB). Minimum is 5
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idS3DownloadConcurrency" class="col-sm-2 col-form-label">DL Concurrency</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idS3DownloadConcurrency" name="s3_download_concurrency"
|
|
placeholder="" value="{{.S3Config.DownloadConcurrency}}" min="0"
|
|
aria-describedby="S3DLConcurrencyHelpBlock">
|
|
<small id="S3DLConcurrencyHelpBlock" class="form-text text-muted">
|
|
How many parts are downloaded in parallel. Zero means the default (5)
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3UploadTimeout" class="col-sm-2 col-form-label">UL Part Timeout (secs)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idS3UploadTimeout" name="s3_upload_part_max_time"
|
|
placeholder="" value="{{.S3Config.UploadPartMaxTime}}" min="0"
|
|
aria-describedby="S3UploadTimeoutHelpBlock">
|
|
<small id="S3UploadTimeoutHelpBlock" class="form-text text-muted">
|
|
Max time limit, in seconds, to upload a single part. 0 means no limit
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idS3DownloadTimeout" class="col-sm-2 col-form-label">DL Part Timeout (secs)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idS3DownloadTimeout" name="s3_download_part_max_time"
|
|
placeholder="" value="{{.S3Config.DownloadPartMaxTime}}" min="0"
|
|
aria-describedby="S3DownloadTimeoutHelpBlock">
|
|
<small id="S3DownloadTimeoutHelpBlock" class="form-text text-muted">
|
|
Max time limit, in seconds, to download a single part. 0 means no limit
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3RoleARN" class="col-sm-2 col-form-label">Role ARN</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idS3RoleARN" name="s3_role_arn" placeholder=""
|
|
value="{{.S3Config.RoleARN}}" aria-describedby="S3RoleARNHelpBlock">
|
|
<small id="S3RoleARNHelpBlock" class="form-text text-muted">
|
|
Optional IAM Role ARN to assume
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3ACL" class="col-sm-2 col-form-label">ACL</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idS3ACL" name="s3_acl" placeholder=""
|
|
value="{{.S3Config.ACL}}" maxlength="255" aria-describedby="S3ACLHelpBlock">
|
|
<small id="S3ACLHelpBlock" class="form-text text-muted">
|
|
ACL for uploaded objects. Leave blank for default. For more info take a look <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl" target="_blank">here</a>
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-s3fs">
|
|
<label for="idS3KeyPrefix" class="col-sm-2 col-form-label">Key Prefix</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idS3KeyPrefix" name="s3_key_prefix" placeholder=""
|
|
value="{{.S3Config.KeyPrefix}}" aria-describedby="S3KeyPrefixHelpBlock">
|
|
<small id="S3KeyPrefixHelpBlock" class="form-text text-muted">
|
|
Similar to a chroot for local filesystem. Cannot start with "/". Example: "somedir/subdir/".
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group fsconfig fsconfig-s3fs">
|
|
<div class="form-check">
|
|
<input type="checkbox" class="form-check-input" id="idS3ForcePathStyle" name="s3_force_path_style"
|
|
{{if .S3Config.ForcePathStyle}}checked{{end}}>
|
|
<label for="idS3ForcePathStyle" class="form-check-label" aria-describedby="S3PathStyleHelpBlock">Use path-style addressing, i.e., "`endpoint`/BUCKET/KEY"</label>
|
|
<small id="S3PathStyleHelpBlock" class="form-text text-muted">
|
|
It is required for some compatible S3 backends
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-gcsfs">
|
|
<label for="idGCSBucket" class="col-sm-2 col-form-label">Bucket</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idGCSBucket" name="gcs_bucket" placeholder=""
|
|
value="{{.GCSConfig.Bucket}}" maxlength="255">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-gcsfs">
|
|
<label for="idGCSCredentialFile" class="col-sm-2 col-form-label">Credentials file</label>
|
|
<div class="col-sm-4">
|
|
<input type="file" class="form-control-file" id="idGCSCredentialFile" name="gcs_credential_file"
|
|
aria-describedby="GCSCredentialsHelpBlock">
|
|
<small id="GCSCredentialsHelpBlock" class="form-text text-muted">
|
|
Add or update credentials from a JSON file
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-1"></div>
|
|
<label for="idGCSStorageClass" class="col-sm-2 col-form-label">Storage Class</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idGCSStorageClass" name="gcs_storage_class" placeholder=""
|
|
value="{{.GCSConfig.StorageClass}}" maxlength="255" aria-describedby="GCSStorageClassHelpBlock">
|
|
<small id="GCSStorageClassHelpBlock" class="form-text text-muted">
|
|
Leave blank for default
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group fsconfig fsconfig-gcsfs">
|
|
<div class="form-check">
|
|
<input type="checkbox" class="form-check-input" id="idGCSAutoCredentials" name="gcs_auto_credentials"
|
|
aria-describedby="GCSAutoCredentialsHelpBlock" {{if gt .GCSConfig.AutomaticCredentials 0}}checked{{end}}>
|
|
<label for="idGCSAutoCredentials" class="form-check-label">Automatic credentials</label>
|
|
<small id="GCSAutoCredentialsHelpBlock" class="form-text text-muted">
|
|
Use default application credentials or credentials from environment
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-gcsfs">
|
|
<label for="idGCSKeyPrefix" class="col-sm-2 col-form-label">Key Prefix</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idGCSKeyPrefix" name="gcs_key_prefix" placeholder=""
|
|
value="{{.GCSConfig.KeyPrefix}}" aria-describedby="GCSKeyPrefixHelpBlock">
|
|
<small id="GCSKeyPrefixHelpBlock" class="form-text text-muted">
|
|
Similar to a chroot for local filesystem. Cannot start with "/". Example: "somedir/subdir/".
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idGCSACL" class="col-sm-2 col-form-label">ACL</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idGCSACL" name="gcs_acl" placeholder=""
|
|
value="{{.GCSConfig.ACL}}" maxlength="255" aria-describedby="GCSACLHelpBlock">
|
|
<small id="GCSACLHelpBlock" class="form-text text-muted">
|
|
ACL for uploaded objects. Leave blank for default. For more info refer to the JSON API <a href="https://cloud.google.com/storage/docs/access-control/lists#predefined-acl" target="_blank">here</a>
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzContainer" class="col-sm-2 col-form-label">Container</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idAzContainer" name="az_container" placeholder=""
|
|
value="{{.AzBlobConfig.Container}}" maxlength="255">
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idAzAccountName" class="col-sm-2 col-form-label">Account Name</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idAzAccountName" name="az_account_name" placeholder=""
|
|
value="{{.AzBlobConfig.AccountName}}" maxlength="255">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzAccountKey" class="col-sm-2 col-form-label">Account Key</label>
|
|
<div class="col-sm-10">
|
|
<input type="password" class="form-control" id="idAzAccountKey" name="az_account_key" placeholder=""
|
|
value="{{if .AzBlobConfig.AccountKey.IsEncrypted}}{{.RedactedSecret}}{{else}}{{.AzBlobConfig.AccountKey.GetPayload}}{{end}}">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzSASURL" class="col-sm-2 col-form-label">SAS URL</label>
|
|
<div class="col-sm-10">
|
|
<input type="password" class="form-control" id="idAzSASURL" name="az_sas_url" placeholder="" aria-describedby="AzSASURLHelpBlock"
|
|
value="{{if .AzBlobConfig.SASURL.IsEncrypted}}{{.RedactedSecret}}{{else}}{{.AzBlobConfig.SASURL.GetPayload}}{{end}}">
|
|
<small id="AzSASURLHelpBlock" class="form-text text-muted">
|
|
Shared Access Signature URL can be used instead of account name/key
|
|
</small>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzEndpoint" class="col-sm-2 col-form-label">Endpoint</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idAzEndpoint" name="az_endpoint" placeholder=""
|
|
aria-describedby="AzEndpointHelpBlock" value="{{.AzBlobConfig.Endpoint}}" maxlength="512">
|
|
<small id="AzEndpointHelpBlock" class="form-text text-muted">
|
|
Optional endpoint
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzAccessTier" class="col-sm-2 col-form-label">Access Tier</label>
|
|
<div class="col-sm-10">
|
|
<select class="form-control selectpicker" id="idAzAccessTier" name="az_access_tier">
|
|
<option value="" {{if eq .AzBlobConfig.AccessTier "" }}selected{{end}}>Default</option>
|
|
<option value="Hot" {{if eq .AzBlobConfig.AccessTier "Hot" }}selected{{end}}>Hot</option>
|
|
<option value="Cool" {{if eq .AzBlobConfig.AccessTier "Cool" }}selected{{end}}>Cool</option>
|
|
<option value="Archive" {{if eq .AzBlobConfig.AccessTier "Archive" }}selected{{end}}>Archive
|
|
</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzUploadPartSize" class="col-sm-2 col-form-label">UL Part Size (MB)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idAzUploadPartSize" name="az_upload_part_size" placeholder=""
|
|
value="{{.AzBlobConfig.UploadPartSize}}" aria-describedby="AzDLPartSizeHelpBlock">
|
|
<small id="AzDLPartSizeHelpBlock" class="form-text text-muted">
|
|
The buffer size for multipart uploads. Zero means the default (5 MB)
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idAzUploadConcurrency" class="col-sm-2 col-form-label">UL Concurrency</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idAzUploadConcurrency" name="az_upload_concurrency"
|
|
placeholder="" value="{{.AzBlobConfig.UploadConcurrency}}" min="0"
|
|
aria-describedby="AzULConcurrencyHelpBlock">
|
|
<small id="AzULConcurrencyHelpBlock" class="form-text text-muted">
|
|
How many parts are uploaded in parallel. Zero means the default (5)
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzDownloadPartSize" class="col-sm-2 col-form-label">DL Part Size (MB)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idAzDownloadPartSize" name="az_download_part_size" placeholder=""
|
|
value="{{.AzBlobConfig.DownloadPartSize}}" aria-describedby="AzDLPartSizeHelpBlock">
|
|
<small id="AzDLPartSizeHelpBlock" class="form-text text-muted">
|
|
The buffer size for multipart downloads. Zero means the default (5 MB)
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idAzDownloadConcurrency" class="col-sm-2 col-form-label">DL Concurrency</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idAzDownloadConcurrency" name="az_download_concurrency"
|
|
placeholder="" value="{{.AzBlobConfig.DownloadConcurrency}}" min="0"
|
|
aria-describedby="AzDLConcurrencyHelpBlock">
|
|
<small id="AzDLConcurrencyHelpBlock" class="form-text text-muted">
|
|
How many parts are downloaded in parallel. Zero means the default (5)
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-azblobfs">
|
|
<label for="idAzKeyPrefix" class="col-sm-2 col-form-label">Key Prefix</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idAzKeyPrefix" name="az_key_prefix" placeholder=""
|
|
value="{{.AzBlobConfig.KeyPrefix}}" aria-describedby="AzKeyPrefixHelpBlock">
|
|
<small id="AzKeyPrefixHelpBlock" class="form-text text-muted">
|
|
Similar to a chroot for local filesystem. Cannot start with "/". Example: "somedir/subdir/".
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group fsconfig fsconfig-azblobfs">
|
|
<div class="form-check">
|
|
<input type="checkbox" class="form-check-input" id="idUseEmulator" name="az_use_emulator" {{if
|
|
.AzBlobConfig.UseEmulator}}checked{{end}}>
|
|
<label for="idUseEmulator" class="form-check-label">Use Azure Blob emulator</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-cryptfs">
|
|
<label for="idCryptPassphrase" class="col-sm-2 col-form-label">Passphrase</label>
|
|
<div class="col-sm-10">
|
|
<input type="password" class="form-control" id="idCryptPassphrase" name="crypt_passphrase"
|
|
placeholder="" aria-describedby="CryptPassphraseHelpBlock"
|
|
value="{{if .CryptConfig.Passphrase.IsEncrypted}}{{.RedactedSecret}}{{else}}{{.CryptConfig.Passphrase.GetPayload}}{{end}}">
|
|
<small id="CryptPassphraseHelpBlock" class="form-text text-muted">
|
|
Passphrase to derive the per-object encryption key
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-sftpfs">
|
|
<label for="idSFTPEndpoint" class="col-sm-2 col-form-label">Endpoint</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idSFTPEndpoint" name="sftp_endpoint" placeholder=""
|
|
value="{{.SFTPConfig.Endpoint}}" maxlength="255" aria-describedby="SFTPEndpointHelpBlock">
|
|
<small id="SFTPEndpointHelpBlock" class="form-text text-muted">
|
|
Endpoint as host:port, port is always required
|
|
</small>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idSFTPUploadBufferSize" class="col-sm-2 col-form-label">Buffer size (MB)</label>
|
|
<div class="col-sm-3">
|
|
<input type="number" class="form-control" id="idSFTPBufferSize" name="sftp_buffer_size" placeholder=""
|
|
value="{{.SFTPConfig.BufferSize}}" min="0" max="16" aria-describedby="SFTPBufferHelpBlock">
|
|
<small id="SFTPBufferHelpBlock" class="form-text text-muted">
|
|
A buffer size > 0 enables concurrent transfers
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-sftpfs">
|
|
<label for="idSFTPUsername" class="col-sm-2 col-form-label">Username</label>
|
|
<div class="col-sm-3">
|
|
<input type="text" class="form-control" id="idSFTPUsername" name="sftp_username" placeholder=""
|
|
value="{{.SFTPConfig.Username}}" maxlength="255">
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
<label for="idSFTPPassword" class="col-sm-2 col-form-label">Password</label>
|
|
<div class="col-sm-3">
|
|
<input type="password" class="form-control" id="idSFTPPassword" name="sftp_password" placeholder=""
|
|
value="{{if .SFTPConfig.Password.IsEncrypted}}{{.RedactedSecret}}{{else}}{{.SFTPConfig.Password.GetPayload}}{{end}}">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-sftpfs">
|
|
<label for="idSFTPPrivateKey" class="col-sm-2 col-form-label">Private key</label>
|
|
<div class="col-sm-10">
|
|
<textarea type="password" class="form-control" id="idSFTPPrivateKey" name="sftp_private_key"
|
|
rows="3">{{if .SFTPConfig.PrivateKey.IsEncrypted}}{{.RedactedSecret}}{{else}}{{.SFTPConfig.PrivateKey.GetPayload}}{{end}}</textarea>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-sftpfs">
|
|
<label for="idSFTPFingerprints" class="col-sm-2 col-form-label">Fingerprints</label>
|
|
<div class="col-sm-10">
|
|
<textarea class="form-control" id="idSFTPFingerprints" name="sftp_fingerprints" rows="3"
|
|
aria-describedby="SFTPFingerprintsHelpBlock">{{range .SFTPConfig.Fingerprints}}{{.}} {{end}}</textarea>
|
|
<small id="SFTPFingerprintsHelpBlock" class="form-text text-muted">
|
|
SHA256 fingerprints to validate when connecting to the external SFTP server, one per line. If
|
|
empty any host key will be accepted: this is a security risk!
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group row fsconfig fsconfig-sftpfs">
|
|
<label for="idSFTPPrefix" class="col-sm-2 col-form-label">Prefix</label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="idSFTPPrefix" name="sftp_prefix" placeholder=""
|
|
value="{{.SFTPConfig.Prefix}}" aria-describedby="SFTPPrefixHelpBlock">
|
|
<small id="SFTPPrefixHelpBlock" class="form-text text-muted">
|
|
Similar to a chroot for local filesystem. Example: "/somedir/subdir".
|
|
</small>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group fsconfig fsconfig-sftpfs">
|
|
<div class="form-check">
|
|
<input type="checkbox" class="form-check-input" id="idDisableConcurrentReads"
|
|
name="sftp_disable_concurrent_reads" {{if .SFTPConfig.DisableCouncurrentReads}}checked{{end}}>
|
|
<label for="idDisableConcurrentReads" class="form-check-label">Disable concurrent reads</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
{{define "fsjs"}}
|
|
<script type="text/javascript">
|
|
function onFilesystemChanged(val){
|
|
// each fsconfig form-group has the 'fsconfig' css class
|
|
// as well as a 'fsconfig-{name}' class where name is the FilesystemProvider.Name
|
|
// we're simply hiding all of them and then showing the ones that match the selected vfs provider
|
|
$('.form-group.fsconfig').hide();
|
|
$('.form-group.fsconfig-'+val).show();
|
|
}
|
|
</script>
|
|
{{end}} |