mirror of https://gitlab.com/litecord/litecord.git
all: misc fixes
- gateway.websocket: fix etf dict decode - auth: better token parsing - auth: fix new_discrim calc - channel.messages: call _dm_pre_dispatch on get_messages - channels: fix get_pins - guilds: make sure guild owner has guild everyone role - invites: replace sub_guild to sub
This commit is contained in:
parent
2b1f9489b7
commit
378809bdd6
|
|
@ -13,7 +13,11 @@ log = Logger(__name__)
|
|||
|
||||
async def raw_token_check(token, db=None):
|
||||
db = db or app.db
|
||||
user_id, _hmac = token.split('.')
|
||||
|
||||
# just try by fragments instead of
|
||||
# unpacking
|
||||
fragments = token.split('.')
|
||||
user_id = fragments[0]
|
||||
|
||||
try:
|
||||
user_id = base64.b64decode(user_id.encode())
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ async def register():
|
|||
|
||||
new_id = get_snowflake()
|
||||
|
||||
new_discrim = str(random.randint(1, 9999))
|
||||
new_discrim = random.randint(1, 9999)
|
||||
new_discrim = '%04d' % new_discrim
|
||||
|
||||
pwd_hash = await hash_data(password)
|
||||
|
|
|
|||
|
|
@ -51,7 +51,13 @@ async def get_messages(channel_id):
|
|||
user_id = await token_check()
|
||||
|
||||
# TODO: check READ_MESSAGE_HISTORY permission
|
||||
await channel_check(user_id, channel_id)
|
||||
ctype, peer_id = await channel_check(user_id, channel_id)
|
||||
|
||||
if ctype == ChannelType.DM:
|
||||
# make sure both parties will be subbed
|
||||
# to a dm
|
||||
await _dm_pre_dispatch(channel_id, user_id)
|
||||
await _dm_pre_dispatch(channel_id, peer_id)
|
||||
|
||||
limit = extract_limit(request, 50)
|
||||
|
||||
|
|
@ -166,6 +172,7 @@ async def create_message(channel_id):
|
|||
|
||||
if ctype == ChannelType.DM:
|
||||
# guild id here is the peer's ID.
|
||||
await _dm_pre_dispatch(channel_id, user_id)
|
||||
await _dm_pre_dispatch(channel_id, guild_id)
|
||||
|
||||
await app.dispatcher.dispatch('channel', channel_id,
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ async def get_pins(channel_id):
|
|||
if message is not None:
|
||||
res.append(message)
|
||||
|
||||
return jsonify(message)
|
||||
return jsonify(res)
|
||||
|
||||
|
||||
@bp.route('/<int:channel_id>/pins/<int:message_id>', methods=['PUT'])
|
||||
|
|
|
|||
|
|
@ -120,6 +120,12 @@ async def create_guild():
|
|||
VALUES ($1, $2, $3, $4, $5)
|
||||
""", guild_id, guild_id, '@everyone', 0, DEFAULT_EVERYONE_PERMS)
|
||||
|
||||
# add the @everyone role to the guild creator
|
||||
await app.db.execute("""
|
||||
INSERT INTO member_roles (user_id, guild_id, role_id)
|
||||
VALUES ($1, $2, $3)
|
||||
""", user_id, guild_id, guild_id)
|
||||
|
||||
# create a single #general channel.
|
||||
general_id = get_snowflake()
|
||||
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ async def use_invite(invite_code):
|
|||
})
|
||||
|
||||
# subscribe new member to guild, so they get events n stuff
|
||||
app.dispatcher.sub_guild(guild_id, user_id)
|
||||
await app.dispatcher.sub('guild', guild_id, user_id)
|
||||
|
||||
# tell the new member that theres the guild it just joined.
|
||||
# we use dispatch_user_guild so that we send the GUILD_CREATE
|
||||
|
|
|
|||
|
|
@ -44,8 +44,38 @@ def encode_etf(payload) -> str:
|
|||
return earl.pack(payload)
|
||||
|
||||
|
||||
def _etf_decode_dict(data):
|
||||
# NOTE: this is a very slow implementation to
|
||||
# decode the dictionary.
|
||||
|
||||
if isinstance(data, bytes):
|
||||
return data.decode()
|
||||
|
||||
if not isinstance(data, dict):
|
||||
return data
|
||||
|
||||
_copy = dict(data)
|
||||
result = {}
|
||||
|
||||
for key in _copy.keys():
|
||||
# assuming key is bytes rn.
|
||||
new_k = key.decode()
|
||||
|
||||
# maybe nested dicts, so...
|
||||
result[new_k] = _etf_decode_dict(data[key])
|
||||
|
||||
return result
|
||||
|
||||
def decode_etf(data: bytes):
|
||||
return earl.unpack(data)
|
||||
res = earl.unpack(data)
|
||||
|
||||
if isinstance(res, bytes):
|
||||
return data.decode()
|
||||
|
||||
if isinstance(res, dict):
|
||||
return _etf_decode_dict(res)
|
||||
|
||||
return res
|
||||
|
||||
|
||||
class GatewayWebsocket:
|
||||
|
|
|
|||
|
|
@ -173,6 +173,10 @@ class Storage:
|
|||
return {
|
||||
'user': await self.get_user(member_id),
|
||||
'nick': row['nickname'],
|
||||
|
||||
# we don't send the @everyone role's id to
|
||||
# the user since it is known that everyone has
|
||||
# that role.
|
||||
'roles': [r['role_id'] for r in roles],
|
||||
'joined_at': row['joined_at'].isoformat(),
|
||||
'deaf': row['deafened'],
|
||||
|
|
|
|||
Loading…
Reference in New Issue