|
@@ -73,7 +73,8 @@ class SFTPGoApiRequests:
|
|
def buildUserObject(self, user_id=0, username="", password="", public_keys=[], home_dir="", uid=0, gid=0,
|
|
def buildUserObject(self, user_id=0, username="", password="", public_keys=[], home_dir="", uid=0, gid=0,
|
|
max_sessions=0, quota_size=0, quota_files=0, permissions={}, upload_bandwidth=0, download_bandwidth=0,
|
|
max_sessions=0, quota_size=0, quota_files=0, permissions={}, upload_bandwidth=0, download_bandwidth=0,
|
|
status=1, expiration_date=0, allowed_ip=[], denied_ip=[], fs_provider='local', s3_bucket='',
|
|
status=1, expiration_date=0, allowed_ip=[], denied_ip=[], fs_provider='local', s3_bucket='',
|
|
- s3_region='', s3_access_key='', s3_access_secret='', s3_endpoint='', s3_storage_class=''):
|
|
|
|
|
|
+ s3_region='', s3_access_key='', s3_access_secret='', s3_endpoint='', s3_storage_class='',
|
|
|
|
+ s3_key_prefix=''):
|
|
user = {"id":user_id, "username":username, "uid":uid, "gid":gid,
|
|
user = {"id":user_id, "username":username, "uid":uid, "gid":gid,
|
|
"max_sessions":max_sessions, "quota_size":quota_size, "quota_files":quota_files,
|
|
"max_sessions":max_sessions, "quota_size":quota_size, "quota_files":quota_files,
|
|
"upload_bandwidth":upload_bandwidth, "download_bandwidth":download_bandwidth,
|
|
"upload_bandwidth":upload_bandwidth, "download_bandwidth":download_bandwidth,
|
|
@@ -92,7 +93,8 @@ class SFTPGoApiRequests:
|
|
if allowed_ip or denied_ip:
|
|
if allowed_ip or denied_ip:
|
|
user.update({"filters":self.buildFilters(allowed_ip, denied_ip)})
|
|
user.update({"filters":self.buildFilters(allowed_ip, denied_ip)})
|
|
user.update({"filesystem":self.buildFsConfig(fs_provider, s3_bucket, s3_region, s3_access_key,
|
|
user.update({"filesystem":self.buildFsConfig(fs_provider, s3_bucket, s3_region, s3_access_key,
|
|
- s3_access_secret, s3_endpoint, s3_storage_class)})
|
|
|
|
|
|
+ s3_access_secret, s3_endpoint, s3_storage_class,
|
|
|
|
+ s3_key_prefix)})
|
|
return user
|
|
return user
|
|
|
|
|
|
def buildPermissions(self, root_perms, subdirs_perms):
|
|
def buildPermissions(self, root_perms, subdirs_perms):
|
|
@@ -127,11 +129,12 @@ class SFTPGoApiRequests:
|
|
return filters
|
|
return filters
|
|
|
|
|
|
def buildFsConfig(self, fs_provider, s3_bucket, s3_region, s3_access_key, s3_access_secret, s3_endpoint,
|
|
def buildFsConfig(self, fs_provider, s3_bucket, s3_region, s3_access_key, s3_access_secret, s3_endpoint,
|
|
- s3_storage_class):
|
|
|
|
|
|
+ s3_storage_class, s3_key_prefix):
|
|
fs_config = {'provider':0}
|
|
fs_config = {'provider':0}
|
|
if fs_provider == 'S3':
|
|
if fs_provider == 'S3':
|
|
s3config = {'bucket':s3_bucket, 'region':s3_region, 'access_key':s3_access_key, 'access_secret':
|
|
s3config = {'bucket':s3_bucket, 'region':s3_region, 'access_key':s3_access_key, 'access_secret':
|
|
- s3_access_secret, 'endpoint':s3_endpoint, 'storage_class':s3_storage_class}
|
|
|
|
|
|
+ s3_access_secret, 'endpoint':s3_endpoint, 'storage_class':s3_storage_class, 'key_prefix':
|
|
|
|
+ s3_key_prefix}
|
|
fs_config.update({'provider':1, 's3config':s3config})
|
|
fs_config.update({'provider':1, 's3config':s3config})
|
|
return fs_config
|
|
return fs_config
|
|
|
|
|
|
@@ -147,22 +150,23 @@ class SFTPGoApiRequests:
|
|
def addUser(self, username="", password="", public_keys="", home_dir="", uid=0, gid=0, max_sessions=0, quota_size=0,
|
|
def addUser(self, username="", password="", public_keys="", home_dir="", uid=0, gid=0, max_sessions=0, quota_size=0,
|
|
quota_files=0, perms=[], upload_bandwidth=0, download_bandwidth=0, status=1, expiration_date=0,
|
|
quota_files=0, perms=[], upload_bandwidth=0, download_bandwidth=0, status=1, expiration_date=0,
|
|
subdirs_permissions=[], allowed_ip=[], denied_ip=[], fs_provider='local', s3_bucket='', s3_region='',
|
|
subdirs_permissions=[], allowed_ip=[], denied_ip=[], fs_provider='local', s3_bucket='', s3_region='',
|
|
- s3_access_key='', s3_access_secret='', s3_endpoint='', s3_storage_class=''):
|
|
|
|
|
|
+ s3_access_key='', s3_access_secret='', s3_endpoint='', s3_storage_class='', s3_key_prefix=''):
|
|
u = self.buildUserObject(0, username, password, public_keys, home_dir, uid, gid, max_sessions,
|
|
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,
|
|
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,
|
|
status, expiration_date, allowed_ip, denied_ip, fs_provider, s3_bucket, s3_region,
|
|
- s3_access_key, s3_access_secret, s3_endpoint, s3_storage_class)
|
|
|
|
|
|
+ s3_access_key, s3_access_secret, s3_endpoint, s3_storage_class, s3_key_prefix)
|
|
r = requests.post(self.userPath, json=u, auth=self.auth, verify=self.verify)
|
|
r = requests.post(self.userPath, json=u, auth=self.auth, verify=self.verify)
|
|
self.printResponse(r)
|
|
self.printResponse(r)
|
|
|
|
|
|
def updateUser(self, user_id, username="", password="", public_keys="", home_dir="", uid=0, gid=0, max_sessions=0,
|
|
def updateUser(self, user_id, username="", password="", public_keys="", home_dir="", uid=0, gid=0, max_sessions=0,
|
|
quota_size=0, quota_files=0, perms=[], upload_bandwidth=0, download_bandwidth=0, status=1,
|
|
quota_size=0, quota_files=0, perms=[], upload_bandwidth=0, download_bandwidth=0, status=1,
|
|
expiration_date=0, subdirs_permissions=[], allowed_ip=[], denied_ip=[], fs_provider='local',
|
|
expiration_date=0, subdirs_permissions=[], allowed_ip=[], denied_ip=[], fs_provider='local',
|
|
- s3_bucket='', s3_region='', s3_access_key='', s3_access_secret='', s3_endpoint='', s3_storage_class=''):
|
|
|
|
|
|
+ s3_bucket='', s3_region='', s3_access_key='', s3_access_secret='', s3_endpoint='', s3_storage_class='',
|
|
|
|
+ s3_key_prefix=''):
|
|
u = self.buildUserObject(user_id, username, password, public_keys, home_dir, uid, gid, max_sessions,
|
|
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,
|
|
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,
|
|
status, expiration_date, allowed_ip, denied_ip, fs_provider, s3_bucket, s3_region, s3_access_key,
|
|
- s3_access_secret, s3_endpoint, s3_storage_class)
|
|
|
|
|
|
+ s3_access_secret, s3_endpoint, s3_storage_class, s3_key_prefix)
|
|
r = requests.put(urlparse.urljoin(self.userPath, "user/" + str(user_id)), json=u, auth=self.auth, verify=self.verify)
|
|
r = requests.put(urlparse.urljoin(self.userPath, "user/" + str(user_id)), json=u, auth=self.auth, verify=self.verify)
|
|
self.printResponse(r)
|
|
self.printResponse(r)
|
|
|
|
|
|
@@ -419,6 +423,9 @@ def addCommonUserArguments(parser):
|
|
parser.add_argument('--fs', type=str, default='local', choices=['local', 'S3'],
|
|
parser.add_argument('--fs', type=str, default='local', choices=['local', 'S3'],
|
|
help='Filesystem provider. Default: %(default)s')
|
|
help='Filesystem provider. Default: %(default)s')
|
|
parser.add_argument('--s3-bucket', type=str, default='', help='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 ' +
|
|
|
|
+ 'directory and its contents will be available. Cannot start with "/". For example "folder/subfolder/".' +
|
|
|
|
+ ' Default: %(default)s')
|
|
parser.add_argument('--s3-region', type=str, default='', help='Default: %(default)s')
|
|
parser.add_argument('--s3-region', type=str, default='', help='Default: %(default)s')
|
|
parser.add_argument('--s3-access-key', type=str, default='', help='Default: %(default)s')
|
|
parser.add_argument('--s3-access-key', type=str, default='', help='Default: %(default)s')
|
|
parser.add_argument('--s3-access-secret', type=str, default='', help='Default: %(default)s')
|
|
parser.add_argument('--s3-access-secret', type=str, default='', help='Default: %(default)s')
|
|
@@ -527,13 +534,14 @@ if __name__ == '__main__':
|
|
args.quota_size, args.quota_files, args.permissions, args.upload_bandwidth, args.download_bandwidth,
|
|
args.quota_size, args.quota_files, args.permissions, args.upload_bandwidth, args.download_bandwidth,
|
|
args.status, getDatetimeAsMillisSinceEpoch(args.expiration_date), args.subdirs_permissions, args.allowed_ip,
|
|
args.status, getDatetimeAsMillisSinceEpoch(args.expiration_date), args.subdirs_permissions, args.allowed_ip,
|
|
args.denied_ip, args.fs, args.s3_bucket, args.s3_region, args.s3_access_key, args.s3_access_secret,
|
|
args.denied_ip, args.fs, args.s3_bucket, args.s3_region, args.s3_access_key, args.s3_access_secret,
|
|
- args.s3_endpoint, args.s3_storage_class)
|
|
|
|
|
|
+ args.s3_endpoint, args.s3_storage_class, args.s3_key_prefix)
|
|
elif args.command == 'update-user':
|
|
elif args.command == 'update-user':
|
|
api.updateUser(args.id, args.username, args.password, args.public_keys, args.home_dir, args.uid, args.gid,
|
|
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,
|
|
args.max_sessions, args.quota_size, args.quota_files, args.permissions, args.upload_bandwidth,
|
|
args.download_bandwidth, args.status, getDatetimeAsMillisSinceEpoch(args.expiration_date),
|
|
args.download_bandwidth, args.status, getDatetimeAsMillisSinceEpoch(args.expiration_date),
|
|
args.subdirs_permissions, args.allowed_ip, args.denied_ip, args.fs, args.s3_bucket, args.s3_region,
|
|
args.subdirs_permissions, args.allowed_ip, args.denied_ip, args.fs, args.s3_bucket, args.s3_region,
|
|
- args.s3_access_key, args.s3_access_secret, args.s3_endpoint, args.s3_storage_class)
|
|
|
|
|
|
+ args.s3_access_key, args.s3_access_secret, args.s3_endpoint, args.s3_storage_class,
|
|
|
|
+ args.s3_key_prefix)
|
|
elif args.command == 'delete-user':
|
|
elif args.command == 'delete-user':
|
|
api.deleteUser(args.id)
|
|
api.deleteUser(args.id)
|
|
elif args.command == 'get-users':
|
|
elif args.command == 'get-users':
|