Allowedness: check in `with_user_from` wrapper

このコミットが含まれているのは:
n9k 2022-06-25 03:45:54 +00:00
コミット 8ab206d3c6
1個のファイルの変更14行の追加1行の削除

ファイルの表示

@ -13,6 +13,7 @@ from werkzeug.exceptions import BadRequest, Unauthorized, Forbidden
from werkzeug.security import check_password_hash from werkzeug.security import check_password_hash
from anonstream.broadcast import broadcast from anonstream.broadcast import broadcast
from anonstream.user import ensure_allowedness, Blacklisted, SecretClub
from anonstream.helpers.user import generate_user from anonstream.helpers.user import generate_user
from anonstream.utils.user import generate_token, Presence from anonstream.utils.user import generate_token, Presence
from anonstream.wrappers import get_timestamp from anonstream.wrappers import get_timestamp
@ -86,7 +87,7 @@ def generate_and_add_user(
USERS_UPDATE_BUFFER.add(token) USERS_UPDATE_BUFFER.add(token)
return user return user
def with_user_from(context, fallback_to_token=False): def with_user_from(context, fallback_to_token=False, ignore_allowedness=False):
def with_user_from_context(f): def with_user_from_context(f):
@wraps(f) @wraps(f)
async def wrapper(*args, **kwargs): async def wrapper(*args, **kwargs):
@ -134,6 +135,8 @@ def with_user_from(context, fallback_to_token=False):
if user is not None: if user is not None:
user['last']['seen'] = timestamp user['last']['seen'] = timestamp
user['headers'] = tuple(context.headers) user['headers'] = tuple(context.headers)
if not ignore_allowedness:
assert_allowedness(timestamp, user)
response = await f(timestamp, user, *args, **kwargs) response = await f(timestamp, user, *args, **kwargs)
elif fallback_to_token: elif fallback_to_token:
#assert not broadcaster #assert not broadcaster
@ -156,6 +159,8 @@ def with_user_from(context, fallback_to_token=False):
broadcaster, broadcaster,
headers=tuple(context.headers), headers=tuple(context.headers),
) )
if not ignore_allowedness:
assert_allowedness(timestamp, user)
response = await f(timestamp, user, *args, **kwargs) response = await f(timestamp, user, *args, **kwargs)
# Set cookie # Set cookie
@ -207,3 +212,11 @@ def clean_cache_headers(f):
return response return response
return wrapper return wrapper
def assert_allowedness(timestamp, user):
try:
ensure_allowedness(user, timestamp=timestamp)
except Blacklisted as e:
raise Forbidden('You have been blacklisted.')
except SecretClub as e:
raise Forbidden('You have not been whitelisted.')