mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-06 14:20:55 +03:00
add Data At Rest Encryption support
This commit is contained in:
@@ -55,12 +55,20 @@ Output:
|
||||
"download_bandwidth": 60,
|
||||
"expiration_date": 1546297200000,
|
||||
"filesystem": {
|
||||
"gcsconfig": {},
|
||||
"azblobconfig": {
|
||||
"account_key": {}
|
||||
},
|
||||
"cryptconfig": {
|
||||
"passphrase": {}
|
||||
},
|
||||
"gcsconfig": {
|
||||
"credentials": {}
|
||||
},
|
||||
"provider": 1,
|
||||
"s3config": {
|
||||
"access_key": "accesskey",
|
||||
"access_secret": {
|
||||
"payload": "dcd07e64a5ef5ede37b978198ca396ea9aee92453208ee2fee6f25407e47bf2119ba8edf2e81f91999bd5386c1a7",
|
||||
"payload": "ALVIG4egZxRjKH8/8NsJViA7EH5MqsweqmwLhGj4M4AGYgMM2ygF7kbCw+R5aQ==",
|
||||
"status": "Secretbox"
|
||||
},
|
||||
"bucket": "test",
|
||||
@@ -181,6 +189,9 @@ Output:
|
||||
"azblobconfig": {
|
||||
"account_key": {}
|
||||
},
|
||||
"cryptconfig": {
|
||||
"passphrase": {}
|
||||
},
|
||||
"gcsconfig": {
|
||||
"credentials": {}
|
||||
},
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
import argparse
|
||||
import base64
|
||||
from datetime import datetime
|
||||
import json
|
||||
import platform
|
||||
@@ -84,7 +83,7 @@ class SFTPGoApiRequests:
|
||||
denied_patterns=[], allowed_patterns=[], s3_upload_part_size=0, s3_upload_concurrency=0,
|
||||
max_upload_file_size=0, denied_protocols=[], az_container='', az_account_name='', az_account_key='',
|
||||
az_sas_url='', az_endpoint='', az_upload_part_size=0, az_upload_concurrency=0, az_key_prefix='',
|
||||
az_use_emulator=False, az_access_tier='', additional_info=''):
|
||||
az_use_emulator=False, az_access_tier='', additional_info='', crypto_passphrase=''):
|
||||
user = {'id':user_id, 'username':username, 'uid':uid, 'gid':gid,
|
||||
'max_sessions':max_sessions, 'quota_size':quota_size, 'quota_files':quota_files,
|
||||
'upload_bandwidth':upload_bandwidth, 'download_bandwidth':download_bandwidth,
|
||||
@@ -111,7 +110,7 @@ class SFTPGoApiRequests:
|
||||
gcs_automatic_credentials, s3_upload_part_size, s3_upload_concurrency,
|
||||
az_container, az_account_name, az_account_key, az_sas_url,
|
||||
az_endpoint, az_upload_part_size, az_upload_concurrency, az_key_prefix,
|
||||
az_use_emulator, az_access_tier)})
|
||||
az_use_emulator, az_access_tier, crypto_passphrase)})
|
||||
return user
|
||||
|
||||
def buildVirtualFolders(self, vfolders):
|
||||
@@ -235,7 +234,7 @@ class SFTPGoApiRequests:
|
||||
s3_storage_class, s3_key_prefix, gcs_bucket, gcs_key_prefix, gcs_storage_class,
|
||||
gcs_credentials_file, gcs_automatic_credentials, s3_upload_part_size, s3_upload_concurrency,
|
||||
az_container, az_account_name, az_account_key, az_sas_url, az_endpoint, az_upload_part_size,
|
||||
az_upload_concurrency, az_key_prefix, az_use_emulator, az_access_tier):
|
||||
az_upload_concurrency, az_key_prefix, az_use_emulator, az_access_tier, crypto_passphrase):
|
||||
fs_config = {'provider':0}
|
||||
if fs_provider == 'S3':
|
||||
secret = {}
|
||||
@@ -266,6 +265,9 @@ class SFTPGoApiRequests:
|
||||
'upload_concurrency':az_upload_concurrency, 'key_prefix':az_key_prefix, 'use_emulator':
|
||||
az_use_emulator, 'access_tier':az_access_tier}
|
||||
fs_config.update({'provider':3, 'azblobconfig':azureconfig})
|
||||
elif fs_provider == "Crypto":
|
||||
cryptoconfig = {"passphrase":{"status":"Plain", "payload":crypto_passphrase}}
|
||||
fs_config.update({'provider':4, 'cryptconfig':cryptoconfig})
|
||||
return fs_config
|
||||
|
||||
def getUsers(self, limit=100, offset=0, order='ASC', username=''):
|
||||
@@ -285,7 +287,8 @@ class SFTPGoApiRequests:
|
||||
denied_login_methods=[], virtual_folders=[], denied_patterns=[], allowed_patterns=[],
|
||||
s3_upload_part_size=0, s3_upload_concurrency=0, max_upload_file_size=0, denied_protocols=[], az_container="",
|
||||
az_account_name='', az_account_key='', az_sas_url='', az_endpoint='', az_upload_part_size=0,
|
||||
az_upload_concurrency=0, az_key_prefix='', az_use_emulator=False, az_access_tier='', additional_info=''):
|
||||
az_upload_concurrency=0, az_key_prefix='', az_use_emulator=False, az_access_tier='', additional_info='',
|
||||
crypto_passphrase=''):
|
||||
u = self.buildUserObject(0, username, password, public_keys, home_dir, uid, gid, max_sessions,
|
||||
quota_size, quota_files, self.buildPermissions(perms, subdirs_permissions), upload_bandwidth, download_bandwidth,
|
||||
status, expiration_date, allowed_ip, denied_ip, fs_provider, s3_bucket, s3_region, s3_access_key,
|
||||
@@ -293,7 +296,7 @@ class SFTPGoApiRequests:
|
||||
gcs_credentials_file, gcs_automatic_credentials, denied_login_methods, virtual_folders, denied_patterns,
|
||||
allowed_patterns, s3_upload_part_size, s3_upload_concurrency, max_upload_file_size, denied_protocols,
|
||||
az_container, az_account_name, az_account_key, az_sas_url, az_endpoint, az_upload_part_size,
|
||||
az_upload_concurrency, az_key_prefix, az_use_emulator, az_access_tier, additional_info)
|
||||
az_upload_concurrency, az_key_prefix, az_use_emulator, az_access_tier, additional_info, crypto_passphrase)
|
||||
r = requests.post(self.userPath, json=u, auth=self.auth, verify=self.verify)
|
||||
self.printResponse(r)
|
||||
|
||||
@@ -306,7 +309,7 @@ class SFTPGoApiRequests:
|
||||
allowed_patterns=[], s3_upload_part_size=0, s3_upload_concurrency=0, max_upload_file_size=0,
|
||||
denied_protocols=[], disconnect=0, az_container='', az_account_name='', az_account_key='', az_sas_url='',
|
||||
az_endpoint='', az_upload_part_size=0, az_upload_concurrency=0, az_key_prefix='', az_use_emulator=False,
|
||||
az_access_tier='', additional_info=''):
|
||||
az_access_tier='', additional_info='', crypto_passphrase=''):
|
||||
u = self.buildUserObject(user_id, username, password, public_keys, home_dir, uid, gid, max_sessions,
|
||||
quota_size, quota_files, self.buildPermissions(perms, subdirs_permissions), upload_bandwidth, download_bandwidth,
|
||||
status, expiration_date, allowed_ip, denied_ip, fs_provider, s3_bucket, s3_region, s3_access_key,
|
||||
@@ -314,7 +317,7 @@ class SFTPGoApiRequests:
|
||||
gcs_credentials_file, gcs_automatic_credentials, denied_login_methods, virtual_folders, denied_patterns,
|
||||
allowed_patterns, s3_upload_part_size, s3_upload_concurrency, max_upload_file_size, denied_protocols,
|
||||
az_container, az_account_name, az_account_key, az_sas_url, az_endpoint, az_upload_part_size,
|
||||
az_upload_concurrency, az_key_prefix, az_use_emulator, az_access_tier, additional_info)
|
||||
az_upload_concurrency, az_key_prefix, az_use_emulator, az_access_tier, additional_info, crypto_passphrase)
|
||||
r = requests.put(urlparse.urljoin(self.userPath, 'user/' + str(user_id)), params={'disconnect':disconnect},
|
||||
json=u, auth=self.auth, verify=self.verify)
|
||||
self.printResponse(r)
|
||||
@@ -622,7 +625,7 @@ def addCommonUserArguments(parser):
|
||||
parser.add_argument('--allowed-patterns', type=str, nargs='*', default=[], help='Allowed file patterns case insensitive. '
|
||||
+'The format is /dir::pattern1,pattern2. For example: "/somedir::*.jpg,a*b?.png" "/otherdir/subdir::*.zip,*.rar". ' +
|
||||
'Default: %(default)s')
|
||||
parser.add_argument('--fs', type=str, default='local', choices=['local', 'S3', 'GCS', "AzureBlob"],
|
||||
parser.add_argument('--fs', type=str, default='local', choices=['local', 'S3', 'GCS', "AzureBlob", "Crypto"],
|
||||
help='Filesystem provider. Default: %(default)s')
|
||||
parser.add_argument('--s3-bucket', type=str, default='', help='Default: %(default)s')
|
||||
parser.add_argument('--s3-key-prefix', type=str, default='', help='Virtual root directory. If non empty only this ' +
|
||||
@@ -660,6 +663,8 @@ def addCommonUserArguments(parser):
|
||||
'directory and its contents will be available. Cannot start with "/". For example "folder/subfolder/".' +
|
||||
' Default: %(default)s')
|
||||
parser.add_argument('--az-use-emulator', type=bool, default=False, help='Default: %(default)s')
|
||||
parser.add_argument('--crypto-passphrase', type=str, default='', help='Passphrase for encryption/decryption, to use ' +
|
||||
'with Crypto filesystem')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -816,7 +821,7 @@ if __name__ == '__main__':
|
||||
args.s3_upload_part_size, args.s3_upload_concurrency, args.max_upload_file_size, args.denied_protocols,
|
||||
args.az_container, args.az_account_name, args.az_account_key, args.az_sas_url, args.az_endpoint,
|
||||
args.az_upload_part_size, args.az_upload_concurrency, args.az_key_prefix, args.az_use_emulator,
|
||||
args.az_access_tier, args.additional_info)
|
||||
args.az_access_tier, args.additional_info, args.crypto_passphrase)
|
||||
elif args.command == 'update-user':
|
||||
api.updateUser(args.id, args.username, args.password, args.public_keys, args.home_dir, args.uid, args.gid,
|
||||
args.max_sessions, args.quota_size, args.quota_files, args.permissions, args.upload_bandwidth,
|
||||
@@ -829,7 +834,7 @@ if __name__ == '__main__':
|
||||
args.s3_upload_concurrency, args.max_upload_file_size, args.denied_protocols, args.disconnect,
|
||||
args.az_container, args.az_account_name, args.az_account_key, args.az_sas_url, args.az_endpoint,
|
||||
args.az_upload_part_size, args.az_upload_concurrency, args.az_key_prefix, args.az_use_emulator,
|
||||
args.az_access_tier, args.additional_info)
|
||||
args.az_access_tier, args.additional_info, args.crypto_passphrase)
|
||||
elif args.command == 'delete-user':
|
||||
api.deleteUser(args.id)
|
||||
elif args.command == 'get-users':
|
||||
|
||||
Reference in New Issue
Block a user