diff --git a/app/blueprints/api/__init__.py b/app/blueprints/api/__init__.py index 3f90c4b6..1ca79619 100644 --- a/app/blueprints/api/__init__.py +++ b/app/blueprints/api/__init__.py @@ -14,8 +14,36 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import json from flask import Blueprint +from .support import error + bp = Blueprint("api", __name__) + from . import tokens, endpoints + + +@bp.errorhandler(400) +@bp.errorhandler(401) +@bp.errorhandler(403) +@bp.errorhandler(404) +def handle_exception(e): + """Return JSON instead of HTML for HTTP errors.""" + # start with the correct headers and status code from the error + response = e.get_response() + # replace the body with JSON + response.data = json.dumps({ + "success": False, + "code": e.code, + "name": e.name, + "description": e.description, + }) + response.content_type = "application/json" + return response + + +@bp.route("/api/") +def page_not_found(path): + error(404, "Endpoint or method not found")