Commit b72ba6b6 authored by ibuler's avatar ibuler

Merge branch 'dev' of github.com:jumpserver/coco into dev

parents 42038786 afe57038
......@@ -273,7 +273,7 @@ class ElFinderConnector:
upload_paths = self.data.get('upload_path[]')
if self.data.get('chunk') and self.data.get('cid'):
self.response.update(
volume.upload_as_chunk(
volume.upload_as_chunk(self.data.get('cid'),
self.request.files, self.data.get('chunk'), parent, upload_paths
)
)
......
......@@ -14,6 +14,7 @@ class BaseVolume:
self.path_sep = '/'
self.dir_mode = '0o755'
self.file_mode = '0o644'
#
# @classmethod
# def get_volume(cls, request):
......@@ -226,7 +227,7 @@ class BaseVolume:
"""
raise NotImplementedError
def upload_as_chunk(self, files, chunk_name, parent, upload_path):
def upload_as_chunk(self, cid, files, chunk_name, parent, upload_path):
"""
Upload a large file as chunk
:param files:
......
......@@ -17,10 +17,13 @@ class SFTPVolume(BaseVolume):
self.sftp = sftp
self.root_name = 'Home'
self._stat_cache = {}
self._fd_cache = dict()
self.lock = threading.Lock()
super(SFTPVolume, self).__init__()
def close(self):
for fd in self._fd_cache.values():
fd.close()
self.sftp.close()
def get_volume_id(self):
......@@ -250,7 +253,7 @@ class SFTPVolume(BaseVolume):
added.append(self._info(path))
return {'added': added}
def upload_as_chunk(self, files, chunk_name, parent, upload_path):
def upload_as_chunk(self, cid, files, chunk_name, parent, upload_path):
added = []
parent_path = self._path(parent)
item = files.get('upload[]')
......@@ -258,28 +261,39 @@ class SFTPVolume(BaseVolume):
filename = '.'.join(__tmp[:-2])
num, total = __tmp[-2].split('_')
num, total = int(num), int(total)
if len(upload_path) == 1 and (parent != upload_path[0]) and (filename in upload_path[0]):
if upload_path and len(upload_path) == 1 and (filename in upload_path[0]):
path = self._join(parent_path, upload_path[0].lstrip(self.path_sep))
else:
elif upload_path and parent != upload_path[0]:
path = self._join(parent_path, upload_path[0].lstrip(self.path_sep), filename)
else:
path = self._join(parent_path, filename)
remote_path = self._remote_path(path)
if num == 0:
infos = self._list(os.path.dirname(path))
files_exist = [d['name'] for d in infos]
if item.filename in files_exist:
raise OSError("File {} exits".format(remote_path))
with self.sftp.open(remote_path, 'a') as rf:
for data in item:
rf.write(data)
if cid not in self._fd_cache:
rf = self.sftp.open(remote_path, "a")
self._fd_cache[cid] = rf
else:
rf = self._fd_cache.get(cid)
for data in item:
rf.write(data)
if num != total:
return {'added': added}
else:
rf.close()
self._fd_cache.pop(cid)
return {'added': added, '_chunkmerged': filename, '_name': filename}
def upload_chunk_merge(self, parent, chunk, upload_path):
parent_path = self._path(parent)
if len(upload_path) == 1 and (parent != upload_path[0]):
if upload_path and len(upload_path) == 1 and (chunk in upload_path[0]):
path = self._join(parent_path, upload_path[0].lstrip(self.path_sep))
elif upload_path and (parent != upload_path[0]):
path = self._join(parent_path, upload_path[0].lstrip(self.path_sep), chunk)
else:
path = self._join(parent_path, chunk)
return {"added": [self._info(path)]}
......
......@@ -14230,6 +14230,8 @@ $.fn.elfindercwd = function(fm, options) {
selectCheckbox && selectAllCheckbox.find('input').prop('checked', true);
fm.lazy(function() {
var files;
// fix select all display; remove cwd disable status
cwd.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').removeClass(clDisabled);
cwd.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').trigger(evtSelect);
if (fm.maxTargets && (incHashes || cwdHashes).length > fm.maxTargets) {
files = $.map(incHashes || cwdHashes, function(hash) { return fm.file(hash) || null; });
......@@ -33643,4 +33645,4 @@ elFinder.prototype.commands.view = function() {
};
return elFinder;
}));
\ No newline at end of file
}));
......@@ -118,14 +118,15 @@ class ProxyServer:
self.get_system_user_username_if_need()
self.get_system_user_auth_or_manual_set()
self.send_connecting_message()
logger.info("Connect to {}:{} ...".format(self.asset.hostname, self.asset.ssh_port))
if not self.validate_permission():
msg = _('No permission')
self.client.send_unicode(warning(wr(msg, before=2, after=0)))
server = None
elif self.system_user.protocol == 'telnet':
logger.info("Connect to {}:{} ...".format(self.asset.hostname, self.asset.telnet_port))
server = self.get_telnet_server_conn()
elif self.system_user.protocol == 'ssh':
logger.info("Connect to {}:{} ...".format(self.asset.hostname, self.asset.ssh_port))
server = self.get_ssh_server_conn()
else:
server = None
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment