Exemple #1
0
def admin():
    user = verify()
    if user is None:
        flask.abort(403)
    db = get_db()
    row = db.execute("SELECT admin FROM users WHERE canonical_name = ?", (user,)).fetchone()
    if row is None or row[0] == 0:
        flask.abort(403)
    c = db.execute("SELECT files.id, files.name, files.revision, blobs.ctime, users.name FROM files INNER JOIN blobs ON blobs.id = files.revision LEFT OUTER JOIN users ON users.id = files.owner")
    copycats = list(map(lambda row: (row[0], row[1], format_url(row[2]), row[3], row[4]), c))
    return flask.render_template("admin.html", active="admin", copycats=copycats)
Exemple #2
0
def usercats():
    user = verify()
    if user == None:
        flask.abort(403)
    c = get_db().execute("SELECT files.id, files.name, files.revision, files.type, blobs.ctime FROM files INNER JOIN blobs ON blobs.id = files.revision LEFT OUTER JOIN users ON users.id = files.owner WHERE users.canonical_name = ?", (user,))
    files = list(c)
    copycats = list(map(lambda row: (row[0], row[1], format_url(row[2]), lexer_name(row[3]), row[4]), files))[::-1]
    base = BeautifulSoup(flask.render_template("usercats.html", active="usercats", copycats=copycats))
    
    for f in files:
        fragment = BeautifulSoup(format_rev(f[2], f[3], 10)).body
        tag = base.find("div", id="file-{}".format(f[0]))
        tag = tag.find("div", class_="panel-footer")
        for elem in fragment.children:
            tag.insert_before(elem)
            
    return str(base)
Exemple #3
0
def savechanges():
    src = flask.request.form["copycat"]
    kood = flask.request.form["lexer"]
    value = flask.request.form["button"]
    print("Edited cat value: " + value)
        
    try:
        lexer = pygments.lexers.get_lexer_by_name(kood).aliases[0]
    except:
        lexer = pygments.lexers.guess_lexer(src).aliases[0]

    patch_ = "".join(diff("", src.splitlines(True)))
    file_id = blake2b(data=src.encode("utf-8")).digest()
    patch_id = blake2b(data=patch_.encode("utf-8")).digest()
    ctime = datetime.datetime.now(datetime.timezone.utc)

    db = get_db()
    try:
        db.execute("DELETE FROM files WHERE files.id = ?", (value,))
        db.execute("INSERT INTO blobs (id, patch, ctime) VALUES (?, ?, ?)",
                (sqlite3.Binary(file_id), sqlite3.Binary(patch_id), ctime))
    except:
        blob = db.execute("SELECT id FROM blobs WHERE id = ?", (sqlite3.Binary(file_id),)).fetchone()
        if blob == None or blob[0] != file_id:
            raise

    with lzma.open(os.path.join(app.config["BASE_PATH"], binascii.hexlify(patch_id).decode("utf-8")), "w") as f:
        f.write(patch_.encode("utf-8"))
    
    user = verify()
    if user is None:
        owner_id = None
    else:
        owner_id = db.execute("SELECT id FROM users WHERE canonical_name = ?", (user,)).fetchone()[0]
    db.execute("INSERT INTO files (owner, name, type, revision) VALUES(?, ?, ?, ?)",
            (owner_id, flask.request.form["name"], lexer, sqlite3.Binary(file_id)))
    db.commit()

    return flask.redirect(format_url(file_id))