Minor: control socket: move around ArgsUser stuff

このコミットが含まれているのは:
n9k 2022-08-02 04:49:49 +00:00
コミット 6ddab6c969
2個のファイルの変更31行の追加28行の削除

ファイルの表示

@ -3,9 +3,14 @@
import json import json
from anonstream.control.spec import Spec, NoParse, Ambiguous, Parsed from quart import current_app
from anonstream.control.spec import Spec, NoParse, Ambiguous, BadArgument, Parsed
from anonstream.control.spec.utils import get_item, startswith from anonstream.control.spec.utils import get_item, startswith
USERS_BY_TOKEN = current_app.users_by_token
USERS = current_app.users
class Str(Spec): class Str(Spec):
AS_ARG = False AS_ARG = False
@ -146,3 +151,26 @@ class ArgsJsonStringArray(ArgsJson):
f'bad argument at position {index} {obj_json!r}: ' f'bad argument at position {index} {obj_json!r}: '
f'could not decode json array of strings' f'could not decode json array of strings'
) )
class ArgsJsonTokenUser(ArgsJsonString):
def transform_obj(self, token):
try:
user = USERS_BY_TOKEN[token]
except KeyError:
raise BadArgument(f'no user with token {token!r}')
return user
class ArgsJsonHashUser(ArgsString):
def transform_string(self, token_hash):
for user in USERS:
if user['token_hash'] == token_hash:
break
else:
raise BadArgument(f'no user with token_hash {token_hash!r}')
return user
def ArgsUser(spec):
return Str({
'token': ArgsJsonTokenUser(spec),
'hash': ArgsJsonHashUser(spec),
})

ファイルの表示

@ -6,40 +6,15 @@ import json
from quart import current_app from quart import current_app
from anonstream.control.exceptions import CommandFailed from anonstream.control.exceptions import CommandFailed
from anonstream.control.spec import BadArgument from anonstream.control.spec.common import Str, End, ArgsInt, ArgsString, ArgsJson, ArgsJsonBoolean, ArgsJsonString, ArgsUser
from anonstream.control.spec.common import Str, End, ArgsInt, ArgsString, ArgsJson, ArgsJsonBoolean, ArgsJsonString from anonstream.control.spec.utils import json_dumps_contiguous
from anonstream.control.spec.utils import get_item, json_dumps_contiguous
from anonstream.utils.user import USER_WEBSOCKET_ATTRS from anonstream.utils.user import USER_WEBSOCKET_ATTRS
from anonstream.routes.wrappers import generate_and_add_user from anonstream.routes.wrappers import generate_and_add_user
from anonstream.wrappers import get_timestamp from anonstream.wrappers import get_timestamp
USERS_BY_TOKEN = current_app.users_by_token USERS_BY_TOKEN = current_app.users_by_token
USERS = current_app.users
USERS_UPDATE_BUFFER = current_app.users_update_buffer USERS_UPDATE_BUFFER = current_app.users_update_buffer
class ArgsJsonTokenUser(ArgsJsonString):
def transform_obj(self, token):
try:
user = USERS_BY_TOKEN[token]
except KeyError:
raise BadArgument(f'no user with token {token!r}')
return user
class ArgsJsonHashUser(ArgsString):
def transform_string(self, token_hash):
for user in USERS:
if user['token_hash'] == token_hash:
break
else:
raise BadArgument(f'no user with token_hash {token_hash!r}')
return user
def ArgsUser(spec):
return Str({
'token': ArgsJsonTokenUser(spec),
'hash': ArgsJsonHashUser(spec),
})
async def cmd_user_help(): async def cmd_user_help():
normal = ['user', 'help'] normal = ['user', 'help']
response = ( response = (