GNServer 0.0.0.0.56__py3-none-any.whl → 0.0.0.0.58__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
GNServer/_app.py CHANGED
@@ -35,17 +35,14 @@ except ImportError:
35
35
  print("uvloop не установлен")
36
36
 
37
37
 
38
-
39
-
40
-
41
38
  import logging
42
39
 
43
40
  logger = logging.getLogger("GNServer")
44
41
  logger.setLevel(logging.DEBUG)
45
42
 
46
- console = logging.StreamHandler()
43
+ console = logging.StreamHandler(sys.stdout)
47
44
  console.setLevel(logging.DEBUG)
48
- console.setFormatter(logging.Formatter("[GNServer] %(name)s: %(levelname)s: %(message)s"))
45
+ console.setFormatter(logging.Formatter("[%(name)s] %(levelname)s: %(message)s"))
49
46
  logger.addHandler(console)
50
47
 
51
48
 
@@ -230,8 +227,11 @@ class App:
230
227
  for qn, qvals in request.url.params.items():
231
228
  if qn in kw:
232
229
  continue
233
- raw = qvals if len(qvals) > 1 else qvals[0]
234
- kw[qn] = _convert_value(raw, _ann(qn), str)
230
+ if isinstance(qvals, int):
231
+ kw[qn] = qvals
232
+ else:
233
+ raw = qvals if len(qvals) > 1 else qvals[0]
234
+ kw[qn] = _convert_value(raw, _ann(qn), str)
235
235
 
236
236
 
237
237
  params = set(sig.parameters.keys())
@@ -335,6 +335,8 @@ class App:
335
335
  logger.debug(f'Пакет отклонен: mode пакета {mode}. Разрешен 1, 2, 4')
336
336
  return
337
337
 
338
+ stream_id = event.stream_id
339
+
338
340
  if not stream: # если не стрим, то ждем конец quic стрима и запускаем обработку ответа
339
341
  if event.end_stream:
340
342
 
@@ -344,15 +346,21 @@ class App:
344
346
  domain = None
345
347
 
346
348
  if buf is not None:
347
- request = GNRequest.deserialize(buf, mode)
348
- if domain is not None:
349
- request.client._data['domain'] = domain
349
+ try:
350
+ request = GNRequest.deserialize(buf, mode)
351
+ if domain is not None:
352
+ request.client._data['domain'] = domain
353
+ except:
354
+ asyncio.create_task(self.sendRawResponse(stream_id, AllGNFastCommands.KDCDecryptRequestFailed().serialize(mode=mode)))
355
+ self._buffer.pop(event.stream_id, None)
356
+ return
357
+
350
358
  else:
351
359
  raise Exception('Не удалось расшифровать от KDC')
352
360
 
353
- request.stream_id = event.stream_id # type: ignore
361
+ request.stream_id = stream_id # type: ignore
362
+ logger.debug(f'Request: {request.method} {request.url}')
354
363
  asyncio.create_task(self._handle_request(request, mode))
355
- logger.debug(f'Отправлена задача разрешения пакета {request} route -> {request.route}')
356
364
 
357
365
  self._buffer.pop(event.stream_id, None)
358
366
  return
@@ -394,7 +402,6 @@ class App:
394
402
  queue.put_nowait(None)
395
403
  self._buffer.pop(event.stream_id)
396
404
  self._streams.pop(event.stream_id)
397
- logger.debug(f'Закрываем стрим [{event.stream_id}]')
398
405
  return
399
406
 
400
407
  queue.put_nowait(request)
@@ -436,12 +443,11 @@ class App:
436
443
  return
437
444
 
438
445
  await self.sendResponse(request, response, mode)
439
- logger.debug(f'Отправлен на сервер ответ -> {response.command} {response.payload if response.payload and len(str(response.payload)) < 200 else ''}')
440
446
  except Exception as e:
441
447
  if isinstance(e, (GNRequest, GNFastCommand)):
442
448
  await self.sendResponse(request, e, mode)
443
449
  else:
444
- logger.error('GNServer: error\n' + traceback.format_exc())
450
+ logger.error('InternalServerError:\n' + traceback.format_exc())
445
451
 
446
452
  await self.sendResponse(request, AllGNFastCommands.InternalServerError(), mode)
447
453
 
@@ -449,6 +455,9 @@ class App:
449
455
 
450
456
  async def sendResponse(self, request: GNRequest, response: GNResponse, mode: int, end_stream: bool = True):
451
457
  await response.assembly()
458
+
459
+
460
+ logger.debug(f'Response: {request.method} {request.url} -> {response.command} {response.payload if len(str(response.payload)) < 256 else ''}')
452
461
 
453
462
  blob = response.serialize(mode)
454
463
 
@@ -456,7 +465,10 @@ class App:
456
465
  if self._api._kdc is not None:
457
466
  blob = self._api._kdc.encode(request.client.domain, blob)
458
467
 
459
- self._quic.send_stream_data(request.stream_id, blob, end_stream=end_stream) # type: ignore
468
+ await self.sendRawResponse(request.stream_id, blob=blob, end_stream=end_stream)
469
+
470
+ async def sendRawResponse(self, stream_id: int, blob: bytes, end_stream: bool = True):
471
+ self._quic.send_stream_data(stream_id, blob, end_stream=end_stream) # type: ignore
460
472
  self.transmit()
461
473
 
462
474
  def run(
@@ -502,7 +514,7 @@ class App:
502
514
  if run is not None:
503
515
  await run()
504
516
 
505
-
517
+ logger.debug('Server startup completed')
506
518
  if wait:
507
519
  await asyncio.Event().wait()
508
520
 
GNServer/_client.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import os
2
+ import sys
2
3
  import time
3
4
  import httpx
4
5
  import asyncio
@@ -87,6 +88,21 @@ from ._crt import crt_client
87
88
  from .models import KDCObject
88
89
 
89
90
 
91
+
92
+
93
+ import logging
94
+
95
+ logger = logging.getLogger("GNAsyncClient")
96
+ logger.setLevel(logging.DEBUG)
97
+
98
+ console = logging.StreamHandler(sys.stdout)
99
+ console.setLevel(logging.DEBUG)
100
+ console.setFormatter(logging.Formatter("[%(name)s] %(levelname)s: %(message)s"))
101
+ logger.addHandler(console)
102
+
103
+
104
+
105
+
90
106
  _log_levels: dict[str, int] = {
91
107
  "NOTSET": 0,
92
108
  "DEBUG": 10,
@@ -263,8 +279,9 @@ class AsyncClient:
263
279
 
264
280
  for f in self.__request_callbacks.values():
265
281
  asyncio.create_task(f(request))
266
-
282
+ logger.debug(f'Request: {request.method} {request.url}')
267
283
  r = await c.asyncRequest(request)
284
+ logger.debug(f'Response: {request.method} {request.url} -> {r.command} {r.payload if len(str(r.payload)) < 256 else ''}')
268
285
 
269
286
  for f in self.__response_callbacks.values():
270
287
  asyncio.create_task(f(r))
@@ -574,7 +591,6 @@ class RawQuicClient(QuicConnectionProtocol):
574
591
  if q is None:
575
592
  break
576
593
  sid, blob, end_stream = q.popleft()
577
- print(f'Отправка стрима {sid}')
578
594
  self._quic.send_stream_data(sid, blob, end_stream=end_stream)
579
595
  self.transmit()
580
596
  self._activity()
GNServer/models.py CHANGED
@@ -39,18 +39,23 @@ class KDCObject:
39
39
  for i in self._requested_domains:
40
40
  if i in servers_keys:
41
41
  self._requested_domains.remove(i)
42
+ else:
43
+ servers_keys = {}
42
44
 
43
-
45
+ if len(self._requested_domains) > 0:
44
46
  payload = self._requested_domains
45
47
  r = await self._client.request(GNRequest('GET', Url(f'gn://{self._kdc_domain}/api/sys/server/keys'), payload=payload))
46
48
 
47
49
  if not r.command.ok:
50
+ print(f'ERROR: {r.command} {r.payload}')
48
51
  raise r
49
52
 
50
- servers_keys = r.payload
51
-
52
53
  if servers_keys is None:
54
+ print(f'ERROR: {r.command} {r.payload}')
53
55
  raise r
56
+
57
+ servers_keys.update(r.payload)
58
+
54
59
 
55
60
  self._servers_keys.update(servers_keys)
56
61
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GNServer
3
- Version: 0.0.0.0.56
3
+ Version: 0.0.0.0.58
4
4
  Summary: GNServer
5
5
  Home-page: https://github.com/KeyisB/libs/tree/main/GNServer
6
6
  Author: KeyisB
@@ -1,14 +1,14 @@
1
1
  GNServer/__init__.py,sha256=6CMCZlkBO74PW8i8DAri5xz2fYM9EyPH8vdsLYBMmOo,1560
2
- GNServer/_app.py,sha256=idWLogkGlb6lijUYMjkhViU6ZKMTbQxg7iNmY4uBif0,18782
3
- GNServer/_client.py,sha256=IEzben2zZfgpU9DhcnjB9uQLCInllZhdoLTZyM72ldA,32610
2
+ GNServer/_app.py,sha256=bf5sXwimwgsSq51bK3YVq0e46p-0Hr9NY5wME2Okh54,19328
3
+ GNServer/_client.py,sha256=ER5_UdzCIqRuQtIHlqFN-ecExsCPHMf2eumBQx0FquU,33063
4
4
  GNServer/_cors_resolver.py,sha256=aDxk4ItaEK-6vlDbkno8FJZEjczGEe8vkOui6_kz5-Y,5950
5
5
  GNServer/_crt.py,sha256=SOmyX7zBiCY9EhVSekksQtBHgTIZVvdqNZ8Ni-E5Zow,1390
6
6
  GNServer/_func_params_validation.py,sha256=pDXRzPVTdPnDHFMMmKd014SConBjFOuaLeJTY0vldlM,11412
7
7
  GNServer/_routes.py,sha256=bJnmQ8uEhPVQgy2tTqE5TEIM8aFXV-lVI7c2nG0rQwk,3384
8
8
  GNServer/_template_resolver.py,sha256=vdJYb_7PjIeTWq-Clr7jyj7QIvPBxplU7EqeOuMJ64c,1409
9
- GNServer/models.py,sha256=bWxUq98Rdyb2jUCm_iA7plEPOGeR5fPBAifftRRF0DM,3001
10
- gnserver-0.0.0.0.56.dist-info/licenses/LICENSE,sha256=_rN-sb3LemR3cKsEqjJRdXkdt7mME1mkW1BwWEn-zAw,1309
11
- gnserver-0.0.0.0.56.dist-info/METADATA,sha256=89q7I4m_rlkNn1SADvB8MOB99cTyLM7pLoC3MG6CgXE,830
12
- gnserver-0.0.0.0.56.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
- gnserver-0.0.0.0.56.dist-info/top_level.txt,sha256=-UOUBuD4u7Qkb1o5PdcwyA3kx8xCH2lwy0tJHi26Wb4,9
14
- gnserver-0.0.0.0.56.dist-info/RECORD,,
9
+ GNServer/models.py,sha256=CXBJR_g3clIKKaMJ_zsUFLEG0EBa3g_Ik10te7whd30,3211
10
+ gnserver-0.0.0.0.58.dist-info/licenses/LICENSE,sha256=_rN-sb3LemR3cKsEqjJRdXkdt7mME1mkW1BwWEn-zAw,1309
11
+ gnserver-0.0.0.0.58.dist-info/METADATA,sha256=JEfPPBj80TXU7D3ZtM8qpIYOJrbiba_VsAMImMsEl1Q,830
12
+ gnserver-0.0.0.0.58.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
+ gnserver-0.0.0.0.58.dist-info/top_level.txt,sha256=-UOUBuD4u7Qkb1o5PdcwyA3kx8xCH2lwy0tJHi26Wb4,9
14
+ gnserver-0.0.0.0.58.dist-info/RECORD,,