mirror of
https://git.pleroma.social/pleroma/relay.git
synced 2024-11-22 14:38:00 +00:00
replace HttpError
with blib.HttpError
This commit is contained in:
parent
ca70c1b293
commit
7f0a1a4e08
|
@ -12,6 +12,7 @@ from aiohttp.web import HTTPException, StaticResource
|
||||||
from aiohttp_swagger import setup_swagger
|
from aiohttp_swagger import setup_swagger
|
||||||
from aputils.signer import Signer
|
from aputils.signer import Signer
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
|
from blib import HttpError
|
||||||
from bsql import Database
|
from bsql import Database
|
||||||
from collections.abc import Awaitable, Callable
|
from collections.abc import Awaitable, Callable
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
@ -26,8 +27,7 @@ from .config import Config
|
||||||
from .database import Connection, get_database
|
from .database import Connection, get_database
|
||||||
from .database.schema import Instance
|
from .database.schema import Instance
|
||||||
from .http_client import HttpClient
|
from .http_client import HttpClient
|
||||||
from .misc import HttpError, Message, Response, check_open_port, get_resource
|
from .misc import JSON_PATHS, TOKEN_PATHS, Message, Response, check_open_port, get_resource
|
||||||
from .misc import JSON_PATHS, TOKEN_PATHS
|
|
||||||
from .template import Template
|
from .template import Template
|
||||||
from .views import VIEWS
|
from .views import VIEWS
|
||||||
from .views.api import handle_api_path
|
from .views.api import handle_api_path
|
||||||
|
@ -296,7 +296,7 @@ def format_error(request: web.Request, error: HttpError) -> Response:
|
||||||
app: Application = request.app # type: ignore[assignment]
|
app: Application = request.app # type: ignore[assignment]
|
||||||
|
|
||||||
if request.path.startswith(JSON_PATHS) or 'json' in request.headers.get('accept', ''):
|
if request.path.startswith(JSON_PATHS) or 'json' in request.headers.get('accept', ''):
|
||||||
return Response.new({'error': error.body}, error.status, ctype = 'json')
|
return Response.new({'error': error.message}, error.status, ctype = 'json')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
body = app.template.render('page/error.haml', request, e = error)
|
body = app.template.render('page/error.haml', request, e = error)
|
||||||
|
@ -338,21 +338,21 @@ async def handle_response_headers(
|
||||||
except HttpError as e:
|
except HttpError as e:
|
||||||
resp = format_error(request, e)
|
resp = format_error(request, e)
|
||||||
|
|
||||||
except HTTPException as ae:
|
except HTTPException as e:
|
||||||
if ae.status == 404:
|
if e.status == 404:
|
||||||
try:
|
try:
|
||||||
text = (ae.text or "").split(":")[1].strip()
|
text = (e.text or "").split(":")[1].strip()
|
||||||
|
|
||||||
except IndexError:
|
except IndexError:
|
||||||
text = ae.text or ""
|
text = e.text or ""
|
||||||
|
|
||||||
resp = format_error(request, HttpError(ae.status, text))
|
resp = format_error(request, HttpError(e.status, text))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
except Exception as e:
|
except Exception:
|
||||||
resp = format_error(request, HttpError(500, f'{type(e).__name__}: {str(e)}'))
|
resp = format_error(request, HttpError(500, 'Internal server error'))
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
resp.headers['Server'] = 'ActivityRelay'
|
resp.headers['Server'] = 'ActivityRelay'
|
||||||
|
|
|
@ -4,4 +4,4 @@
|
||||||
-block content
|
-block content
|
||||||
.section.error
|
.section.error
|
||||||
.title << HTTP Error {{e.status}}
|
.title << HTTP Error {{e.status}}
|
||||||
.body -> =e.body
|
.body -> =e.message
|
||||||
|
|
|
@ -134,17 +134,6 @@ def get_resource(path: str) -> Path:
|
||||||
return Path(str(pkgfiles('relay'))).joinpath(path)
|
return Path(str(pkgfiles('relay'))).joinpath(path)
|
||||||
|
|
||||||
|
|
||||||
class HttpError(Exception):
|
|
||||||
def __init__(self,
|
|
||||||
status: int,
|
|
||||||
body: str) -> None:
|
|
||||||
|
|
||||||
self.body: str = body
|
|
||||||
self.status: int = status
|
|
||||||
|
|
||||||
Exception.__init__(self, f"HTTP Error {status}: {body}")
|
|
||||||
|
|
||||||
|
|
||||||
class JsonEncoder(json.JSONEncoder):
|
class JsonEncoder(json.JSONEncoder):
|
||||||
def default(self, o: Any) -> str:
|
def default(self, o: Any) -> str:
|
||||||
if isinstance(o, datetime):
|
if isinstance(o, datetime):
|
||||||
|
|
|
@ -2,12 +2,13 @@ import aputils
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from aiohttp.web import Request
|
from aiohttp.web import Request
|
||||||
|
from blib import HttpError
|
||||||
|
|
||||||
from .base import View, register_route
|
from .base import View, register_route
|
||||||
|
|
||||||
from .. import logger as logging
|
from .. import logger as logging
|
||||||
from ..database import schema
|
from ..database import schema
|
||||||
from ..misc import HttpError, Message, Response
|
from ..misc import Message, Response
|
||||||
from ..processors import run_processor
|
from ..processors import run_processor
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,15 +94,19 @@ class ActorView(View):
|
||||||
try:
|
try:
|
||||||
self.actor = await self.client.get(self.signature.keyid, True, Message)
|
self.actor = await self.client.get(self.signature.keyid, True, Message)
|
||||||
|
|
||||||
except Exception:
|
except HttpError:
|
||||||
# ld signatures aren't handled atm, so just ignore it
|
# ld signatures aren't handled atm, so just ignore it
|
||||||
if self.message.type == 'Delete':
|
if self.message.type == 'Delete':
|
||||||
logging.verbose('Instance sent a delete which cannot be handled')
|
logging.verbose('Instance sent a delete which cannot be handled')
|
||||||
raise HttpError(202, '')
|
raise HttpError(202, '')
|
||||||
|
|
||||||
logging.verbose(f'Failed to fetch actor: {self.signature.keyid}')
|
logging.verbose('Failed to fetch actor: %s', self.signature.keyid)
|
||||||
raise HttpError(400, 'failed to fetch actor')
|
raise HttpError(400, 'failed to fetch actor')
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
raise HttpError(500, 'unexpected error when fetching actor')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.signer = self.actor.signer
|
self.signer = self.actor.signer
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import traceback
|
||||||
|
|
||||||
from aiohttp.web import Request, middleware
|
from aiohttp.web import Request, middleware
|
||||||
from argon2.exceptions import VerifyMismatchError
|
from argon2.exceptions import VerifyMismatchError
|
||||||
from blib import convert_to_boolean
|
from blib import HttpError, convert_to_boolean
|
||||||
from collections.abc import Awaitable, Callable, Sequence
|
from collections.abc import Awaitable, Callable, Sequence
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ from .base import View, register_route
|
||||||
|
|
||||||
from .. import __version__
|
from .. import __version__
|
||||||
from ..database import ConfigData, schema
|
from ..database import ConfigData, schema
|
||||||
from ..misc import HttpError, Message, Response, boolean
|
from ..misc import Message, Response, boolean
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_REDIRECT: str = 'urn:ietf:wg:oauth:2.0:oob'
|
DEFAULT_REDIRECT: str = 'urn:ietf:wg:oauth:2.0:oob'
|
||||||
|
@ -324,7 +324,7 @@ class Inbox(View):
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
raise HttpError(500, 'Failed to fetch actor')
|
raise HttpError(500, 'Failed to fetch actor') from None
|
||||||
|
|
||||||
data['inbox'] = actor_data.shared_inbox
|
data['inbox'] = actor_data.shared_inbox
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ class RequestView(View):
|
||||||
instance = conn.put_request_response(data['domain'], boolean(data['accept']))
|
instance = conn.put_request_response(data['domain'], boolean(data['accept']))
|
||||||
|
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise HttpError(404, 'Request not found')
|
raise HttpError(404, 'Request not found') from None
|
||||||
|
|
||||||
message = Message.new_response(
|
message = Message.new_response(
|
||||||
host = self.config.domain,
|
host = self.config.domain,
|
||||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||||
from aiohttp.abc import AbstractView
|
from aiohttp.abc import AbstractView
|
||||||
from aiohttp.hdrs import METH_ALL as METHODS
|
from aiohttp.hdrs import METH_ALL as METHODS
|
||||||
from aiohttp.web import Request
|
from aiohttp.web import Request
|
||||||
|
from blib import HttpError
|
||||||
from bsql import Database
|
from bsql import Database
|
||||||
from collections.abc import Awaitable, Callable, Generator, Sequence, Mapping
|
from collections.abc import Awaitable, Callable, Generator, Sequence, Mapping
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
|
@ -13,7 +14,7 @@ from ..cache import Cache
|
||||||
from ..config import Config
|
from ..config import Config
|
||||||
from ..database import Connection
|
from ..database import Connection
|
||||||
from ..http_client import HttpClient
|
from ..http_client import HttpClient
|
||||||
from ..misc import HttpError, Response, get_app
|
from ..misc import Response, get_app
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Self
|
from typing import Self
|
||||||
|
@ -137,7 +138,7 @@ class View(AbstractView):
|
||||||
data[key] = post_data[key]
|
data[key] = post_data[key]
|
||||||
|
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
raise HttpError(400, f'Missing {str(e)} pararmeter')
|
raise HttpError(400, f'Missing {str(e)} pararmeter') from None
|
||||||
|
|
||||||
for key in optional:
|
for key in optional:
|
||||||
data[key] = post_data.get(key) # type: ignore[assignment]
|
data[key] = post_data.get(key) # type: ignore[assignment]
|
||||||
|
|
Loading…
Reference in a new issue