Debug: print colorized tag/token_hash/token

このコミットが含まれているのは:
n9k 2022-06-23 03:28:32 +00:00
コミット 2a16f6a835
4個のファイルの変更25行の追加13行の削除

ファイルの表示

@ -14,6 +14,7 @@ from anonstream.user import watching, create_eyes, renew_eyes, EyesException, Ra
from anonstream.routes.wrappers import with_user_from, auth_required, clean_cache_headers, generate_and_add_user from anonstream.routes.wrappers import with_user_from, auth_required, clean_cache_headers, generate_and_add_user
from anonstream.helpers.captcha import check_captcha_digest, Answer from anonstream.helpers.captcha import check_captcha_digest, Answer
from anonstream.utils.security import generate_csp from anonstream.utils.security import generate_csp
from anonstream.utils.user import identifying_string
CAPTCHA_SIGNER = current_app.captcha_signer CAPTCHA_SIGNER = current_app.captcha_signer
STATIC_DIRECTORY = current_app.root_path / 'static' STATIC_DIRECTORY = current_app.root_path / 'static'
@ -71,9 +72,9 @@ async def stream(timestamp, user):
raise StopSendingSegments( raise StopSendingSegments(
f'eyes {eyes_id} not allowed: {e!r}' f'eyes {eyes_id} not allowed: {e!r}'
) from e ) from e
print(f'{uri}: {eyes_id}~{user["token"]}') print(f'{uri}: \033[37m{eyes_id}\033[0m~{identifying_string(user)}')
watching(user) watching(user)
generator = segments(segment_read_hook, token=user['token']) generator = segments(segment_read_hook, token=f'\033[35m{user["token"]}\033[0m')
response = await make_response(generator) response = await make_response(generator)
response.headers['Content-Type'] = 'video/mp4' response.headers['Content-Type'] = 'video/mp4'
response.timeout = None response.timeout = None

ファイルの表示

@ -91,7 +91,7 @@ async def get_segment_uris(token):
except Offline as e: except Offline as e:
reason, *_ = e.args reason, *_ = e.args
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'stream went offline before we could find any segments ({reason})' f'stream went offline before we could find any segments ({reason})'
) )
return return
@ -109,7 +109,7 @@ async def get_segment_uris(token):
except Offline as e: except Offline as e:
reason, *_ = e.args reason, *_ = e.args
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'stream went offline while looking for the ' f'stream went offline while looking for the '
f'segment following {segment.uri!r} ({reason})' f'segment following {segment.uri!r} ({reason})'
) )
@ -120,7 +120,7 @@ async def get_segment_uris(token):
break break
elif time.monotonic() - t0 >= CONFIG['SEGMENT_SEARCH_TIMEOUT']: elif time.monotonic() - t0 >= CONFIG['SEGMENT_SEARCH_TIMEOUT']:
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'timed out looking for the segment following ' f'timed out looking for the segment following '
f'{segment.uri!r} ' f'{segment.uri!r} '
f'(timeout={CONFIG["SEGMENT_SEARCH_TIMEOUT"]}s)' f'(timeout={CONFIG["SEGMENT_SEARCH_TIMEOUT"]}s)'
@ -138,15 +138,15 @@ def path_for(uri):
return path return path
async def segments(segment_read_hook=lambda uri: None, token=None): async def segments(segment_read_hook=lambda uri: None, token=None):
print(f'[debug @ {time.time():.3f}: {token=}] entering segment generator') print(f'[debug @ {time.time():.3f}: token={token}] entering segment generator')
async for uri in get_segment_uris(token): async for uri in get_segment_uris(token):
#print(f'[debug @ {time.time():.3f}: {token=}] {uri=}') #print(f'[debug @ {time.time():.3f}: token={token}] {uri=}')
try: try:
path = path_for(uri) path = path_for(uri)
except UnsafePath as e: except UnsafePath as e:
unsafe_path, *_ = e.args unsafe_path, *_ = e.args
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'segment {uri=} has {unsafe_path=}' f'segment {uri=} has {unsafe_path=}'
) )
break break
@ -156,7 +156,7 @@ async def segments(segment_read_hook=lambda uri: None, token=None):
except StopSendingSegments as e: except StopSendingSegments as e:
reason, *_ = e.args reason, *_ = e.args
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'told to stop sending segments: {reason}' f'told to stop sending segments: {reason}'
) )
break break
@ -166,14 +166,14 @@ async def segments(segment_read_hook=lambda uri: None, token=None):
yield chunk yield chunk
except FileNotFoundError: except FileNotFoundError:
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'segment {uri=} at {path=} unexpectedly does not exist' f'segment {uri=} at {path=} unexpectedly does not exist'
) )
break break
except OSError as e: except OSError as e:
print( print(
f'[debug @ {time.time():.3f}: {token=}] ' f'[debug @ {time.time():.3f}: token={token}] '
f'segment {uri=} at {path=} cannot be read: {e}' f'segment {uri=} at {path=} cannot be read: {e}'
) )
break break
print(f'[debug @ {time.time():.3f}: {token=}] exiting segment generator') print(f'[debug @ {time.time():.3f}: token={token}] exiting segment generator')

ファイルの表示

@ -50,3 +50,13 @@ def get_user_for_websocket(user):
**{key: user[key] for key in USER_WEBSOCKET_ATTRS}, **{key: user[key] for key in USER_WEBSOCKET_ATTRS},
'watching': trilean(user['presence']), 'watching': trilean(user['presence']),
} }
def identifying_string(user, ansi=True):
tag = user['tag']
token_hash = f'{user["token_hash"][:4]}..'
token = user['token']
if ansi:
tag = f'\033[36m{tag}\033[0m'
token_hash = f'\033[32m{token_hash}\033[0m'
token = f'\033[35m{token}\033[0m'
return '/'.join((tag, token_hash, token))

ファイルの表示

@ -12,6 +12,7 @@ from anonstream.chat import get_all_messages_for_websocket, add_chat_message, Re
from anonstream.user import get_all_users_for_websocket, see, reading, verify, deverify, BadCaptcha, try_change_appearance from anonstream.user import get_all_users_for_websocket, see, reading, verify, deverify, BadCaptcha, try_change_appearance
from anonstream.wrappers import with_timestamp from anonstream.wrappers import with_timestamp
from anonstream.utils.chat import generate_nonce from anonstream.utils.chat import generate_nonce
from anonstream.utils.user import identifying_string
from anonstream.utils.websocket import parse_websocket_data, Malformed, WS from anonstream.utils.websocket import parse_websocket_data, Malformed, WS
CONFIG = current_app.config CONFIG = current_app.config
@ -74,7 +75,7 @@ async def websocket_inbound(queue, user):
@with_timestamp() @with_timestamp()
def handle_inbound_pong(timestamp, queue, user): def handle_inbound_pong(timestamp, queue, user):
print(f'[pong] {user["token"]}') print(f'[pong] {identifying_string(user)}')
reading(user, timestamp=timestamp) reading(user, timestamp=timestamp)
user['websockets'][queue] = timestamp user['websockets'][queue] = timestamp
return None return None