def plugins(request): Service = namedtuple("Service", ["name", "status", "pid", "start_url", "stop_url", "status_url", "jail_status"]) host = get_base_url(request) plugins = models.Plugins.objects.filter(plugin_enabled=True) args = map(lambda y: (y, host, request), plugins) pool = eventlet.GreenPool(20) for plugin, _json, jail_status in pool.imap(get_plugin_status, args): if not _json: _json = {} _json["status"] = None plugin.service = Service( name=plugin.plugin_name, status=_json["status"], pid=_json.get("pid", None), start_url="/plugins/%s/%d/_s/start" % (plugin.plugin_name, plugin.id), stop_url="/plugins/%s/%d/_s/stop" % (plugin.plugin_name, plugin.id), status_url="/plugins/%s/%d/_s/status" % (plugin.plugin_name, plugin.id), jail_status=jail_status, ) return render(request, "plugins/plugins.html", {"plugins": plugins})
def _get_plugins_nodes(self, request, jails): host = get_base_url(request) plugs = Plugins.objects.filter( plugin_enabled=True, plugin_jail__in=[jail.jail_host for jail in jails]) if len(plugs) > 1: timeout = len(plugs) * 5 else: timeout = 6 args = [(y, host, request, timeout) for y in plugs] with ThreadPool(10) as pool: for plugin, url, data in pool.imap(self._plugin_fetch, args): if not data: continue try: data = json.loads(data) nodes = unserialize_tree(data) for node in nodes: # We have our TreeNode's, find out where to place them found = False if node.append_to: log.debug( "Plugin %s requested to be appended to %s", plugin.plugin_name, node.append_to) places = node.append_to.split('.') places.reverse() for root in tree_roots: find = root.find_place(list(places)) if find is not None: find.append_child(node) found = True break else: log.debug( "Plugin %s didn't request to be appended " "anywhere specific", plugin.plugin_name) if not found: tree_roots.register(node) except Exception as e: log.warn( _("An error occurred while unserializing from " "%(url)s: %(error)s") % { 'url': url, 'error': e }) log.debug( _("Error unserializing %(url)s (%(error)s), data " "retrieved:") % { 'url': url, 'error': e, }) continue
def _get_plugins_nodes(self, request, jails): host = get_base_url(request) plugs = Plugins.objects.filter(plugin_enabled=True, plugin_jail__in=[jail.jail_host for jail in jails]) if len(plugs) > 1: timeout = len(plugs) * 5 else: timeout = 6 args = map( lambda y: (y, host, request, timeout), plugs) pool = eventlet.GreenPool(20) for plugin, url, data in pool.imap(self._plugin_fetch, args): if not data: continue try: data = json.loads(data) nodes = unserialize_tree(data) for node in nodes: # We have our TreeNode's, find out where to place them found = False if node.append_to: log.debug( "Plugin %s requested to be appended to %s", plugin.plugin_name, node.append_to) places = node.append_to.split('.') places.reverse() for root in tree_roots: find = root.find_place(list(places)) if find is not None: find.append_child(node) found = True break else: log.debug( "Plugin %s didn't request to be appended " "anywhere specific", plugin.plugin_name) if not found: tree_roots.register(node) except Exception, e: log.warn(_( "An error occurred while unserializing from " "%(url)s: %(error)s") % {'url': url, 'error': e}) log.debug(_( "Error unserializing %(url)s (%(error)s), data " "retrieved:" ) % { 'url': url, 'error': e, }) continue
def plugins(request): jc_path = None try: jc = JailsConfiguration.objects.order_by("-id")[0] jc_path = jc.jc_path except: jc_path = None Service = namedtuple('Service', [ 'name', 'status', 'pid', 'start_url', 'stop_url', 'status_url', 'jail_status', ]) host = get_base_url(request) plugins = [] temp = models.Plugins.objects.filter(plugin_enabled=True) if jc_path: for t in temp: if os.path.exists("%s/%s" % (jc_path, t.plugin_jail)): plugins.append(t) args = [(y, host, request) for y in plugins] with ThreadPool(10) as pool: for plugin, _json, jail_status in pool.imap(get_plugin_status, args): if not _json: _json = {} _json['status'] = None plugin.service = Service( name=plugin.plugin_name, status=_json['status'], pid=_json.get("pid", None), start_url="/plugins/%s/%d/_s/start" % ( plugin.plugin_name, plugin.id ), stop_url="/plugins/%s/%d/_s/stop" % ( plugin.plugin_name, plugin.id ), status_url="/plugins/%s/%d/_s/status" % ( plugin.plugin_name, plugin.id ), jail_status=jail_status, ) plugin.update_available = availablePlugins.get_update_status(plugin.id) return render(request, "plugins/plugins.html", { 'plugins': plugins, })
def plugins(request): jc_path = None try: jc = JailsConfiguration.objects.order_by("-id")[0] jc_path = jc.jc_path except: jc_path = None Service = namedtuple('Service', [ 'name', 'status', 'pid', 'start_url', 'stop_url', 'status_url', 'jail_status', ]) host = get_base_url(request) plugins = [] temp = models.Plugins.objects.filter(plugin_enabled=True) if jc_path: for t in temp: if os.path.exists("%s/%s" % (jc_path, t.plugin_jail)): plugins.append(t) args = map(lambda y: (y, host, request), plugins) pool = eventlet.GreenPool(20) for plugin, _json, jail_status in pool.imap(get_plugin_status, args): if not _json: _json = {} _json['status'] = None plugin.service = Service( name=plugin.plugin_name, status=_json['status'], pid=_json.get("pid", None), start_url="/plugins/%s/%d/_s/start" % ( plugin.plugin_name, plugin.id ), stop_url="/plugins/%s/%d/_s/stop" % ( plugin.plugin_name, plugin.id ), status_url="/plugins/%s/%d/_s/status" % ( plugin.plugin_name, plugin.id ), jail_status=jail_status, ) plugin.update_available = availablePlugins.get_update_status(plugin.id) return render(request, "plugins/plugins.html", { 'plugins': plugins, })
def plugin_update(request, oid): host = get_base_url(request) jc = JailsConfiguration.objects.order_by("-id")[0] logfile = "%s/warden.log" % jc.jc_path if os.path.exists(logfile): os.unlink(logfile) if os.path.exists(WARDEN_EXTRACT_STATUS_FILE): os.unlink(WARDEN_EXTRACT_STATUS_FILE) if os.path.exists("/tmp/.plugin_upload_install"): os.unlink("/tmp/.plugin_upload_install") if os.path.exists("/tmp/.jailcreate"): os.unlink("/tmp/.jailcreate") if os.path.exists(PROGRESS_FILE): os.unlink(PROGRESS_FILE) iplugin = models.Plugins.objects.filter(id=oid) if not iplugin: raise MiddlewareError(_("Plugin not installed")) iplugin = iplugin[0] rplugin = None for rp in availablePlugins.get_remote(cache=True): if rp.name == iplugin.plugin_name: rplugin = rp break if not rplugin: raise MiddlewareError(_("Invalid plugin")) (p, js, jail_status) = get_plugin_status([iplugin, host, request]) if js and js["status"] == "RUNNING": (p, js, jail_status) = get_plugin_stop([iplugin, host, request]) if request.method == "POST": plugin_upload_path = notifier().get_plugin_upload_path() notifier().change_upload_location(plugin_upload_path) if not rplugin.download("/var/tmp/firmware/pbifile.pbi"): raise MiddlewareError(_("Failed to download plugin")) jail = Jails.objects.filter(jail_host=iplugin.plugin_jail) if not jail: raise MiddlewareError(_("Jail does not exist")) if notifier().update_pbi(plugin=iplugin): notifier()._start_plugins(jail=iplugin.plugin_jail, plugin=iplugin.plugin_name) else: raise MiddlewareError(_("Failed to update plugin")) return JsonResp(request, message=_("Plugin successfully updated"), events=["reloadHttpd()"]) return render(request, "plugins/plugin_update.html", {"plugin": rplugin})
def plugin_update(request, oid): host = get_base_url(request) reset_plugin_progress() iplugin = models.Plugins.objects.filter(id=oid) if not iplugin: raise MiddlewareError(_("Plugin not installed")) iplugin = iplugin[0] rplugin = None for rp in availablePlugins.get_remote(cache=True): if rp.name.lower() == iplugin.plugin_name.lower(): rplugin = rp break if not rplugin: raise MiddlewareError(_("Invalid plugin")) (p, js, jail_status) = get_plugin_status([iplugin, host, request]) if js and js['status'] == 'RUNNING': (p, js, jail_status) = get_plugin_stop([iplugin, host, request]) if request.method == "POST": plugin_upload_path = notifier().get_plugin_upload_path() notifier().change_upload_location(plugin_upload_path) if not rplugin.download("/var/tmp/firmware/pbifile.pbi"): raise MiddlewareError(_("Failed to download plugin")) jail = Jails.objects.filter(jail_host=iplugin.plugin_jail) if not jail: raise MiddlewareError(_("Jail does not exist")) if notifier().update_pbi(plugin=iplugin): notifier()._start_plugins( jail=iplugin.plugin_jail, plugin=iplugin.plugin_name, ) else: raise MiddlewareError(_("Failed to update plugin")) return JsonResp( request, message=_("Plugin successfully updated"), events=['reloadHttpd()'], ) return render(request, "plugins/plugin_update.html", { 'plugin': rplugin, })
def plugins(request): Service = namedtuple('Service', [ 'name', 'status', 'pid', 'start_url', 'stop_url', 'status_url', 'jail_status', ]) host = get_base_url(request) plugins = Plugins.objects.filter(plugin_enabled=True) args = map(lambda y: (y, host, request), plugins) pool = eventlet.GreenPool(20) for plugin, json in pool.imap(get_plugin_status, args): # # XXX Hacky Hack XXX # # This lets the plugins be displayed, even if they aren't reachable. # This is useful for things like viewing, deleting and updating # plugins even if they aren't reachable. # if not json: json = {} json['status'] = None jail_status = notifier().pluginjail_running(pjail=plugin.plugin_jail) plugin.service = Service( name=plugin.plugin_name, status=json['status'], pid=json.get("pid", None), start_url="/plugins/%s/%d/_s/start" % (plugin.plugin_name, plugin.id), stop_url="/plugins/%s/%d/_s/stop" % (plugin.plugin_name, plugin.id), status_url="/plugins/%s/%d/_s/status" % (plugin.plugin_name, plugin.id), jail_status=jail_status, ) return render(request, "services/plugins.html", { 'plugins': plugins })
def plugins(request): Service = namedtuple('Service', [ 'name', 'status', 'pid', 'start_url', 'stop_url', 'status_url', 'jail_status', ]) host = get_base_url(request) plugins = models.Plugins.objects.filter(plugin_enabled=True) args = map(lambda y: (y, host, request), plugins) pool = eventlet.GreenPool(20) for plugin, _json, jail_status in pool.imap(get_plugin_status, args): if not _json: _json = {} _json['status'] = None plugin.service = Service( name=plugin.plugin_name, status=_json['status'], pid=_json.get("pid", None), start_url="/plugins/%s/%d/_s/start" % ( plugin.plugin_name, plugin.id ), stop_url="/plugins/%s/%d/_s/stop" % ( plugin.plugin_name, plugin.id ), status_url="/plugins/%s/%d/_s/status" % ( plugin.plugin_name, plugin.id ), jail_status=jail_status, ) plugin.update_available = availablePlugins.get_update_status(plugin.id) return render(request, "plugins/plugins.html", { 'plugins': plugins, })
def plugin_installed_icon(request, plugin_name, oid): icon = None plugin = models.Plugins.objects.get(pk=oid) for wo in Warden().list(): wj = WardenJail(**wo) if wj.host == plugin.plugin_jail and wj.status == WARDEN_STATUS_STOPPED: icon = default_icon() break if wj.host == plugin.plugin_jail and wj.status == WARDEN_STATUS_RUNNING: url = "%s/plugins/%s/%d/treemenu-icon" % (get_base_url(request), plugin_name, int(oid)) try: response = urllib2.urlopen(url, timeout=15) icon = response.read() except: pass break if not icon: icon = default_icon() return HttpResponse(icon, content_type="image/png")
def plugins(request): Service = namedtuple('Service', [ 'name', 'status', 'pid', 'start_url', 'stop_url', 'status_url', 'jail_status', ]) host = get_base_url(request) plugins = models.Plugins.objects.filter(plugin_enabled=True) args = map(lambda y: (y, host, request), plugins) pool = eventlet.GreenPool(20) for plugin, _json, jail_status in pool.imap(get_plugin_status, args): if not _json: _json = {} _json['status'] = None plugin.service = Service( name=plugin.plugin_name, status=_json['status'], pid=_json.get("pid", None), start_url="/plugins/%s/%d/_s/start" % (plugin.plugin_name, plugin.id), stop_url="/plugins/%s/%d/_s/stop" % (plugin.plugin_name, plugin.id), status_url="/plugins/%s/%d/_s/status" % (plugin.plugin_name, plugin.id), jail_status=jail_status, ) plugin.update_available = availablePlugins.get_update_status(plugin.id) return render(request, "plugins/plugins.html", { 'plugins': plugins, })
def plugin_installed_icon(request, plugin_name, oid): icon = None plugin = models.Plugins.objects.get(pk=oid) for wo in Warden().list(): wj = WardenJail(**wo) if wj.host == plugin.plugin_jail and wj.status == WARDEN_STATUS_STOPPED: icon = default_icon() break if wj.host == plugin.plugin_jail and wj.status == WARDEN_STATUS_RUNNING: url = "%s/plugins/%s/%d/treemenu-icon" % \ (get_base_url(request), plugin_name, int(oid)) try: response = urllib2.urlopen(url, timeout=15) icon = response.read() except: pass break if not icon: icon = default_icon() return HttpResponse(icon, content_type="image/png")
def plugin_update(request, oid): host = get_base_url(request) jc = JailsConfiguration.objects.order_by("-id")[0] logfile = '%s/warden.log' % jc.jc_path if os.path.exists(logfile): os.unlink(logfile) if os.path.exists(WARDEN_EXTRACT_STATUS_FILE): os.unlink(WARDEN_EXTRACT_STATUS_FILE) if os.path.exists("/tmp/.plugin_upload_install"): os.unlink("/tmp/.plugin_upload_install") if os.path.exists("/tmp/.jailcreate"): os.unlink("/tmp/.jailcreate") if os.path.exists(PROGRESS_FILE): os.unlink(PROGRESS_FILE) iplugin = models.Plugins.objects.filter(id=oid) if not iplugin: raise MiddlewareError(_("Plugin not installed")) iplugin = iplugin[0] rplugin = None for rp in availablePlugins.get_remote(cache=True): if rp.name.lower() == iplugin.plugin_name.lower(): rplugin = rp break if not rplugin: raise MiddlewareError(_("Invalid plugin")) (p, js, jail_status) = get_plugin_status([iplugin, host, request]) if js and js['status'] == 'RUNNING': (p, js, jail_status) = get_plugin_stop([iplugin, host, request]) if request.method == "POST": plugin_upload_path = notifier().get_plugin_upload_path() notifier().change_upload_location(plugin_upload_path) if not rplugin.download("/var/tmp/firmware/pbifile.pbi"): raise MiddlewareError(_("Failed to download plugin")) jail = Jails.objects.filter(jail_host=iplugin.plugin_jail) if not jail: raise MiddlewareError(_("Jail does not exist")) if notifier().update_pbi(plugin=iplugin): notifier()._start_plugins( jail=iplugin.plugin_jail, plugin=iplugin.plugin_name, ) else: raise MiddlewareError(_("Failed to update plugin")) return JsonResp( request, message=_("Plugin successfully updated"), events=['reloadHttpd()'], ) return render(request, "plugins/plugin_update.html", { 'plugin': rplugin, })
def __init__(self, *args, **kwargs): super(ViewPluginJails, self).__init__(*args, **kwargs) request = kwargs.get('request') host = get_base_url(request) jails = Jails.objects.filter(jail_type=WARDEN_TYPE_PLUGINJAIL) for jail in jails: jail_node = self.new_jail_node(jail, u'JailPluginIcon') self.append_child(jail_node) jail_node_view = self.new_jail_node_view(jail) jail_node_view.order = 1 jail_node.append_child(jail_node_view) storage_node = self.new_storage_node(jail) storage_node.order = 2 jail_node.append_child(storage_node) storage_order = 1 nmps = NullMountPoint.objects.filter(jail=jail.jail_host) for nmp in nmps: storage_node_view = self.new_storage_node_view(nmp) storage_node_view.order = storage_order storage_node.append_child(storage_node_view) storage_order += 1 storage_node_mkdir = self.new_storage_node_mkdir(jail) storage_node_mkdir.order = storage_order storage_node.append_child(storage_node_mkdir) storage_order += 1 storage_node_add = self.new_storage_node_add(jail) storage_node_add.order = storage_order storage_node.append_child(storage_node_add) plugin_node = TreeNode() plugin_node.gname = 'Plugins' plugin_node.name = _(u'Plugins') plugin_node.icon = u'PluginIcon' plugin_node.order = 3 args = map( lambda y: (y, host, request), Plugins.objects.filter(plugin_enabled=True, plugin_jail=jail.jail_host)) plugin_order = 1 pool = eventlet.GreenPool(20) for plugin, url, data in pool.imap(self.plugin_fetch, args): if not data: continue try: data = simplejson.loads(data) nodes = unserialize_tree(data) for node in nodes: node.order = plugin_order plugin_node.append_child(node) plugin_order += 1 except Exception, e: log.warn(_( "An error occurred while unserializing from " "%(url)s: %(error)s") % {'url': url, 'error': e}) log.debug(_( "Error unserializing %(url)s (%(error)s), data " "retrieved:") % { 'url': url, 'error': e, }) for line in data.splitlines(): log.debug(line) continue plugin_node_add = TreeNode() plugin_node_add.name = _('Install Plugin') plugin_node_add.type = 'editobject' plugin_node_add.view = 'plugin_install' plugin_node_add.kwargs = {'jail_id': jail.id } plugin_node_add.model = 'Plugins' plugin_node_add.icon = u'PluginInstallIcon' plugin_node_add.app_name = 'jails' plugin_node_add.order = plugin_order plugin_node.append_child(plugin_node_add) jail_node.append_child(plugin_node)
def __init__(self, *args, **kwargs): super(ViewPluginJails, self).__init__(*args, **kwargs) request = kwargs.get('request') host = get_base_url(request) jails = Jails.objects.filter(jail_type=WARDEN_TYPE_PLUGINJAIL) for jail in jails: jail_node = self.new_jail_node(jail, u'JailPluginIcon') self.append_child(jail_node) jail_node_view = self.new_jail_node_view(jail) jail_node_view.order = 1 jail_node.append_child(jail_node_view) storage_node = self.new_storage_node(jail) storage_node.order = 2 jail_node.append_child(storage_node) storage_order = 1 nmps = NullMountPoint.objects.filter(jail=jail.jail_host) for nmp in nmps: storage_node_view = self.new_storage_node_view(nmp) storage_node_view.order = storage_order storage_node.append_child(storage_node_view) storage_order += 1 storage_node_mkdir = self.new_storage_node_mkdir(jail) storage_node_mkdir.order = storage_order storage_node.append_child(storage_node_mkdir) storage_order += 1 storage_node_add = self.new_storage_node_add(jail) storage_node_add.order = storage_order storage_node.append_child(storage_node_add) plugin_node = TreeNode() plugin_node.gname = 'Plugins' plugin_node.name = _(u'Plugins') plugin_node.icon = u'PluginIcon' plugin_node.order = 3 args = map( lambda y: (y, host, request), Plugins.objects.filter(plugin_enabled=True, plugin_jail=jail.jail_host)) plugin_order = 1 pool = eventlet.GreenPool(20) for plugin, url, data in pool.imap(self.plugin_fetch, args): if not data: continue try: data = simplejson.loads(data) nodes = unserialize_tree(data) for node in nodes: node.order = plugin_order plugin_node.append_child(node) plugin_order += 1 except Exception, e: log.warn( _("An error occurred while unserializing from " "%(url)s: %(error)s") % { 'url': url, 'error': e }) log.debug( _("Error unserializing %(url)s (%(error)s), data " "retrieved:") % { 'url': url, 'error': e, }) for line in data.splitlines(): log.debug(line) continue plugin_node_add = TreeNode() plugin_node_add.name = _('Install Plugin') plugin_node_add.type = 'editobject' plugin_node_add.view = 'plugin_install' plugin_node_add.kwargs = {'jail_id': jail.id} plugin_node_add.model = 'Plugins' plugin_node_add.icon = u'PluginInstallIcon' plugin_node_add.app_name = 'jails' plugin_node_add.order = plugin_order plugin_node.append_child(plugin_node_add) jail_node.append_child(plugin_node)