GNServer 0.0.0.0.56__tar.gz → 0.0.0.0.58__tar.gz
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-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_app.py +29 -17
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_client.py +18 -2
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/models.py +8 -3
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer.egg-info/PKG-INFO +1 -1
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/PKG-INFO +1 -1
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/setup.py +1 -1
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/__init__.py +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_cors_resolver.py +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_crt.py +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_func_params_validation.py +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_routes.py +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer/_template_resolver.py +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer.egg-info/SOURCES.txt +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer.egg-info/dependency_links.txt +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer.egg-info/requires.txt +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/GNServer.egg-info/top_level.txt +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/LICENSE +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/GNServer/mmbConfig.json +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/LICENSE +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/MANIFEST.in +0 -0
- {gnserver-0.0.0.0.56 → gnserver-0.0.0.0.58}/setup.cfg +0 -0
@@ -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("[
|
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
|
-
|
234
|
-
|
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
|
-
|
348
|
-
|
349
|
-
|
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 =
|
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('
|
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.
|
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
|
|
@@ -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()
|
@@ -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
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|