Загрузка данных


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 $