示例#1
0
 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)
示例#2
0
        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))
示例#3
0
        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))
示例#4
0
 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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
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))
示例#10
0
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))
示例#11
0
 def GET(self, path):
     p = db.get_version(path)
     if not p:
         raise web.seeother(path)
     return render.permission(p)
示例#12
0
        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()
示例#13
0
 def GET(self, path):
     p = db.get_version(path)
     if not p:
         raise web.seeother(path)
     return render.permission(p)