Exemplo n.º 1
0
    def post(self):
        author = users.get_current_user()
        title = self.request.POST['title']
        code = self.request.POST['code']

        plugin = Plugin(author=author, title=title, code=code)
        plugin.put()

        self.redirect('/admin/')
Exemplo n.º 2
0
def upload(request):
	if request.method == 'POST':
		form = PluginForm(request.POST, request.FILES)
		if not request.FILES['data_file'].content_type == 'application/gzip':
			return render(request, 'upload.html', {'form': form, 'function': 'plugin', 'message': 'File not of acceptable type', 'type': 'alert-danger'})
		else:
			get_reqno()
			arch = request.FILES['data_file']
			arch = cStringIO.StringIO(arch.read())
			t = tarfile.open(fileobj=arch)

			data = None
			for x in t.getmembers():
				if 'plugin.json' in x.name:
					pid = x.name.split('/')[0]
					data = json.loads(t.extractfile(x).read())
			if not data:
				return render(request, 'upload.html', {'form': form, 'function': 'plugin', 'message': 'Malformed archive. Please resubmit in accordance with Genesis Plugin API guidelines.', 'type': 'alert-error'})

			# If upgrading, check permission and backup old one if necessary
			if Plugin.objects.filter(PLUGIN_ID=pid, BACKUP=False).exists():
				backup(Plugin.objects.get(PLUGIN_ID=pid, BACKUP=False))

			# Update the database with the new plugin data
			f = Plugin(
				name=data['name'],
				data_file=request.FILES['data_file'],
				TYPE=data['type'],
				DESCRIPTION=data['description']['short'],
				LONG_DESCRIPTION=data['description']['long'] if data['description'].has_key('long') else '',
				AUTHOR=data['author'],
				HOMEPAGE=data['homepage'],
				APP_AUTHOR=data['app_author'] if data.has_key('app_author') else '',
				APP_HOMEPAGE=data['app_homepage'] if data.has_key('app_homepage') else '',
				MODULES=json.dumps(data['modules']),
				PLATFORMS=json.dumps(data['platforms']),
				CATEGORIES=json.dumps(data['categories']),
				VERSION=data['version'],
				DEPS=json.dumps(data['dependencies']),
				PLUGIN_ID=pid,
				ICON=data['icon'],
				LOGO=base64.b64encode(t.extractfile(os.path.join(pid, 'files/logo.png')).read()) if data.has_key('logo') and data['logo'] else '',
				BACKUP=False
				)
			f.save()
			if data.has_key('screenshots') and data['screenshots']:
				for x in data['screenshots']:
					b = base64.b64encode(t.extractfile(os.path.join(pid, 'files', x)).read())
					s = Screenshot(plugin=f, image=b)
					s.save()

			# Display success message
			return render(request, 'upload.html', {'form': form, 'function': 'plugin', 'message': 'Upload successful!', 'type': 'alert-success'})
	else:
		form = PluginForm()
	return render(request, 'upload.html', {'form': form, 'function': 'plugin'})
Exemplo n.º 3
0
def uninstall(plugin_name=None, plugin_pk=None):
    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': 'Plugin not installed'}
    else:
        for plugin in plugin_list:
            rmtree(LISA_PATH + '/plugins/' + plugin['name'])
            plugin.delete()
            for cron in Cron.objects(plugin=plugin):
                cron.delete()
            for rule in Rule.objects(plugin=plugin):
                rule.delete()
        return {'status': 'success', 'log': 'Plugin uninstalled'}
Exemplo n.º 4
0
    def get(self):
        plugins = Plugin.query() 
        context = {
            'plugins': plugins
        }

        template = jinja.get_template('index.html')
        self.response.out.write(template.render(context))
Exemplo n.º 5
0
def disable(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()
            return {'status': 'success', 'log': 'Plugin disabled'}
Exemplo n.º 6
0
def install(plugin_url=None, plugin_sha=None, plugin_name=None):
    if plugin_url and plugin_sha:
        repo = git.Repo.clone_from(plugin_url, LISA_PATH + '/plugins/' + plugin_name)
        repo.git.checkout(plugin_sha)
    metadata = json.load(open(LISA_PATH + '/plugins/' + plugin_name + '/' + str(plugin_name).lower() + '.json'))

    if Plugin.objects(name=plugin_name):
        return {'status': 'fail', 'log': 'Plugin already installed'}
    else:
        plugin = Plugin()
        description_list = []
        for item in metadata:
            if item != 'cron' or item != 'rules':
                if item == 'description':
                    for description in metadata[item]:
                        oDescription = Description()
                        for k,v in description.iteritems():
                            setattr(oDescription, k, v)
                        description_list.append(oDescription)
                    setattr(plugin, item, description_list)
                elif item == 'enabled':
                    if metadata[item] == 0:
                        setattr(plugin, item, False)
                    else:
                        setattr(plugin, item, True)
                else:
                    setattr(plugin, item, metadata[item])
        plugin.save()
        for item in metadata:
            if item == 'rules':
                for rule_item in metadata['rules']:
                    rule = Rule()
                    for parameter in rule_item:
                        setattr(rule, parameter, rule_item[parameter])
                    rule.plugin = plugin
                    rule.save()
            if item == 'crons':
                for cron_item in metadata['crons']:
                    cron = Cron()
                    for parameter in cron_item:
                        setattr(cron, parameter, cron_item[parameter])
                    cron.plugin = plugin
                    cron.save()
        return {'status': 'success', 'log': 'Plugin installed'}
Exemplo n.º 7
0
    def install(self, request, **kwargs):
        self.method_check(request, allowed=['post','get'])
        self.is_authenticated(request)
        self.throttle_check(request)

        from tastypie.http import HttpCreated, HttpNotModified

        try:
            plugin_url = request.POST.get("url")
            plugin_sha = request.POST.get("sha")
            plugin_name = kwargs['plugin_name']
            repo = git.Repo.clone_from(plugin_url, LISA_PATH + '/Plugins/' + plugin_name)
            repo.git.checkout(plugin_sha)
            metadata = json.load(open(LISA_PATH + '/Plugins/' + plugin_name + '/' + str(plugin_name).lower() + '.json'))
            plugin = Plugin()
            for item in metadata:
                if item != 'cron' or item != 'rules':
                    setattr(plugin, item, metadata[item])
            plugin.save(validate=False)
            for item in metadata:
                if item == 'rules':
                    for rule_item in metadata['rules']:
                        rule = Rule()
                        for parameter in rule_item:
                            setattr(rule, parameter, rule_item[parameter])
                        rule.plugin = plugin
                        rule.save(validate=False)
                if item == 'crons':
                    for cron_item in metadata['crons']:
                        cron = Cron()
                        for parameter in cron_item:
                            setattr(cron, parameter, cron_item[parameter])
                        cron.plugin = plugin
                        cron.save(validate=False)
        except:
            pass
        #except FailedException as failure:
        #    return self.create_response(request, { 'status' : 'failure', 'reason' : failure }, HttpNotModified
        self.log_throttled_access(request)
        LisaInstance.SchedReload()
        LisaInstance.LisaReload()
        return self.create_response(request, { 'status': 'success', 'log': "Plugin Installed"}, HttpCreated)
Exemplo n.º 8
0
def add_plugin():
    plugin_json = request.get_json()

    plugin = Plugin(plugin_json['video_url'], plugin_json['image_urls'],
                    plugin_json['price'], plugin_json['name'],
                    plugin_json['path'], plugin_json['description'])

    db.session.add(plugin)
    db.session.commit()

    return Response(status=201)
Exemplo n.º 9
0
def store_in_bbdd(info, debug=False):
    """
    Store in BBDD information.

    :param info: information to store in BBDD
    :type info: dict({ 'PLUGIN_FAMILY' : list([PLUGIN_ID, PLUGIN_FILE_NAME])})

    :return: True if all done Oks. False otherwise.
    :rtype: bool
    """


    from models import Families, Plugin

    try:

        for k, v in info.iteritems():
            f = Families()
            f.family_name = k
            f.save()

            for plugin in v:
                l_plugin_id = plugin[0]
                l_path      = os.path.split(plugin[1])[1]

                p = Plugin()
                p.plugin_id        = l_plugin_id
                p.plugin_file_name = l_path
                p.family           = f
                p.save()

    except Exception,e:
        if debug:
            print "Error generation BBDD: %s" % str(e)
        return False
Exemplo n.º 10
0
def method_list(plugin_name=None):
    if plugin_name:
        plugin_list = Plugin.objects(name=plugin_name)
    else:
        plugin_list = Plugin.objects.all()
    listmethodplugins = []
    for plugin in plugin_list:
        plugininstance = namedAny('.'.join((str(plugin.name), 'modules', str(plugin.name).lower(),
                                            str(plugin.name))))()
        listmethods = []
        for m in inspect.getmembers(plugininstance, predicate=inspect.ismethod):
            if not "__init__" in m:
                listmethods.append(m[0])
        listmethodplugins.append({ 'plugin': plugin.name, 'methods': listmethods})
    return listmethodplugins
Exemplo n.º 11
0
def list(request):
    plugins = []
    metareq = requests.get('https://raw.github.com/Seraf/LISA-Plugins/master/plugin_list.json')
    if(metareq.ok):
        for item in json.loads(metareq.text or metareq.content):
            for plugin in Plugin.objects(name=item['name']):
                item['id'] = plugin.id
                item['enabled'] = plugin.enabled
                if plugin.version < item['version']:
                    item['upgrade'] = True
            #if os.path.exists(LISA_PATH + '/Plugins/' + item['name']):
            #    item['installed'] = True
            plugins.append(item)
    return render_to_response('list.html', {'Plugins': plugins},
                              context_instance=RequestContext(request))
Exemplo n.º 12
0
Arquivo: views.py Projeto: Acruxx/LISA
def list(request):
    plugins = []
    metareq = requests.get('http://plugins.lisa-project.net/plugins.json')
    if(metareq.ok):
        for item in json.loads(metareq.text or metareq.content):
            for plugin in Plugin.objects(name=item['name']):
                item['id'] = plugin.id
                item['enabled'] = plugin.enabled
                if plugin.version < item['version']:
                    item['upgrade'] = True
            #if os.path.exists(LISA_PATH + '/Plugins/' + item['name']):
            #    item['installed'] = True
            plugins.append(item)
    return render_to_response('list.html', {'Plugins': plugins,
                                            'server_version': get_distribution('lisa-server').version},
                              context_instance=RequestContext(request))
Exemplo n.º 13
0
    def uninstall(self, request, **kwargs):
        self.method_check(request, allowed=['get'])
        self.is_authenticated(request)
        self.throttle_check(request)

        from tastypie.http import HttpAccepted, HttpNotModified

        try:
            for plugin in Plugin.objects(pk=kwargs['pk']):
                rmtree(LISA_PATH + '/Plugins/' + plugin['name'])
                plugin.delete()
        except:
            pass
            #except FailedException as failure:
        #    return self.create_response(request, { 'status' : 'failure', 'reason' : failure }, HttpNotModified
        self.log_throttled_access(request)
        LisaInstance.SchedReload()
        LisaInstance.LisaReload()
        return self.create_response(request, { 'status': 'success', 'log': "Plugin Deleted"}, HttpAccepted)
Exemplo n.º 14
0
def list(request):
    plugins = []
    metareq = requests.get('http://plugins.lisa-project.net/plugins.json')
    if (metareq.ok):
        for item in json.loads(metareq.text or metareq.content):
            for plugin in Plugin.objects(name=item['name']):
                item['id'] = plugin.id
                item['enabled'] = plugin.enabled
                if plugin.version < item['version']:
                    item['upgrade'] = True
            #if os.path.exists(LISA_PATH + '/Plugins/' + item['name']):
            #    item['installed'] = True
            plugins.append(item)
    return render_to_response(
        'list.html', {
            'Plugins': plugins,
            'server_version': get_distribution('lisa-server').version
        },
        context_instance=RequestContext(request))
Exemplo n.º 15
0
    def disable(self, request, **kwargs):
        self.method_check(request, allowed=['get'])
        self.is_authenticated(request)
        self.throttle_check(request)

        from tastypie.http import HttpAccepted, HttpNotModified

        try:
            for plugin in Plugin.objects(pk=kwargs['pk']):
                plugin.enabled = False
                plugin.save()
                for cron in Cron.objects(plugin=plugin):
                    cron.enabled = False
                    cron.save()
        except:
            pass
            #except FailedException as failure:
        #    return self.create_response(request, { 'status' : 'failure', 'reason' : failure }, HttpNotModified
        self.log_throttled_access(request)
        LisaInstance.SchedReload()
        LisaInstance.LisaReload()
        return self.create_response(request, { 'status': 'success', 'log': "Plugin Disabled"}, HttpAccepted)
Exemplo n.º 16
0
def upload(request):
    if request.method == 'POST':
        form = PluginForm(request.POST, request.FILES)
        if not request.FILES['archive'].content_type in \
                ['application/gzip', 'application/x-gzip']:
            return render(
                request, 'upload.html', {
                    'form': form,
                    'function': 'plugin',
                    'message': 'File not of acceptable type',
                    'type': 'alert-danger'
                })
        else:
            arch = request.FILES['archive']
            arch = cStringIO.StringIO(arch.read())
            t = tarfile.open(fileobj=arch)

            data = None
            for x in t.getmembers():
                if '/manifest.json' in x.name:
                    pid = x.name.split('/')[0]
                    data = json.loads(t.extractfile(x).read())
            if not data:
                return render(
                    request, 'upload.html', {
                        'form': form,
                        'function': 'plugin',
                        'message': 'Malformed archive. Please resubmit in '
                        'accordance with Genesis Plugin API guidelines.',
                        'type': 'alert-error'
                    })

            # If upgrading, check permission and backup old one if necessary
            if Plugin.objects.filter(PLUGIN_ID=pid, BACKUP=False).exists():
                backup(Plugin.objects.get(PLUGIN_ID=pid, BACKUP=False))

            # Update the database with the new plugin data
            f = Plugin(name=data['name'],
                       archive=request.FILES['archive'],
                       TYPE=data['type'],
                       DESCRIPTION=data['description']['short'],
                       LONG_DESCRIPTION=data['description'].get('long', ''),
                       AUTHOR=data['author'],
                       HOMEPAGE=data['homepage'],
                       APP_AUTHOR=data.get('app_author', ''),
                       APP_HOMEPAGE=data.get('app_homepage', ''),
                       MODULES=json.dumps(data['modules']),
                       CATEGORIES=json.dumps(data['categories']),
                       VERSION=data['version'],
                       DEPS=json.dumps(data['dependencies']),
                       PLUGIN_ID=pid,
                       ICON=data['icon'],
                       BACKUP=False)
            f.save()
            if data.get('logo'):
                s = Image(itype="logo", plugin=f)
                s.image.save(
                    "logo.png",
                    t.extractfile(os.path.join(pid, 'assets/logo.png')))
                s.save()
            if data.get('screenshots'):
                for x in data['screenshots']:
                    s = Image(itype="screenshot", plugin=f)
                    s.image.save("screen.jpg",
                                 t.extractfile(os.path.join(pid, 'assets', x)))
                    s.save()
            # Display success message
            return render(
                request, 'upload.html', {
                    'form': form,
                    'function': 'plugin',
                    'message': 'Upload successful!',
                    'type': 'alert-success'
                })
    else:
        form = PluginForm()
    return render(request, 'upload.html', {'form': form, 'function': 'plugin'})
Exemplo n.º 17
0
    def __init__(self, message):
        self.message = message
        for plugin in Plugin.query():
            exec plugin.code in functions.__dict__

        self.patterns = decorators.available_plugins
Exemplo n.º 18
0
        # To screen
        print '\n'.join(l)
        return

    # Debug message
    if debug:
        print "Processing: %s (Family) | %s (script_id)" % (m_plugin_family, m_plugin_id)

    from models import Families, Plugin


    f = Families()
    f.family_name = m_plugin_family
    f.save()

    p = Plugin()
    p.plugin_id = m_plugin_id
    p.plugin_file_name = f_name
    p.family = f
    p.save()


    #try:
        #results[m_plugin_family].append([m_plugin_id, f_name])
    #except KeyError:
        #results[m_plugin_family] = d.list()
        #results[m_plugin_family].append([m_plugin_id, f_name])

    #return {m_plugin_family : [m_plugin_id, f_name]}

def parse_files_(path_in, path_out, debug=False):