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")
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")
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)
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)
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)
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))
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)