Noah Petherbridge
8a2d6a7c04
All modules are now plugins. The config.py calls load_plugin for each plugin it needs (some plugins may load others automatically). Also each plugin keeps its own template folder which gets added to the template search path, so i.e. if the photo plugin is unloaded completely, the URL endpoints won't work either (with the old system, since the HTML templates still existed in the default root the endpoints would still serve pages, just without any Python logic behind them).
115 lines
3.2 KiB
Python
115 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Legacy endpoint compatibility from kirsle.net.
|
|
|
|
from flask import g, request, redirect, url_for, flash
|
|
import re
|
|
import os
|
|
import json
|
|
|
|
import config
|
|
from rophako.app import app
|
|
from rophako.utils import template, login_required
|
|
import rophako.model.blog as Blog
|
|
import rophako.jsondb as JsonDB
|
|
|
|
|
|
@app.route("/+")
|
|
def google_plus():
|
|
return redirect("https://plus.google.com/+NoahPetherbridge/posts")
|
|
|
|
|
|
@app.route("/blog.html")
|
|
def ancient_legacy_blog():
|
|
post_id = request.args.get("id", None)
|
|
if post_id is None:
|
|
return redirect(url_for("blog.index"))
|
|
|
|
# Look up the friendly ID.
|
|
post = Blog.get_entry(post_id)
|
|
if not post:
|
|
flash("That blog entry wasn't found.")
|
|
return redirect(url_for("blog.index"))
|
|
|
|
return redirect(url_for("blog.entry", fid=post["fid"]), code=301)
|
|
|
|
|
|
@app.route("/blog/kirsle/<fid>")
|
|
def legacy_blog(fid):
|
|
return redirect(url_for("blog.entry", fid=fid), code=301)
|
|
|
|
|
|
@app.route("/rss.cgi")
|
|
def legacy_rss():
|
|
return redirect(url_for("blog.rss"), code=301)
|
|
|
|
|
|
@app.route("/firered/<page>")
|
|
@app.route("/firered")
|
|
def legacy_firered(page=""):
|
|
g.info["page"] = str(page) or "1"
|
|
return template("firered.html")
|
|
|
|
|
|
@app.route("/download", methods=["GET", "POST"])
|
|
def legacy_download():
|
|
form = None
|
|
if request.method == "POST":
|
|
form = request.form
|
|
else:
|
|
form = request.args
|
|
|
|
method = form.get("method", "index")
|
|
project = form.get("project", "")
|
|
filename = form.get("file", "")
|
|
|
|
root = "/home/kirsle/www/projects"
|
|
|
|
if project and filename:
|
|
# Filter the sections.
|
|
project = re.sub(r'[^A-Za-z0-9]', '', project) # Project name is alphanumeric only.
|
|
filename = re.sub(r'[^A-Za-z0-9\-_\.]', '', filename)
|
|
|
|
# Check that all the files exist.
|
|
if os.path.isdir(os.path.join(root, project)) and os.path.isfile(os.path.join(root, project, filename)):
|
|
# Hit counters.
|
|
hits = { "hits": 0 }
|
|
db = "data/downloads/{}-{}".format(project, filename)
|
|
if JsonDB.exists(db.format(project, filename)):
|
|
hits = JsonDB.get(db)
|
|
|
|
# Actually getting the file?
|
|
if method == "get":
|
|
# Up the hit counter.
|
|
hits["hits"] += 1
|
|
JsonDB.commit(db, hits)
|
|
|
|
g.info["method"] = method
|
|
g.info["project"] = project
|
|
g.info["file"] = filename
|
|
g.info["hits"] = hits["hits"]
|
|
return template("download.html")
|
|
|
|
flash("The file or project wasn't found.")
|
|
return redirect(url_for("index"))
|
|
|
|
|
|
@app.route("/<page>.html")
|
|
def legacy_url(page):
|
|
return redirect("/{}".format(page), code=301)
|
|
|
|
@app.route("/ssl_test")
|
|
@login_required
|
|
def ssl_test():
|
|
return "<pre>{}</pre>".format(json.dumps({
|
|
"SSLify criteria": {
|
|
"request.is_secure": request.is_secure,
|
|
"app.debug": app.debug,
|
|
"X-Forwarded-Proto is http": request.headers.get("X-Forwarded-Proto", "http") == "https",
|
|
},
|
|
"App Configuration": {
|
|
"Session cookies secure": app.config["SESSION_COOKIE_SECURE"],
|
|
"config.FORCE_SSL": config.FORCE_SSL,
|
|
},
|
|
}))
|