예제 #1
0
def admindelete():
    db = get_db()
    user = verify()
    if user == None:
        flask.abort(403)
    catid = flask.request.form["delete"]
    db.execute("DELETE FROM files WHERE files.id = ?", (catid,))
    db.commit()
    return flask.redirect("/admin")
예제 #2
0
def deleteuser():
    db = get_db()
    user = verify()
    if user == None:
        flask.abort(403)
    username = flask.request.form["delete"]
    db.execute("DELETE FROM users WHERE users.name = ?", (username,))
    db.commit()
    return flask.redirect("/users")
예제 #3
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)
예제 #4
0
def users():
    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 COUNT(files.id), users.name, users.email FROM files INNER JOIN users ON users.id = files.owner GROUP BY users.name")
    userlist = list(map(lambda row: (row[0], row[1], row[2]), c))
    return flask.render_template("users.html", active="admin", userlist=userlist)
예제 #5
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)
예제 #6
0
def submit():
    value = flask.request.form["button"]
    print(value)
    src = flask.request.form["copycat"]
    kood = flask.request.form["lexer"]
    if value=="preview":
        preview(src, kood)
        return
        
    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("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))
예제 #7
0
def editcat():
    url = flask.request.form["url"]
    file_id = flask.request.form["id"]
    name = flask.request.form["title"]
    print("Editing cat: " + file_id)
    
    db = get_db()
    user = verify()
    if user == None:
        flask.abort(403)
    
    try:
        rev = decode_rev(url[3::])
    except:
        flask.abort(404)
    c = get_db().execute("SELECT revision, name FROM files WHERE substr(revision, 1, ?) = ?", (len(rev), sqlite3.Binary(rev)))
    if c is None:
        flask.abort(404)
    rev = c.fetchone()[0]
    plaincat = b"".join(rebuild(rev)).decode("utf-8")

    lexers = sorted(map(lambda x: (x[0], x[1][0]), pygments.lexers.get_all_lexers()))
    
    return flask.render_template("editcat.html", plaincat=plaincat, lexers=lexers, file_id=file_id, name=name)