Skip to content

Commit 385b612

Browse files
committed
misc cleanups:
* add utils.bytes_to_lower_string * allow subscribing to all events via sogs.sub
1 parent 98ed125 commit 385b612

File tree

2 files changed

+31
-22
lines changed

2 files changed

+31
-22
lines changed

sogs/events.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from . import config
66
from . import model
7+
from . import utils
78

89
import json
910

@@ -25,26 +26,34 @@ def event_name_valid(eventname):
2526
return eventname.lower() in EVENTS
2627

2728

28-
def _handle_subscribe_request(msg):
29-
""" handle a request to subscribe to events as a bot"""
30-
parts = msg.dataviews()
31-
name = None
32-
if len(parts) == 1:
33-
name = parts[0].decode('ascii').lower()
34-
if name is None:
35-
raise Exception('no event name provided')
36-
if event_name_valid(name):
29+
def _sub_conn_to_event(name, conn):
30+
""" subscribe a connection to an event type """
31+
if not event_name_valid(name):
3732
raise Exception('invalid event name: {}'.format(name))
3833
pool = _pools.get(name)
3934
if msg.conn in pool:
4035
raise Exception('already subscribed to {}'.format(name))
41-
pool.append(msg.conn)
36+
pool.append(conn)
37+
38+
39+
def _handle_subscribe_request(msg):
40+
""" handle a request to subscribe to events as a bot"""
41+
for name in msg.dataviews():
42+
name = utils.bytes_to_lower_str(name)
43+
if name in ('all', '*'):
44+
# subscribe to all events
45+
for ev in EVENTS:
46+
_sub_conn_to_event(ev, msg.conn)
47+
return
48+
_sub_conn_to_event(name, msg.conn)
49+
else:
50+
raise Exception("no events selected")
4251

4352

4453
def _handle_find_room(metric, query, encode=json.dumps):
4554
""" find a room """
4655
if metric == 'id':
47-
room = model.Room(id=query)
56+
room = model.Room(id=int(query))
4857
elif metric == 'token':
4958
room = model.Room(token=query)
5059
else:
@@ -60,7 +69,7 @@ def _handle_find_room(metric, query, encode=json.dumps):
6069
def _handle_find_user(metric, query, encode=json.dumps):
6170
""" find a user """
6271
if metric == 'id':
63-
user = model.User(id=query)
72+
user = model.User(id=int(query))
6473
elif metric == 'pubkey':
6574
user = model.User(session_id=query)
6675
else:
@@ -71,20 +80,15 @@ def _handle_find_user(metric, query, encode=json.dumps):
7180
return encode(reply)
7281

7382

74-
def _decode_str(data):
75-
""" decode bytes to lowercase string """
76-
return data.decode('utf-8').lower()
77-
78-
7983
def _handle_find_request(msg):
8084
""" finds a user / room by id / token / pubkey """
8185
parts = msg.dataviews()
8286
if len(parts) != 3:
8387
raise Exception('3 arguments required: entity-kind, query-metric, query-value')
8488

85-
kind = _decode_str(parts[0])
86-
metric = _decode_str(parts[1])
87-
query = _decode_str(parts[2])
89+
kind = utils.bytes_to_lower_str(parts[0])
90+
metric = utils.bytes_to_lower_str(parts[1])
91+
query = utils.bytes_to_lower_str(parts[2])
8892

8993
_kinds = {'room': _handle_find_room, 'user': _handle_find_user}
9094

@@ -98,8 +102,8 @@ def _handle_mod_ban(msg):
98102
parts = msg.dataviews()
99103
if len(parts) < 2:
100104
raise Exception("Not enough arguments, need 2 arguments: user_id, room_id")
101-
room_id = int(_decode_str(parts[1]))
102-
user_id = int(_decode_str(parts[0]))
105+
room_id = int(utils.bytes_to_lower_str(parts[1]))
106+
user_id = int(utils.bytes_to_lower_str(parts[0]))
103107
room = model.Room(id=room_id)
104108
user = model.User(id=user_id)
105109
if not model.ban_user(None, room, user):

sogs/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ def message_body(data: bytes):
1515
return msg.body
1616

1717

18+
def bytes_to_lower_str(data):
19+
""" decode bytes to lowercase string """
20+
return data.decode('utf-8').lower()
21+
22+
1823
def encode_base64(data: bytes):
1924
return base64.b64encode(data).decode()
2025

0 commit comments

Comments
 (0)