forked from MarseyWorld/MarseyWorld
rework errors
parent
0ba14cb771
commit
fd25809cac
|
@ -1,19 +1,96 @@
|
||||||
from files.helpers.wrappers import *
|
from files.helpers.wrappers import *
|
||||||
from flask import *
|
from flask import *
|
||||||
|
from werkzeug.exceptions import HTTPException
|
||||||
from urllib.parse import quote, urlencode
|
from urllib.parse import quote, urlencode
|
||||||
import time
|
import time
|
||||||
from files.__main__ import app, limiter
|
from files.__main__ import app, limiter
|
||||||
|
|
||||||
|
WERKZEUG_ERROR_DESCRIPTIONS = {
|
||||||
|
400: "The browser (or proxy) sent a request that this server could not understand.",
|
||||||
|
401: "The server could not verify that you are authorized to access the URL requested. You either supplied the wrong credentials (e.g. a bad password), or your browser doesn't understand how to supply the credentials required.",
|
||||||
|
403: "You don't have the permission to access the requested resource. It is either read-protected or not readable by the server.",
|
||||||
|
404: "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.",
|
||||||
|
405: "The method is not allowed for the requested URL.",
|
||||||
|
406: "The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.",
|
||||||
|
413: "The data value transmitted exceeds the capacity limit.",
|
||||||
|
414: "The length of the requested URL exceeds the capacity limit for this server. The request cannot be processed.",
|
||||||
|
415: "The server does not support the media type transmitted in the request.",
|
||||||
|
418: "This server is a teapot, not a coffee machine",
|
||||||
|
429: "This user has exceeded an allotted request count. Try again later.",
|
||||||
|
500: "The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.",
|
||||||
|
}
|
||||||
|
|
||||||
|
ERROR_TITLES = {
|
||||||
|
400: "Bad Request",
|
||||||
|
401: "Unauthorized",
|
||||||
|
403: "Forbidden",
|
||||||
|
404: "Not Found",
|
||||||
|
405: "Method Not Allowed",
|
||||||
|
406: "Too Many Pings",
|
||||||
|
413: "Max image/audio size is 8 MB (16 MB for paypigs)",
|
||||||
|
414: "Max video size is 32 MB (64 MB for paypigs)",
|
||||||
|
415: "Unsupported Media Type",
|
||||||
|
417: "Image already exists!",
|
||||||
|
418: "WEBM videos are not allowed",
|
||||||
|
429: "Too Many Requests",
|
||||||
|
500: "Internal Server Error",
|
||||||
|
}
|
||||||
|
|
||||||
|
ERROR_MSGS = {
|
||||||
|
400: "That request was bad and you should feel bad.",
|
||||||
|
401: "What you're trying to do requires an account. I think. The original error message said something about a castle and I hated that.",
|
||||||
|
403: "YOU AREN'T WELCOME HERE GO AWAY",
|
||||||
|
404: "Someone typed something wrong and it was probably you, please do better.",
|
||||||
|
405: "idk how anyone gets this error but if you see this, remember to follow @carpathianflorist<BR>the original error text here talked about internet gremlins and wtf",
|
||||||
|
406: "Max limit is 5 for comments and 50 for posts",
|
||||||
|
413: "Max image/audio size is 8 MB (16 MB for paypigs)",
|
||||||
|
414: "Max video size is 32 MB (64 MB for paypigs)",
|
||||||
|
415: "Please upload only Image, Video, or Audio files!",
|
||||||
|
417: "Image already exists!",
|
||||||
|
418: "Please convert your video to MP4 and re-upload it!",
|
||||||
|
429: "go spam somewhere else nerd",
|
||||||
|
500: "Hiiiii it's carp! I think this error means that there's a timeout error. And I think that means something took too long to load so it decided not to work at all. If you keep seeing this on the same page <I>but not other pages</I>, then something is probably wrong with that specific function. It may not be called a function, but that sounds right to me. Anyway, ping me and I'll whine to someone smarter to fix it. Don't bother them. Thanks ily <3",
|
||||||
|
}
|
||||||
|
|
||||||
|
ERROR_MARSEYS = {
|
||||||
|
400: "marseybrainlet",
|
||||||
|
401: "marseydead",
|
||||||
|
403: "marseytroll",
|
||||||
|
404: "marseyconfused",
|
||||||
|
405: "marseyretard",
|
||||||
|
406: "marseyrage",
|
||||||
|
413: "marseyretard",
|
||||||
|
414: "marseychonker2",
|
||||||
|
415: "marseydetective",
|
||||||
|
418: "marseytea",
|
||||||
|
429: "marseyrentfree",
|
||||||
|
500: "marseycarp3",
|
||||||
|
}
|
||||||
|
|
||||||
@app.errorhandler(400)
|
@app.errorhandler(400)
|
||||||
def error_400(e):
|
@app.errorhandler(403)
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "400 Bad Request"}, 400
|
@app.errorhandler(404)
|
||||||
else: return render_template('errors/400.html', err=True), 400
|
@app.errorhandler(405)
|
||||||
|
@app.errorhandler(406)
|
||||||
|
@app.errorhandler(413)
|
||||||
|
@app.errorhandler(414)
|
||||||
|
@app.errorhandler(415)
|
||||||
|
@app.errorhandler(417)
|
||||||
|
@app.errorhandler(418)
|
||||||
|
@app.errorhandler(429)
|
||||||
|
def error(e):
|
||||||
|
title = ERROR_TITLES.get(e.code, str(e.code))
|
||||||
|
msg = ERROR_MSGS.get(e.code, str(e.code))
|
||||||
|
details = e.description
|
||||||
|
if WERKZEUG_ERROR_DESCRIPTIONS.get(e.code, None) == details:
|
||||||
|
details = None
|
||||||
|
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
||||||
|
return {"error": msg, "code": e.code, "details": details}
|
||||||
|
img = ERROR_MARSEYS.get(e.code, 'marseyl')
|
||||||
|
return render_template('errors/error.html', err=True, title=title, msg=msg, details=details, img=img), e.code
|
||||||
|
|
||||||
@app.errorhandler(401)
|
@app.errorhandler(401)
|
||||||
def error_401(e):
|
def error_401(e):
|
||||||
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "401 Not Authorized"}, 401
|
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "401 Not Authorized"}, 401
|
||||||
else:
|
else:
|
||||||
path = request.path
|
path = request.path
|
||||||
|
@ -23,75 +100,10 @@ def error_401(e):
|
||||||
if session.get("history"): return redirect(f"/login?redirect={argval}")
|
if session.get("history"): return redirect(f"/login?redirect={argval}")
|
||||||
else: return redirect(f"/signup?redirect={argval}")
|
else: return redirect(f"/signup?redirect={argval}")
|
||||||
|
|
||||||
@app.errorhandler(406)
|
|
||||||
def error_406(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
|
||||||
return {"error": "Too many pings: max limit is 5 for comments and 50 for posts"}, 406
|
|
||||||
else: return render_template('errors/406.html', err=True), 406
|
|
||||||
|
|
||||||
@app.errorhandler(403)
|
|
||||||
def error_403(e):
|
|
||||||
|
|
||||||
description = e.description
|
|
||||||
if description == "You don't have the permission to access the requested resource. It is either read-protected or not readable by the server.": description = ''
|
|
||||||
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
|
||||||
if not description: description = "403 Forbidden"
|
|
||||||
return {"error": description}, 403
|
|
||||||
else:
|
|
||||||
if not description: description = "YOU AREN'T WELCOME HERE GO AWAY"
|
|
||||||
return render_template('errors/403.html', description=description, err=True), 403
|
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(404)
|
|
||||||
def error_404(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "404 Not Found"}, 404
|
|
||||||
else: return render_template('errors/404.html', err=True), 404
|
|
||||||
|
|
||||||
@app.errorhandler(405)
|
|
||||||
def error_405(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "405 Method Not Allowed"}, 405
|
|
||||||
else: return render_template('errors/405.html', err=True), 405
|
|
||||||
|
|
||||||
@app.errorhandler(413)
|
|
||||||
def error_413(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
|
||||||
return {"error": "Max image/audio size is 8 MB (16 MB for paypigs)"}, 413
|
|
||||||
else: return render_template('errors/413.html', err=True), 413
|
|
||||||
|
|
||||||
@app.errorhandler(414)
|
|
||||||
def error_414(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
|
||||||
return {"error": "Max video size is 32 MB (64 MB for paypigs)"}, 414
|
|
||||||
else: return render_template('errors/414.html', err=True), 414
|
|
||||||
|
|
||||||
@app.errorhandler(415)
|
|
||||||
def error_415(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "Please upload only Image, Video, or Audio files!"}, 415
|
|
||||||
else: return render_template('errors/415.html', err=True), 415
|
|
||||||
|
|
||||||
@app.errorhandler(417)
|
|
||||||
def error_417(e):
|
|
||||||
return {"error": "Image already exists!"}, 417
|
|
||||||
|
|
||||||
@app.errorhandler(418)
|
|
||||||
def error_418(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"):
|
|
||||||
return {"error": "WEBM videos are not allowed, please convert your video to MP4 and re-upload it!"}, 418
|
|
||||||
else: return render_template('errors/418.html', err=True), 418
|
|
||||||
|
|
||||||
@app.errorhandler(429)
|
|
||||||
def error_429(e):
|
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "429 Too Many Requests"}, 429
|
|
||||||
else: return render_template('errors/429.html', err=True), 429
|
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(500)
|
@app.errorhandler(500)
|
||||||
def error_500(e):
|
def error_500(e):
|
||||||
g.db.rollback()
|
g.db.rollback()
|
||||||
|
return error(e)
|
||||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "500 Internal Server Error"}, 500
|
|
||||||
else: return render_template('errors/500.html', err=True), 500
|
|
||||||
|
|
||||||
|
|
||||||
@app.post("/allow_nsfw")
|
@app.post("/allow_nsfw")
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
{% extends "default.html" %}
|
||||||
|
|
||||||
|
{% block title %}
|
||||||
|
<title>{{code}} {{title}}</title>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block pagetype %}error-{{code}}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-10 col-md-5">
|
||||||
|
<div class="text-center px-3 my-8">
|
||||||
|
{% if img %}
|
||||||
|
<img alt=":#{{img}}:" loading="lazy" src="/e/{{img}}.webp">
|
||||||
|
{% endif %}
|
||||||
|
<pre></pre>
|
||||||
|
<h1 class="h5">{{code}} {{title}}</h1>
|
||||||
|
<p class="text-muted mb-5">{{msg}}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue