Commit 18ab2ac6 authored by ibuler's avatar ibuler

[Update] Update

parent be260238
#!/usr/bin/python #!/usr/bin/python
# #
from coco.httpd import app from coco.httpd import app, socket_io
from coco.logger import create_logger from coco.logger import create_logger
create_logger() create_logger()
if __name__ == '__main__': if __name__ == '__main__':
app.run() socket_io.run(app, debug=False)
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
from .app import HttpServer, app from .app import HttpServer, app, socket_io
from . import view from . import view
...@@ -16,8 +16,8 @@ socket_io = SocketIO() ...@@ -16,8 +16,8 @@ socket_io = SocketIO()
socket_io.on_namespace(ProxyNamespace('/ssh')) socket_io.on_namespace(ProxyNamespace('/ssh'))
socket_io.on_namespace(ElfinderNamespace('/elfinder')) socket_io.on_namespace(ElfinderNamespace('/elfinder'))
init_kwargs = {'async_mode': 'threading'} # init_kwargs = {'async_mode': 'threading'}
# init_kwargs = {'async_mode': 'eventlet',} init_kwargs = {'async_mode': 'eventlet',}
socket_io.init_app(app, **init_kwargs) socket_io.init_app(app, **init_kwargs)
socket_io.on_error_default(lambda x: logger.exception(x)) socket_io.on_error_default(lambda x: logger.exception(x))
......
import logging import logging
import json
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -33,7 +34,7 @@ class ElFinderConnector: ...@@ -33,7 +34,7 @@ class ElFinderConnector:
'cmd', 'target', 'targets[]', 'current', 'tree', 'cmd', 'target', 'targets[]', 'current', 'tree',
'name', 'content', 'src', 'dst', 'cut', 'init', 'name', 'content', 'src', 'dst', 'cut', 'init',
'type', 'width', 'height', 'upload[]', 'dirs[]', 'type', 'width', 'height', 'upload[]', 'dirs[]',
'targets', "chunk", "range", "cid", 'targets', "chunk", "range", "cid", 'reload',
] ]
_options = { _options = {
...@@ -214,10 +215,11 @@ class ElFinderConnector: ...@@ -214,10 +215,11 @@ class ElFinderConnector:
volume = list(self.volumes.values())[0] volume = list(self.volumes.values())[0]
else: else:
volume = self.get_volume(target) volume = self.get_volume(target)
self.response['cwd'] = volume.info(target) self.response['cwd'] = volume.info(target)
files = volume.list(target) files = volume.list(target)
if 'tree' in self.data: if 'tree' in self.data or 'reload' in self.data:
parents = volume.parents(target, depth=0) parents = volume.parents(target, depth=0)
parents = filter(lambda x: x not in files, parents) parents = filter(lambda x: x not in files, parents)
files += parents files += parents
...@@ -286,7 +288,6 @@ class ElFinderConnector: ...@@ -286,7 +288,6 @@ class ElFinderConnector:
volume.upload_chunk_merge(parent, self.data.get('chunk')) volume.upload_chunk_merge(parent, self.data.get('chunk'))
) )
else: else:
print("__UPLOAD {}".format(self.data))
self.response.update(volume.upload(self.request.files, parent)) self.response.update(volume.upload(self.request.files, parent))
def __size(self): def __size(self):
......
import logging
import stat import stat
import re import threading
from flask import send_file from flask import send_file
from coco.utils import get_logger
from .base import BaseVolume from .base import BaseVolume
logger = get_logger(__name__)
logger = logging.getLogger(__name__)
class SFTPVolume(BaseVolume): class SFTPVolume(BaseVolume):
...@@ -16,6 +15,7 @@ class SFTPVolume(BaseVolume): ...@@ -16,6 +15,7 @@ class SFTPVolume(BaseVolume):
self.root_name = 'Home' self.root_name = 'Home'
super().__init__() super().__init__()
self._stat_cache = {} self._stat_cache = {}
self.lock = threading.Lock()
def close(self): def close(self):
self.sftp.close() self.sftp.close()
...@@ -95,7 +95,7 @@ class SFTPVolume(BaseVolume): ...@@ -95,7 +95,7 @@ class SFTPVolume(BaseVolume):
""" Get the sub directory of directory """ Get the sub directory of directory
""" """
path = self._path(target) path = self._path(target)
# print("Tree {} {}".format(target, path)) print("Tree {} {}".format(target, path))
infos = self.list(target) infos = self.list(target)
tree = list(filter(lambda x: x['mime'] == 'directory', infos)) tree = list(filter(lambda x: x['mime'] == 'directory', infos))
return tree return tree
......
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
var sid = msg.sid; var sid = msg.sid;
init_elfinder(sid); init_elfinder(sid);
}); });
$().ready(function () {
$(window).trigger('resize');
});
function init_elfinder(sid) { function init_elfinder(sid) {
var elf; var elf;
var opts = { var opts = {
...@@ -31,7 +33,8 @@ ...@@ -31,7 +33,8 @@
] ]
}, },
customData: {'sid': sid}, customData: {'sid': sid},
height: $(window).height(), height: '100%',
width: '100%',
url: '{{ url_for("sftp_host_connector_view", host=host) }}', url: '{{ url_for("sftp_host_connector_view", host=host) }}',
resizable: false, resizable: false,
lang: 'pl', lang: 'pl',
...@@ -92,8 +95,6 @@ ...@@ -92,8 +95,6 @@
} else { } else {
start(lng); start(lng);
} }
}; };
load(); load();
var resizeTimer; var resizeTimer;
...@@ -101,15 +102,26 @@ ...@@ -101,15 +102,26 @@
resizeTimer && clearTimeout(resizeTimer); resizeTimer && clearTimeout(resizeTimer);
if (!$('#elfinder').hasClass('elfinder-fullscreen')) { if (!$('#elfinder').hasClass('elfinder-fullscreen')) {
resizeTimer = setTimeout(function () { resizeTimer = setTimeout(function () {
var h = parseInt($(window).height()); var h, w;
if (h != parseInt($('#elfinder').height())) { var isTrue = window == parent;
elf.resize('100%', h); console.log("Window == parent" + isTrue);
if (window != parent) {
h = parseInt(parent.$('.window.active').height());
w = parseInt(parent.$('.window.active').width());
} else {
h = parseInt($(window).height());
w = parseInt($(window).width());
}
var ori_h = parseInt($('#elfinder').height());
var ori_w = parseInt($('#elfinder').width());
console.log("Height: " + h + " Wid: " + w);
if (h !== ori_h || w != ori_w){
elf.resize(w, h);
} }
}, 200); }, 200);
} }
}); });
} }
</script> </script>
<div id="elfinder"></div> <div id="elfinder"></div>
</body> </body>
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
__volume_cached = {} __sftp_cached = {}
def get_cache_volume(sid): def get_cached_sftp(sid):
return __volume_cached.get(sid) return __sftp_cached.get(sid)
def set_cache_volume(sid, volume): def set_cache_sftp(sid, volume):
__volume_cached[sid] = volume __sftp_cached[sid] = volume
...@@ -3,40 +3,40 @@ ...@@ -3,40 +3,40 @@
from flask import render_template, request, jsonify from flask import render_template, request, jsonify
from coco.utils import get_logger
from .app import app from .app import app
from .elfinder import connector, volumes from .elfinder import connector, volumes
from ..models import Connection from ..models import Connection
from ..sftp import InternalSFTPClient from ..sftp import InternalSFTPClient
from .auth import login_required from .auth import login_required
from .utils import get_cache_volume, set_cache_volume from .utils import get_cached_sftp, set_cache_sftp
from ..service import app_service from ..service import app_service
logger = get_logger(__file__)
@app.route('/coco/elfinder/sftp/connector/<host>/', methods=['GET', 'POST']) @app.route('/coco/elfinder/sftp/connector/<host>/', methods=['GET', 'POST'])
@login_required @login_required
def sftp_host_connector_view(host): def sftp_host_connector_view(host):
sid = request.args.get("sid") or request.values.get('sid') sid = request.args.get("sid") or request.values.get('sid')
print("Get sid: {}".format(sid)) sftp = get_cached_sftp(sid) if sid else None
volume = None if not sftp:
if sid: logger.debug("New sftp, sid: {} host: {}".format(sid, host))
volume = get_cache_volume(sid)
if not volume:
print("New volume")
user = request.current_user user = request.current_user
connection = Connection(addr=(request.real_ip, 0)) connection = Connection(addr=(request.real_ip, 0))
connection.user = user connection.user = user
sftp = InternalSFTPClient(connection) sftp = InternalSFTPClient(connection)
volume = volumes.SFTPVolume(sftp) set_cache_sftp(sid, sftp)
set_cache_volume(sid, volume) volume = volumes.SFTPVolume(sftp)
if host != '_': if host != '_':
asset = app_service.get_asset(host) asset = app_service.get_asset(host)
if not asset: if not asset:
return jsonify({'error': 'Not found this host'}) return jsonify({'error': 'Not found this host'})
hostname = asset.hostname hostname = asset.hostname
if asset.org_id: if asset.org_id:
hostname = "{}.{}".format(asset.hostname, asset.org_name) hostname = "{}.{}".format(asset.hostname, asset.org_name)
volume.root_name = hostname volume.root_name = hostname
volume.base_path = '/' + hostname volume.base_path = '/' + hostname
handler = connector.ElFinderConnector([volume]) handler = connector.ElFinderConnector([volume])
handler.run(request) handler.run(request)
......
...@@ -11,7 +11,7 @@ from ..proxy import ProxyServer ...@@ -11,7 +11,7 @@ from ..proxy import ProxyServer
from ..utils import get_logger from ..utils import get_logger
from ..ctx import app_service from ..ctx import app_service
from .base import BaseNamespace from .base import BaseNamespace
from .utils import get_cache_volume from .utils import get_cached_sftp
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) BASE_DIR = os.path.dirname(os.path.dirname(__file__))
logger = get_logger(__file__) logger = get_logger(__file__)
...@@ -203,6 +203,6 @@ class ElfinderNamespace(BaseNamespace): ...@@ -203,6 +203,6 @@ class ElfinderNamespace(BaseNamespace):
def on_disconnect(self): def on_disconnect(self):
print("On disconnect") print("On disconnect")
volume = get_cache_volume(request.sid) volume = get_cached_sftp(request.sid)
if volume: if volume:
volume.close() volume.close()
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