Загрузка данных
1 """Kakao session server"""
2
3 import asyncio
4 import base64
5 import json
6 import logging
7 import re
8 import time
9 import zlib
10
11 try:
12 from websockets.asyncio.server import serve
13 except ImportError:
14 try:
15 from websockets.server import serve
16 except ImportError:
17 from websockets import serve
18 from websockets.exceptions import ConnectionClosed
19
20 logging.basicConfig(format='%(message)s', level=logging.DEBUG)
21
22
23 async def handler(websocket):
24 prereq = re.search('prereq=(.*)', websocket.request.path).group(1)
25 prereq = base64.urlsafe_b64decode(prereq)
26 prereq = zlib.decompress(prereq)
27 prereq = json.loads(prereq)
28 requestUri = prereq[0]
29 header = json.dumps(
30 {
31 'txNo': prereq[1]['txNo']
32 },
33 separators=(',', ':')
34 )
35 body = json.dumps(
36 {
37 'status': 200,
38 'desc': 'success',
39 'content': {
40 'player': {
41 'playerId': '900000000000',
42 },
43 'zat': 'zat',
44 'zatExpiryTime': int(time.time()*1000) + 86_400_000,
45 }
46 },
47 separators=(',', ':')
48 )
49 await websocket.send(f'["{requestUri}",{header},{body}]')
50
51 try:
52 async for message in websocket:
53 print(message, flush=True)
54
55 try:
56 request = json.loads(message)
57 request_uri = request[0]
58 if len(request) < 3:
59 await websocket.send(message)
60 continue
61
62 tx_no = request[1].get('txNo', 0)
63 res_header = json.dumps({'txNo': tx_no}, separators=(',', ':'))
64
65 if request_uri == 'service/v3/log/writeSdkBasicLog':
66 res_body = json.dumps({'status': 200, 'desc': 'success', 'content': {}}, separators=(',', ':'))
67 await websocket.send(f'["{request_uri}",{res_header},{res_body}]')
68 elif request_uri == 'v2/user/me':
69 res_body = json.dumps(
70 {
71 'status': 200,
72 'desc': 'success',
73 'content': {
74 'id': 1000000000,
75 'connected_at': '2000-01-01T00:00:00Z',
76 'has_signed_up': True,
77 'properties': {'nickname': 'KRdori'},
78 'kakao_account': {
79 'profile': {'nickname': 'KRdori'},
80 'service_user_id': 100000000000000000,
81 },
82 },
83 },
84 separators=(',', ':'),
85 )
86 await websocket.send(f'["{request_uri}",{res_header},{res_body}]')
87 else:
88 await websocket.send(message)
89 except Exception as e:
90 print(f"Error handling message: {e}", flush=True)
91 await websocket.send(message)
92
93 except ConnectionClosed:
94 pass
95
96
97 async def main(port):
98 async with serve(
99 handler,
100 '',
101 port,
102 ssl=None,
103 compression=None,
104 ):
105 print(f'Running session server on port {port}...')
106 await asyncio.get_running_loop().create_future()
107
108
109 if __name__ == '__main__':
110 asyncio.run(main(8481))
~/krdori-v2 $