Example #1
0
 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/'))
Example #2
0
 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))
Example #3
0
 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