forked from MarseyWorld/MarseyWorld
rework errors
parent
0ba14cb771
commit
fd25809cac
|
@ -1,19 +1,96 @@
|
|||
from files.helpers.wrappers import *
|
||||
from flask import *
|
||||
from werkzeug.exceptions import HTTPException
|
||||
from urllib.parse import quote, urlencode
|
||||
import time
|
||||
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)
|
||||
def error_400(e):
|
||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "400 Bad Request"}, 400
|
||||
else: return render_template('errors/400.html', err=True), 400
|
||||
@app.errorhandler(403)
|
||||
@app.errorhandler(404)
|
||||
@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)
|
||||
def error_401(e):
|
||||
|
||||
if request.headers.get("Authorization") or request.headers.get("xhr"): return {"error": "401 Not Authorized"}, 401
|
||||
else:
|
||||
path = request.path
|
||||
|
@ -23,75 +100,10 @@ def error_401(e):
|
|||
if session.get("history"): return redirect(f"/login?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)
|
||||
def error_500(e):
|
||||
g.db.rollback()
|
||||
|
||||
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
|
||||
return error(e)
|
||||
|
||||
|
||||
@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