anonstream/anonstream/utils/users.py

36 行
1000 B
Python

import base64
import hashlib
import secrets
from collections import OrderedDict
from math import inf
def generate_token():
return secrets.token_hex(16)
def generate_token_hash(secret, token):
parts = secret + b'token-hash\0' + token.encode()
digest = hashlib.sha256(parts).digest()
return base64.b32encode(digest)[:26].lower().decode()
def generate_user(secret, token, broadcaster, timestamp):
return {
'token': token,
'token_hash': generate_token_hash(secret, token),
'broadcaster': broadcaster,
'name': None,
'color': '#c7007f',
'tripcode': None,
'notices': OrderedDict(),
'seen': {
'first': timestamp,
'last': timestamp,
},
'watching_last': -inf,
}
def user_for_websocket(user, include_token_hash=True):
keys = ['broadcaster', 'name', 'color', 'tripcode']
if include_token_hash:
keys.append('token_hash')
return {key: user[key] for key in keys}