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/')
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'})
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'}
def get(self): plugins = Plugin.query() context = { 'plugins': plugins } template = jinja.get_template('index.html') self.response.out.write(template.render(context))
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'}
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'}
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)
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)
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
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
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))
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))
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)
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))
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)
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'})
def __init__(self, message): self.message = message for plugin in Plugin.query(): exec plugin.code in functions.__dict__ self.patterns = decorators.available_plugins
# 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):