def test_execute(self): """ Test the execute method. """ #test invalid configuration connector = ElfinderConnector({}) self.assertEqual( ElfinderErrorMessages.ERROR_CONF in connector.execute('open')['error'], True) connector = ElfinderConnector( ls.ELFINDER_CONNECTOR_OPTION_SETS['default']) #test invalid command self.assertEqual( ElfinderErrorMessages.ERROR_UNKNOWN_CMD in connector.execute('dummy')['error'], True) #test missing arguments self.assertEqual( ElfinderErrorMessages.ERROR_INV_PARAMS in connector.execute('ls')['error'], True) #test it is actually doing something self.assertEqual( 'error' in connector.execute('open', mimes=['image'], init=True), False) #test debug keyword self.assertEqual('debug' in connector.execute('open', init=True), False) self.assertEqual( 'debug' in connector.execute('open', init=True, debug=True), True)
def post(self, request, *args, **kwargs): """ called in post method calls. It only allows for the 'upload' command """ if kwargs['optionset'] == 'sftp': optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][0]['storageKwArgs'] = { 'host': '127.0.0.1', 'params': { 'port': 22, 'username': '******', 'password': '******', 'timeout': 30 }, 'root_path': '/', 'interactive': False } self.elfinder = ElfinderConnector(optinon_sets, request.session) else: self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), request.session) cmd = self.get_command(request.POST) if not cmd in ['upload']: self.render_to_response({ 'error': self.elfinder.error( ElfinderErrorMessages.ERROR_UPLOAD, ElfinderErrorMessages.ERROR_UPLOAD_TOTAL_SIZE) }) return self.output(cmd, request.POST)
def post(self, request, *args, **kwargs): """ called in post method calls. It only allows for the 'upload' command """ if kwargs['optionset'] == 'sftp': optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][0]['storageKwArgs'] = { 'host': '127.0.0.1', 'params': settings.SFTP_CONF, 'root_path': settings.MEDIA_ROOT+'/playbook', 'interactive': False } self.elfinder = ElfinderConnector(optinon_sets, request.session) else: self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), request.session) cmd = self.get_command(request.POST) if cmd not in ['upload']: self.render_to_response( { 'error': self.elfinder.error( ElfinderErrorMessages.ERROR_UPLOAD, ElfinderErrorMessages.ERROR_UPLOAD_TOTAL_SIZE ) } ) return self.output(cmd, request.POST)
def get(self, request, *args, **kwargs): """ used in get method calls """ u_id = str(uuid.uuid4()) if kwargs['optionset'] == 'sftp': kwargs['u_id'] = u_id server_object = get_object_or_404(ServerInfor,hostname=kwargs['start_path']) optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][u_id][0]['alias'] = '{0}-{1}'.format(server_object.name,server_object.ip) key_label = "%s::%s" % (server_object.ip, server_object.credential.username) if server_object.credential.method == 'password': optinon_sets['roots'][u_id][0]['storageKwArgs'] = {'host':server_object.ip, 'params':{'port':server_object.credential.port, 'username':server_object.credential.username, 'password':server_object.credential.password, 'timeout':30}, 'root_path':'/','interactive':False, 'key_label': key_label} else: optinon_sets['roots'][u_id][0]['storageKwArgs'] = {'host':server_object.ip, 'params':{'port':server_object.credential.port, 'username':server_object.credential.username, 'key_filename':server_object.credential.key, 'timeout':30}, 'root_path':'/','interactive':False, 'key_label': key_label} self.elfinder = ElfinderConnector(optinon_sets, u_id, request.session) else: self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), u_id, request.session) return self.output(self.get_command(request.GET), request.GET)
def post(self, request, *args, **kwargs): """ called in post method calls. It only allows for the 'upload' command """ u_id = str(uuid.uuid4()) if kwargs['optionset'] == 'sftp': kwargs['u_id'] = u_id server_object = get_object_or_404(ServerInfor, hostname=kwargs['start_path']) optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][u_id][0]['alias'] = '{0}-{1}'.format( server_object.name, server_object.ip) key_label = "%s::%s" % (server_object.ip, server_object.credential.username) if server_object.credential.method == 'password': optinon_sets['roots'][u_id][0]['storageKwArgs'] = { 'host': server_object.ip, 'params': { 'port': server_object.credential.port, 'username': server_object.credential.username, 'password': server_object.credential.password, 'timeout': 30 }, 'root_path': '/', 'interactive': False, 'key_label': key_label } else: optinon_sets['roots'][u_id][0]['storageKwArgs'] = { 'host': server_object.ip, 'params': { 'port': server_object.credential.port, 'username': server_object.credential.username, 'key_filename': server_object.credential.key, 'timeout': 30 }, 'root_path': '/', 'interactive': False, 'key_label': key_label } self.elfinder = ElfinderConnector(optinon_sets, u_id, request.session) else: self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), u_id, request.session) cmd = self.get_command(request.POST) if not cmd in ['upload']: self.render_to_response({ 'error': self.elfinder.error( ElfinderErrorMessages.ERROR_UPLOAD, ElfinderErrorMessages.ERROR_UPLOAD_TOTAL_SIZE) }) return self.output(cmd, request.POST)
def test_init(self): """ Test the ElfinderConnector __init__ method """ #fault-tolerant initialization connector = ElfinderConnector({}) self.assertEqual(connector.loaded(), False) connector = ElfinderConnector({}) self.assertEqual(connector.loaded(), False) #initialize with 'default' optionset connector = ElfinderConnector( ls.ELFINDER_CONNECTOR_OPTION_SETS['default']) self.assertEqual(connector.loaded(), True)
def get(self, request, *args, **kwargs): """ used in get method calls """ self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), request.session) return self.output(self.get_command(request.GET), request.GET)
def get(self, request, *args, **kwargs): """ used in get method calls """ if kwargs['optionset'] == 'sftp': optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][0]['storageKwArgs'] = { 'host': '127.0.0.1', 'params': settings.SFTP_CONF, 'root_path': settings.MEDIA_ROOT+'/playbook', 'interactive': False } self.elfinder = ElfinderConnector(optinon_sets, request.session) else: self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), request.session) return self.output(self.get_command(request.GET), request.GET)
def test_open_startpath(self): """ Test startpath option """ self.opts['roots'][0]['startPath'] = 'files' connector = ElfinderConnector(self.opts) #************ init without tree *********** ret = connector.execute('open', target='dummy', init='1') #check files and cwd self.assertEqual(len(ret['files']), 2) self.assertNotEqual(ret['files'][0]['hash'], ret['files'][1]['hash']) self.assertEqual(ret['files'][0]['name'], '2bytes.txt') self.assertEqual(ret['files'][1]['name'], 'directory') self.assertEqual(ret['cwd']['dirs'], 1) self.assertEqual(ret['cwd']['name'], 'files') self.assertEqual(ret['cwd']['read'], 1) self.assertEqual(ret['cwd']['write'], 1) self.assertEqual(ret['cwd']['locked'], 0) self.assertEqual(ret['cwd']['hidden'], 0) self.assertEqual(ret['cwd']['size'], 'unknown') self.assertEqual(ret['cwd']['mime'], 'directory') self.assertNotIn('volumeid', ret['cwd']) self.assertIsInstance(ret['cwd']['ts'], float) self.assertGreater(len(ret['cwd']['phash']), 0) self.assertGreater(len(ret['cwd']['hash']), 0) #other response attributes self.assertNotIn('error', ret) self.assertIn('netDrivers', ret) self.assertEqual(ret['uplMaxSize'], 128 * 1048576) self.assertEqual(ret['api'], '2.1') self.assertEqual(ret['options']['pathUrl'], '%sfiles' % settings.MEDIA_URL) self.assertEqual(ret['options']['tmbUrl'], '%s.tmb/' % settings.MEDIA_URL) self.assertIn('create', ret['options']['archivers']) self.assertIn('extract', ret['options']['archivers']) self.assertEqual(ret['options']['disabled'], []) self.assertEqual(ret['options']['copyOverwrite'], 1) self.assertEqual(ret['options']['separator'], os.sep) self.assertEqual(ret['options']['path'], '%s%sfiles' % (connector._default._root_name, os.sep)) #********* init with tree *********** ret_tree = connector.execute('open', target='dummy', init='1', tree='1') self.check_root_tree(ret_tree, 5, connector._default._root_name) #cleanup startpath self.opts['startpath'] = ''
def get(self, request, *args, **kwargs): """ used in get method calls """ if kwargs['optionset'] == 'sftp': optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][0]['storageKwArgs'] = { 'host': '127.0.0.1', 'params': { 'port': 22, 'username': '******', 'password': '******', 'timeout': 30 }, 'root_path': '/', 'interactive': False } self.elfinder = ElfinderConnector(optinon_sets, request.session) else: self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), request.session) return self.output(self.get_command(request.GET), request.GET)
def test_open_path(self): connector = ElfinderConnector(self.opts) #************ init without tree *********** ret = connector.execute('open', target=connector._default.encode( connector._default._join_path( settings.MEDIA_ROOT, connector._default._join_path( 'files', 'directory'))), init='1') #check files and cwd self.assertEqual(len(ret['files']), 1) self.assertEqual(ret['files'][0]['name'], 'yawd-logo.png') self.assertNotIn('dirs', ret['cwd']) self.assertEqual(ret['cwd']['name'], 'directory') self.assertEqual(ret['cwd']['read'], 1) self.assertEqual(ret['cwd']['write'], 1) self.assertEqual(ret['cwd']['locked'], 0) self.assertEqual(ret['cwd']['hidden'], 0) self.assertEqual(ret['cwd']['size'], 'unknown') self.assertEqual(ret['cwd']['mime'], 'directory') self.assertNotIn('volumeid', ret['cwd']) self.assertIsInstance(ret['cwd']['ts'], float) self.assertGreater(len(ret['cwd']['phash']), 0) self.assertGreater(len(ret['cwd']['hash']), 0) #other response attributes self.assertNotIn('error', ret) self.assertIn('netDrivers', ret) self.assertEqual(ret['uplMaxSize'], 128 * 1048576) self.assertEqual(ret['api'], '2.1') self.assertEqual(ret['options']['pathUrl'], '%sfiles/directory' % settings.MEDIA_URL) self.assertEqual(ret['options']['tmbUrl'], '%s.tmb/' % settings.MEDIA_URL) self.assertIn('create', ret['options']['archivers']) self.assertIn('extract', ret['options']['archivers']) self.assertEqual(ret['options']['disabled'], []) self.assertEqual(ret['options']['copyOverwrite'], 1) self.assertEqual(ret['options']['separator'], os.sep) self.assertEqual( ret['options']['path'], '%s%sfiles%sdirectory' % (connector._default._root_name, os.sep, os.sep))
def post(self, request, *args, **kwargs): """ called in post method calls. It only allows for the 'upload' command """ self.elfinder = ElfinderConnector(self.get_optionset(**kwargs), request.session) cmd = self.get_command(request.POST) if not cmd in ['upload']: self.render_to_response({ 'error': self.elfinder.error( ElfinderErrorMessages.ERROR_UPLOAD, ElfinderErrorMessages.ERROR_UPLOAD_TOTAL_SIZE) }) return self.output(cmd, request.POST)
def test_open_specs(self): """ Test the command compiles to the API specification """ connector = ElfinderConnector(self.opts) #command accepts the specification arguments argslist = connector.commandArgsList('open') self.assertIn('target', argslist) self.assertIn('init', argslist) self.assertIn('tree', argslist) self.assertIn('mimes', argslist) #test invalid keyword arguments self.assertEqual( ElfinderErrorMessages.ERROR_INV_PARAMS in connector.execute('open')['error'], True) #test invalid target self.assertEqual( ElfinderErrorMessages.ERROR_OPEN in connector.execute('open', target='dummy')['error'], True)
def post(self, request, *args, **kwargs): """ called in post method calls. It only allows for the 'upload' command """ u_id = str(uuid.uuid4()) kwargs['u_id'] = u_id if kwargs['optionset'] == 'sftp': server_object = get_object_or_404(ServerInfor, id=kwargs['start_path']) optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][u_id][0]['alias'] = '{0}-{1}'.format( server_object.name, server_object.ip) key_label = "%s::%s" % (server_object.ip, server_object.credential.username) if server_object.credential.method == 'password': optinon_sets['roots'][u_id][0]['storageKwArgs'] = { 'host': server_object.ip, 'params': { 'port': server_object.credential.port, 'username': server_object.credential.username, 'password': server_object.credential.password, 'timeout': 30 }, 'root_path': '/', 'interactive': False, 'key_label': key_label } else: private_key = StringIO.StringIO(server_object.credential.key) key = server_object.credential.key if 'RSA' in key: private_key = paramiko.RSAKey.from_private_key(private_key) elif 'DSA' in key: private_key = paramiko.DSSKey.from_private_key(private_key) elif 'EC' in key: private_key = paramiko.ECDSAKey.from_private_key( private_key) elif 'OPENSSH' in key: private_key = paramiko.Ed25519Key.from_private_key( private_key) optinon_sets['roots'][u_id][0]['storageKwArgs'] = { 'host': server_object.ip, 'params': { 'port': server_object.credential.port, 'username': server_object.credential.username, 'pkey': private_key, 'timeout': 30 }, 'root_path': '/', 'interactive': False, 'key_label': key_label } self.elfinder = ElfinderConnector(optinon_sets, u_id, request.session) else: optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][u_id][0]['alias'] = '{0}_tmp_dir'.format( request.user.username) optinon_sets['roots'][u_id][0]['path'] = os.path.join( settings.MEDIA_ROOT, request.user.username, 'Download') optinon_sets['roots'][u_id][0]['URL'] = '{0}{1}/{2}/'.format( settings.MEDIA_URL, request.user.username, 'Download') self.elfinder = ElfinderConnector(optinon_sets, u_id, request.session) cmd = self.get_command(request.POST) if not cmd in ['upload']: self.render_to_response({ 'error': self.elfinder.error( ElfinderErrorMessages.ERROR_UPLOAD, ElfinderErrorMessages.ERROR_UPLOAD_TOTAL_SIZE) }) return self.output(cmd, request.POST)
def set_elfinder(self, hostid, optinon_sets): if hostid not in self.elfinder_sftps: self.elfinder_sftps[hostid] = ElfinderConnector(optinon_sets) cache.set('elfinder_%s' % hostid, 1, timeout=self.sftp_timeout) return self.elfinder_sftps[hostid]
def get(self, request, *args, **kwargs): """ used in get method calls """ u_id = str(uuid.uuid4()) kwargs['u_id'] = u_id if kwargs['optionset'] == 'sftp': server_object = get_object_or_404(ServerInfor, id=kwargs['start_path']) optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][u_id][0]['alias'] = '{0}-{1}'.format( server_object.name, server_object.ip) key_label = "%s::%s" % (server_object.ip, server_object.credential.username) if server_object.credential.method == 'password': optinon_sets['roots'][u_id][0]['storageKwArgs'] = { 'host': server_object.ip, 'params': { 'port': server_object.credential.port, 'username': server_object.credential.username, 'password': server_object.credential.password, 'timeout': 30 }, 'root_path': '/', 'interactive': False, 'key_label': key_label } else: private_key = StringIO(server_object.credential.key) key = server_object.credential.key if 'RSA' in key: private_key = paramiko.RSAKey.from_private_key(private_key) elif 'DSA' in key: private_key = paramiko.DSSKey.from_private_key(private_key) elif 'EC' in key: private_key = paramiko.ECDSAKey.from_private_key( private_key) elif 'OPENSSH' in key: private_key = paramiko.Ed25519Key.from_private_key( private_key) optinon_sets['roots'][u_id][0]['storageKwArgs'] = { 'host': server_object.ip, 'params': { 'port': server_object.credential.port, 'username': server_object.credential.username, 'pkey': private_key, 'timeout': 30 }, 'root_path': '/', 'interactive': False, 'key_label': key_label } self.elfinder = ElfinderConnector(optinon_sets, u_id, request.session) else: optinon_sets = self.get_optionset(**kwargs) optinon_sets['roots'][u_id][0]['alias'] = '{0}_tmp_dir'.format( request.user.username) optinon_sets['roots'][u_id][0]['path'] = os.path.join( settings.MEDIA_ROOT, request.user.username, 'Download') optinon_sets['roots'][u_id][0]['URL'] = '{0}{1}/{2}/'.format( settings.MEDIA_URL, request.user.username, 'Download') mkdir_p(os.path.join(settings.MEDIA_ROOT, request.user.username)) self.elfinder = ElfinderConnector(optinon_sets, u_id, request.session) return self.output(self.get_command(request.GET), request.GET)
def test_open_default(self): """ Test the default optionset """ connector = ElfinderConnector(self.opts) #************ init without tree *********** ret = connector.execute('open', target='dummy', init='1') #check files and cwd self.assertEqual(len(ret['files']), 2) self.assertNotEqual(ret['files'][0]['hash'], ret['files'][1]['hash']) self.assertEqual(ret['files'][0]['name'], 'files') self.assertEqual(ret['files'][1]['name'], 'test') self.assertEqual(ret['cwd']['dirs'], 1) self.assertEqual(ret['cwd']['name'], connector._default._root_name) self.assertEqual(ret['cwd']['read'], 1) self.assertEqual(ret['cwd']['write'], 1) self.assertEqual(ret['cwd']['locked'], 1) self.assertEqual(ret['cwd']['hidden'], 0) self.assertEqual(ret['cwd']['size'], 'unknown') self.assertEqual(ret['cwd']['mime'], 'directory') self.assertEqual(ret['cwd']['volumeid'], 'llff_') self.assertIsInstance(ret['cwd']['ts'], float) self.assertNotIn('phash', ret['cwd']) self.assertGreater(len(ret['cwd']['hash']), 0) #other response attributes self.assertNotIn('error', ret) self.assertIn('netDrivers', ret) self.assertEqual(ret['uplMaxSize'], 128 * 1048576) self.assertEqual(ret['api'], '2.1') self.assertEqual(ret['options']['pathUrl'], settings.MEDIA_URL) self.assertEqual(ret['options']['tmbUrl'], '%s.tmb/' % settings.MEDIA_URL) self.assertIn('create', ret['options']['archivers']) self.assertIn('extract', ret['options']['archivers']) self.assertEqual(ret['options']['disabled'], []) self.assertEqual(ret['options']['copyOverwrite'], 1) self.assertEqual(ret['options']['separator'], os.sep) self.assertEqual(ret['options']['path'], connector._default._root_name) #********* init with tree *********** ret_tree = connector.execute('open', target='dummy', init='1', tree='1') self.check_root_tree(ret_tree, 3, connector._default._root_name) ret['files'][:0] = [ret['cwd']] self.assertEqual(ret, ret_tree) #******** init with tree and debug ******* ret_tree_debug = connector.execute('open', target='dummy', init='1', tree='1', debug='1') self.assertEqual(ret_tree_debug['debug']['connector'], 'yawd-elfinder') self.assertEqual(ret_tree_debug['debug']['mountErrors'], []) self.assertEqual(ret_tree_debug['debug']['upload'], '') self.assertEqual(ret_tree_debug['debug']['volumes'], [{ 'id': 'llff_', 'name': 'localfilesystem' }]) self.assertIsInstance(ret_tree_debug['debug']['time'], float) del ret_tree_debug['debug'] self.assertEqual(ret_tree, ret_tree_debug)