Esempio n. 1
0
    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'}
Esempio n. 2
0
    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'}
Esempio n. 3
0
    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'}
Esempio n. 4
0
    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'}
Esempio n. 5
0
    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
Esempio n. 6
0
    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'}
Esempio n. 7
0
    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
Esempio n. 8
0
    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
Esempio n. 9
0
    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
Esempio n. 10
0
    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))
Esempio n. 11
0
    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
Esempio n. 12
0
    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'))}
Esempio n. 13
0
    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}
Esempio n. 14
0
    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}
Esempio n. 15
0
    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'))}
Esempio n. 16
0
    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'}
Esempio n. 17
0
    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
Esempio n. 18
0
    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'}
Esempio n. 19
0
    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))
Esempio n. 20
0
 def get_pk(self, name):
     pluginDB = Plugin.objects(name=name)
     if pluginDB:
         return pluginDB['pk']
Esempio n. 21
0
 def getEnabledPlugins(cls):
     # List enabled plugins
     return Plugin.objects(enabled=True, lang=configuration['lang_short'])