def installPlugin(cls, plugin_name=None, test_mode=False, dev_mode=False): # If already installed if Plugin.objects(name=plugin_name): return {'status': 'fail', 'log': 'Plugin already installed'} # If not dev mode, download package if not dev_mode: if test_mode: pip.main([ 'install', '--quiet', '--install-option=--install-platlib=' + os.getcwd() + '/../', '--install-option=--install-purelib=' + os.getcwd() + '/../', 'lisa-plugin-' + plugin_name ]) else: pip.main(['install', 'lisa-plugin-' + plugin_name]) # Create new plugin plugin = Plugin() setattr(plugin, 'name', plugin_name) # Update plugin in DB cls._updatePlugin(plugin=plugin) return {'status': 'success', 'log': 'Plugin installed'}
def uninstallPlugin(cls, plugin_name = None, plugin_pk = None, dev_mode = False): # Get plugin by name or pk if plugin_pk: plugin_list = Plugin.objects(pk = plugin_pk) else: plugin_list = Plugin.objects(name = plugin_name) # Should be only one result if not plugin_list or len(plugin_list) != 1: return {'status': 'fail', 'log': 'Plugin not installed'} plugin = plugin_list[0] # Uninstall pip package if not dev_mode: pip.main(['uninstall', '--quiet', 'lisa-plugin-' + plugin_name]) # Remove plugin crons for cron in Cron.objects(plugin = plugin): cron.delete() # Remove plugin intents for oIntent in Intent.objects(plugin = plugin): oIntent.delete() # Remove plugin plugin.delete() return {'status': 'success', 'log': 'Plugin uninstalled'}
def uninstallPlugin(cls, plugin_name=None, plugin_pk=None, dev_mode=False): # Get plugin by name or pk if plugin_pk: plugin_list = Plugin.objects(pk=plugin_pk) else: plugin_list = Plugin.objects(name=plugin_name) # Should be only one result if not plugin_list or len(plugin_list) != 1: return {'status': 'fail', 'log': 'Plugin not installed'} plugin = plugin_list[0] # Uninstall pip package if not dev_mode: pip.main(['uninstall', '--quiet', 'lisa-plugin-' + plugin_name]) # Remove plugin crons for cron in Cron.objects(plugin=plugin): cron.delete() # Remove plugin intents for oIntent in Intent.objects(plugin=plugin): oIntent.delete() # Remove plugin plugin.delete() return {'status': 'success', 'log': 'Plugin uninstalled'}
def updatePlugin(cls, plugin_name=None, plugin_pk=None): # Get plugin by name or pk if plugin_pk: plugin_list = Plugin.objects(pk=plugin_pk) else: plugin_list = Plugin.objects(name=plugin_name) # Should be only one result if not plugin_list or len(plugin_list) != 1: return {'status': 'fail', 'log': 'Plugin not installed'} plugin = plugin_list[0] # Update plugin cls._updatePlugin(plugin=plugin) return {'status': 'success', 'log': 'Plugin updated'}
def getPluginMethods(cls, plugin_name = None): # Get plugin by name or pk if plugin_name: plugin_list = Plugin.objects(name = plugin_name) else: plugin_list = Plugin.objects # Parse plugins listallmethods = [] for plugin in plugin_list: plugininstance = namedAny('.'.join(('lisa.plugins', str(plugin.name), 'modules', str(plugin.name).lower(), str(plugin.name))))() listpluginmethods = [] for m in inspect.getmembers(plugininstance, predicate = inspect.ismethod): if not "__init__" in m and not m.startswith("_"): listpluginmethods.append(m[0]) listallmethods.append({'plugin': plugin.name, 'methods': listpluginmethods}) # Parse core plugins for f in os.listdir(os.path.normpath(server_path + '/core')): fileName, fileExtension = os.path.splitext(f) if os.path.isfile(os.path.join(os.path.normpath(server_path + '/core'), f)) and not f.startswith('__init__') and fileExtension != '.pyc': coreinstance = namedAny('.'.join(('lisa.server.core', str(fileName).lower(), str(fileName).capitalize())))() listcoremethods = [] for m in inspect.getmembers(coreinstance, predicate = inspect.ismethod): #init shouldn't be listed in methods and _ is for translation if not "__init__" in m and not m.startswith("_"): listcoremethods.append(m[0]) listallmethods.append({'core': fileName, 'methods': listcoremethods}) log.msg(listallmethods) return listallmethods
def updatePlugin(cls, plugin_name = None, plugin_pk = None): # Get plugin by name or pk if plugin_pk: plugin_list = Plugin.objects(pk = plugin_pk) else: plugin_list = Plugin.objects(name = plugin_name) # Should be only one result if not plugin_list or len(plugin_list) != 1: return {'status': 'fail', 'log': 'Plugin not installed'} plugin = plugin_list[0] # Update plugin cls._updatePlugin(plugin = plugin) return {'status': 'success', 'log': 'Plugin updated'}
def getPlugin(cls, plugin_name = None, plugin_uid = None): # Return fake core plugin if (plugin_uid is not None and plugin_uid == 0) or (plugin_name is not None and plugin_name == "Core"): class FakePlugin(): def __init__(self): self.name = "Core" self.pk = 0 self.uid = 0 self.steps = {'count': 0, 'first': None, 'last': None} return FakePlugin() # List enabled plugins plugin_list = Plugin.objects(enabled = True, lang = configuration['lang_short']) # Search plugin for plugin in plugin_list: # Search plugin by name if plugin_name is not None and plugin.name == plugin_name: return plugin # Search plugin by uid if plugin_uid is not None and plugin.pk == plugin_uid: return plugin # Not found return None
def getPlugin(cls, plugin_name=None, plugin_uid=None): # Return fake core plugin if (plugin_uid is not None and plugin_uid == 0) or (plugin_name is not None and plugin_name == "Core"): class FakePlugin(): def __init__(self): self.name = "Core" self.pk = 0 self.uid = 0 self.steps = {'count': 0, 'first': None, 'last': None} return FakePlugin() # List enabled plugins plugin_list = Plugin.objects(enabled=True, lang=configuration['lang_short']) # Search plugin for plugin in plugin_list: # Search plugin by name if plugin_name is not None and plugin.name == plugin_name: return plugin # Search plugin by uid if plugin_uid is not None and plugin.pk == plugin_uid: return plugin # Not found return None
def getEnabledPluginNames(cls): # List enabled plugins plugin_list = Plugin.objects(enabled = True, lang = configuration['lang_short']) # Fill plugins name list enabled_plugins_names = [] for plugin in plugin_list: enabled_plugins_names.append(str(plugin['name'])) return enabled_plugins_names
def plugin_list(self): metareq = requests.get('/'.join( [configuration['plugin_store'], 'plugins.json'])) pluginDB = Plugin.objects() pluginlist_store = [] pluginlist_local = [] in_store = False if (metareq.ok): [ pluginlist_store.append(item['name']) for item in json.loads(metareq.text or metareq.content) ] [pluginlist_local.append(plugin['name']) for plugin in pluginDB] if pluginDB: for plugin in pluginDB: for plugin_name in pluginlist_store: if plugin['name'].lower() == plugin_name.lower(): self.plugins.append({ "name": plugin['name'], "installed": True, "enabled": plugin['enabled'] }) in_store = True if not in_store: self.plugins.append({ "name": plugin['name'], "installed": True, "enabled": plugin['enabled'] }) else: in_store = False for plugin_store in pluginlist_store: if not plugin_store in pluginlist_local: self.plugins.append({ "name": plugin_store, "installed": False, "enabled": False }) else: self.stdout.write(self.FAIL + "The plugin list seems to no be available" + self.ENDC) for pluginDict in self.plugins: if pluginDict['installed']: installed = "[" + self.OKGREEN + "Installed" + self.ENDC + "]" else: installed = "[" + self.FAIL + "Not installed" + self.ENDC + "]" if pluginDict['enabled']: enabled = "[" + self.OKGREEN + "Enabled" + self.ENDC + "]" else: enabled = "[" + self.FAIL + "Not enabled" + self.ENDC + "]" self.stdout.write("%s => %s %s" % (pluginDict['name'], installed, enabled))
def getEnabledPluginNames(cls): # List enabled plugins plugin_list = Plugin.objects(enabled=True, lang=configuration['lang_short']) # Fill plugins name list enabled_plugins_names = [] for plugin in plugin_list: enabled_plugins_names.append(str(plugin['name'])) return enabled_plugins_names
def uninstallPlugin(self, plugin_name=None, plugin_pk=None, dev_mode=False): if plugin_pk: plugin_list = Plugin.objects(pk=plugin_pk) else: plugin_list = Plugin.objects(name=plugin_name) if not plugin_list: return {'status': 'fail', 'log': unicode(_('Plugin not installed'))} else: for plugin in plugin_list: if not dev_mode: pip.main(['uninstall', '--quiet', 'lisa-plugin-' + plugin_name]) plugin.delete() for cron in Cron.objects(plugin=plugin): cron.delete() for rule in Rule.objects(plugin=plugin): rule.delete() intent_list = Intent.objects(plugin=plugin) for oIntent in intent_list: oIntent.delete() return {'status': 'success', 'log': unicode(_('Plugin uninstalled'))}
def _set_plugin_enabled(cls, enabled, plugin_name=None, plugin_pk=None): # Log string if enabled == True: astr = "enabled" else: astr = "disabled" # Get plugin by name or pk if plugin_pk: plugin_list = Plugin.objects(pk=plugin_pk) else: plugin_list = Plugin.objects(name=plugin_name) # Should be only one result if not plugin_list or len(plugin_list) != 1: return {'status': 'fail', 'log': 'Plugin not installed'} plugin = plugin_list[0] # If already done if enabled == True and plugin.enabled == enabled: return {'status': 'fail', 'log': 'Plugin already ' + astr} if enabled == False and plugin.enabled == enabled: return {'status': 'fail', 'log': 'Plugin already ' + astr} # Enable plugin plugin.enabled = enabled plugin.save() # Enable plugin crons for cron in Cron.objects(plugin=plugin): cron.enabled = enabled cron.save() # Enable plugin intents for intent in Intent.objects(plugin=plugin): intent.enabled = enabled intent.save() return {'status': 'success', 'log': 'Plugin ' + astr}
def _set_plugin_enabled(cls, enabled, plugin_name = None, plugin_pk = None): # Log string if enabled == True: astr = "enabled" else: astr = "disabled" # Get plugin by name or pk if plugin_pk: plugin_list = Plugin.objects(pk = plugin_pk) else: plugin_list = Plugin.objects(name = plugin_name) # Should be only one result if not plugin_list or len(plugin_list) != 1: return {'status': 'fail', 'log': 'Plugin not installed'} plugin = plugin_list[0] # If already done if enabled == True and plugin.enabled == enabled: return {'status': 'fail', 'log': 'Plugin already ' + astr} if enabled == False and plugin.enabled == enabled: return {'status': 'fail', 'log': 'Plugin already ' + astr} # Enable plugin plugin.enabled = enabled plugin.save() # Enable plugin crons for cron in Cron.objects(plugin = plugin): cron.enabled = enabled cron.save() # Enable plugin intents for intent in Intent.objects(plugin = plugin): intent.enabled = enabled intent.save() return {'status': 'success', 'log': 'Plugin ' + astr}
def enablePlugin(self, plugin_name=None, plugin_pk=None): if plugin_pk: plugin_list = Plugin.objects(pk=plugin_pk) else: plugin_list = Plugin.objects(name=plugin_name) for plugin in plugin_list: if plugin.enabled: return {'status': 'fail', 'log': unicode(_('Plugin already enabled'))} else: plugin.enabled = True plugin.save() for cron in Cron.objects(plugin=plugin): cron.enabled = True cron.save() for rule in Rule.objects(plugin=plugin): rule.enabled = True rule.save() intent_list = Intent.objects(plugin=plugin) for oIntent in intent_list: oIntent.enabled = True oIntent.save() return {'status': 'success', 'log': unicode(_('Plugin enabled'))}
def disablePlugin(self, plugin_name=None, plugin_pk=None): if plugin_pk: plugin_list = Plugin.objects(pk=plugin_pk) else: plugin_list = Plugin.objects(name=plugin_name) for plugin in plugin_list: if not plugin.enabled: return {'status': 'fail', 'log': 'Plugin already disabled'} else: plugin.enabled = False plugin.save() for cron in Cron.objects(plugin=plugin): cron.enabled = False cron.save() for rule in Rule.objects(plugin=plugin): rule.enabled = False rule.save() intent_list = Intent.objects(plugin=plugin) for oIntent in intent_list: oIntent.enabled = False oIntent.save() return {'status': 'success', 'log': 'Plugin disabled'}
def getPluginMethods(cls, plugin_name=None): # Get plugin by name or pk if plugin_name: plugin_list = Plugin.objects(name=plugin_name) else: plugin_list = Plugin.objects # Parse plugins listallmethods = [] for plugin in plugin_list: plugininstance = namedAny('.'.join( ('lisa.plugins', str(plugin.name), 'modules', str(plugin.name).lower(), str(plugin.name))))() listpluginmethods = [] for m in inspect.getmembers(plugininstance, predicate=inspect.ismethod): if not "__init__" in m and not m.startswith("_"): listpluginmethods.append(m[0]) listallmethods.append({ 'plugin': plugin.name, 'methods': listpluginmethods }) # Parse core plugins for f in os.listdir(os.path.normpath(server_path + '/core')): fileName, fileExtension = os.path.splitext(f) if os.path.isfile( os.path.join(os.path.normpath(server_path + '/core'), f) ) and not f.startswith('__init__') and fileExtension != '.pyc': coreinstance = namedAny('.'.join( ('lisa.server.core', str(fileName).lower(), str(fileName).capitalize())))() listcoremethods = [] for m in inspect.getmembers(coreinstance, predicate=inspect.ismethod): #init shouldn't be listed in methods and _ is for translation if not "__init__" in m and not m.startswith("_"): listcoremethods.append(m[0]) listallmethods.append({ 'core': fileName, 'methods': listcoremethods }) log.msg(listallmethods) return listallmethods
def installPlugin(cls, plugin_name = None, test_mode = False, dev_mode = False): # If already installed if Plugin.objects(name = plugin_name): return {'status': 'fail', 'log': 'Plugin already installed'} # If not dev mode, download package if not dev_mode: if test_mode: pip.main(['install', '--quiet', '--install-option=--install-platlib=' + os.getcwd() + '/../', '--install-option=--install-purelib=' + os.getcwd() + '/../', 'lisa-plugin-' + plugin_name]) else: pip.main(['install', 'lisa-plugin-' + plugin_name]) # Create new plugin plugin = Plugin() setattr(plugin, 'name', plugin_name) # Update plugin in DB cls._updatePlugin(plugin = plugin) return {'status': 'success', 'log': 'Plugin installed'}
def plugin_list(self): metareq = requests.get('/'.join([configuration['plugin_store'], 'plugins.json'])) pluginDB = Plugin.objects() pluginlist_store = [] pluginlist_local = [] in_store = False if(metareq.ok): [pluginlist_store.append(item['name']) for item in json.loads(metareq.text or metareq.content)] [pluginlist_local.append(plugin['name']) for plugin in pluginDB] if pluginDB: for plugin in pluginDB: for plugin_name in pluginlist_store: if plugin['name'].lower() == plugin_name.lower(): self.plugins.append({"name": plugin['name'], "installed": True, "enabled": plugin['enabled']}) in_store = True if not in_store: self.plugins.append({"name": plugin['name'], "installed": True, "enabled": plugin['enabled']}) else: in_store = False for plugin_store in pluginlist_store: if not plugin_store in pluginlist_local: self.plugins.append({"name": plugin_store, "installed": False, "enabled": False}) else: self.stdout.write(self.FAIL + "The plugin list seems to no be available" + self.ENDC) for pluginDict in self.plugins: if pluginDict['installed']: installed = "["+ self.OKGREEN + "Installed" + self.ENDC + "]" else: installed = "["+ self.FAIL + "Not installed" + self.ENDC + "]" if pluginDict['enabled']: enabled = "["+ self.OKGREEN + "Enabled" + self.ENDC + "]" else: enabled = "["+ self.FAIL + "Not enabled" + self.ENDC + "]" self.stdout.write("%s => %s %s" % (pluginDict['name'], installed, enabled))
def get_pk(self, name): pluginDB = Plugin.objects(name=name) if pluginDB: return pluginDB['pk']
def getEnabledPlugins(cls): # List enabled plugins return Plugin.objects(enabled=True, lang=configuration['lang_short'])