def route(self, env): path = env['PATH_INFO'] if not self.node.authorize(env): return http.Forbidden() if (path == '/info'): return self.handle_get('info', env) if (path == '/sys'): return self.handle_post('sys', env) if (path == '/pip-install'): return self.handle_post('pip_install', env) if (path == '/pip-uninstall'): return self.handle_post('pip_uninstall', env) if (path == '/terminate'): return self.handle_post('terminate', env) if (path == '/recognize'): host, port = tuple(json.loads( env['wsgi.input'].read() )) host = host or env['REMOTE_ADDR'] from sovereign.node import RemoteNode self.node.recognize(RemoteNode(address=(host, port))) return JsonResponse(data=True) if (path.startswith('/services/')): return self.handleService(self.node, util.eat_path_info(env, '/services/')) if (path.startswith('/nodes/')): return self.handleNodes(util.eat_path_info(env, '/nodes/'))
def handleNodes(self, env): method = env['REQUEST_METHOD'].lower() rest = env['PATH_INFO'].rstrip('/').split('/') id = rest[0] if len(rest) > 1: node = self.node.get_node(id) if not node: return http.NotFound("Unknown node: %r" % id) return self.handleService(node, util.eat_path_info(env, '%s/' % id)) if (method == 'put'): existing = self.node.get_node(id) if (existing): if (existing in self.node.vassals): return http.MethodNotAllowed(['GET', 'DELETE']) else: return http.MethodNotAllowed(['GET']) path, settings = json.loads( env['wsgi.input'].read() ) node = self.node.create_local_node(id, path, settings) return JsonResponse(data=node.info()) if (method == 'get'): node = self.node.get_node(id) if node: return JsonResponse(data=node.info()) else: return None if (method == 'delete'): return JsonResponse(data=self.node.delete_node(id))
def route(self, env): if (env['PATH_INFO'] == '/'): return self.index(env) if (env['PATH_INFO'].startswith('/media')): util.eat_path_info(env, '/media') return self._media