def POST(self, path): p = db.get_version(path) if not p: raise web.seeother(path) i = web.input('permission.key', 'child_permission.key') q = { 'key': path, 'permission': { 'connect': 'update', 'key': i['permission.key'] or None, }, 'child_permission': { 'connect': 'update', 'key': i['child_permission.key'] or None, } } try: web.ctx.site.write(q) except Exception, e: import traceback traceback.print_exc(e) add_flash_message('error', str(e)) return render.permission(p)
def diff(key, revision): b = db.get_version(key, revision) rev_a = revision -1 if rev_a is 0: a = web.ctx.site.new(key, {}) a.revision = 0 else: a = db.get_version(key, revision=rev_a) diff = render.diff(a, b) #@@ dirty hack to extract diff table from diff import re rx = re.compile(r"^.*(<table.*<\/table>).*$", re.S) return rx.sub(r'\1', str(diff))
def GET(self, path): i = web.input(v=None) if i.v is not None and safeint(i.v, None) is None: raise web.seeother(web.changequery(v=None)) p = db.get_version(path, i.v) if p is None: return notfound(path) elif p.type.key == '/type/delete': web.ctx.status = '404 Not Found' return render.viewpage(p) elif p.type.key == "/type/redirect": web.redirect(p.location) else: return render.viewpage(p)
def GET(self, path): i = web.input(v=None) if i.v is not None and safeint(i.v, None) is None: raise web.seeother(web.changequery(v=None)) p = db.get_version(path, i.v) if p is None: return notfound(path) elif p.type.key == '/type/delete': web.ctx.status = '404 Not Found' return render.viewpage(p) elif p.type.key == "/type/redirect" and p.location \ and not p.location.startswith('http://') \ and not p.location.startswith('://'): web.redirect(p.location) else: return render.viewpage(p)
def GET(self, path): i = web.input(v=None, t=None) if not web.ctx.site.can_write(path): return render.permission_denied(path, "Permission denied to edit " + path + ".") if i.v is not None and safeint(i.v, None) is None: raise web.seeother(web.changequery(v=None)) p = db.get_version(path, i.v) or db.new_version(path, types.guess_type(path)) if i.t: type = db.get_type(i.t) if type is None: add_flash_message('error', 'Unknown type: ' + i.t) else: p.type = type return render.editpage(p)
def GET(self, path): i = web.input(v=None, t=None) if not web.ctx.site.can_write(path): return render.permission_denied(web.ctx.fullpath, "Permission denied to edit " + path + ".") if i.v is not None and safeint(i.v, None) is None: raise web.seeother(web.changequery(v=None)) p = db.get_version(path, i.v) or db.new_version(path, types.guess_type(path)) if i.t: type = db.get_type(i.t) if type is None: add_flash_message('error', 'Unknown type: ' + i.t) else: p.type = type return render.editpage(p)
def send_graph(nodes, edges): print('Nodes: {:d}\nEdges: {:d}\n'.format(len(nodes), len(edges))) with open('out.dot','wt') as out: out.write('digraph cjdns {\n') out.write(" overlap=false;\n"); for ident,node in nodes.items(): out.write(' n{} [label="{}"];\n'.format( ident, node['ip'].rsplit(':',1)[-1])) for node,peer in edges.items(): out.write(' n{} -> n{}\n'.format( node, peer)); out.write('}\n') graph = { 'nodes': [], 'edges': [{'a': nodes[A]['ip'], 'b': nodes[B]['ip']} for A,B in edges.items()] } for ident,node in nodes.items(): version = db.get_version(ident) if version is None: continue graph['nodes'].append({ 'ip': node['ip'], 'version': version } ) json_graph = json.dumps(graph) print(json_graph) return print('Sending data to {:s}...'.format(url)) payload = {'data': json_graph, 'mail': your_mail, 'version': 2} r = requests.post(url, data=payload) if r.text == 'OK': print('Done!') else: print('{:s}'.format(r.text))
def send_graph(nodes, edges): print('Nodes: {:d}\nEdges: {:d}\n'.format(len(nodes), len(edges))) with open('out.dot', 'wt') as out: out.write('digraph cjdns {\n') out.write(" overlap=false;\n") for ident, node in nodes.items(): out.write(' n{} [label="{}"];\n'.format( ident, node['ip'].rsplit(':', 1)[-1])) for node, peer in edges.items(): out.write(' n{} -> n{}\n'.format(node, peer)) out.write('}\n') graph = { 'nodes': [], 'edges': [{ 'a': nodes[A]['ip'], 'b': nodes[B]['ip'] } for A, B in edges.items()] } for ident, node in nodes.items(): version = db.get_version(ident) if version is None: continue graph['nodes'].append({'ip': node['ip'], 'version': version}) json_graph = json.dumps(graph) print(json_graph) return print('Sending data to {:s}...'.format(url)) payload = {'data': json_graph, 'mail': your_mail, 'version': 2} r = requests.post(url, data=payload) if r.text == 'OK': print('Done!') else: print('{:s}'.format(r.text))
def GET(self, path): p = db.get_version(path) if not p: raise web.seeother(path) return render.permission(p)
log.info("Upgrading the database...") db.set_version(target_version) # main if __name__ == '__main__': # ensure it is run as root if os.geteuid() != 0: exit( "ERROR: You need to have root privileges to run this script.\nPlease try again, this time using 'sudo'. Exiting." ) init_logger() log.info("Welcome to myHouse") log.info("------------------") # retrieve the version from the database version = db.get_version() # if requested set the current version manually if len(sys.argv) == 3 and sys.argv[1] == "--current-version": version = sys.argv[2] if version is None: log.info( "ERROR: a previous version of myHouse was not found on the configured database" ) exit() log.info("Detected version: " + version) if version == conf["constants"]["version"]: log.info("Already running the latest version (" + str(version) + "). Exiting.") exit() if version == "1.0": upgrade_2_0() elif version == "2.0": upgrade_2_1()