GNServer 0.0.0.0.58__py3-none-any.whl → 0.0.0.0.60__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/__init__.py CHANGED
@@ -33,10 +33,26 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
33
33
  DEALINGS IN THE SOFTWARE.
34
34
  """
35
35
 
36
+ __all__ = [
37
+ 'App',
38
+ 'Url',
39
+ 'GNRequest',
40
+ 'GNResponse',
41
+ 'CommandObject',
42
+ 'CORSObject',
43
+ 'FileObject',
44
+ 'TemplateObject',
45
+ 'GNTransportProtocol',
46
+ 'AsyncClient',
47
+ 'response'
48
+ ]
49
+
50
+
36
51
  from ._app import App
37
52
 
38
53
  from gnobjects.net.objects import Url, GNRequest, GNResponse, CommandObject, CORSObject, FileObject, TemplateObject, GNTransportProtocol
39
- from gnobjects.net.objects import AllGNFastCommands as responses
54
+ from gnobjects.net.objects import AllGNFastCommands as response
40
55
 
56
+ responses = response
41
57
 
42
58
  from ._client import AsyncClient
GNServer/_app.py CHANGED
@@ -249,6 +249,8 @@ class App:
249
249
  return r.handler(**kw)
250
250
 
251
251
  result = await r.handler(**kw)
252
+ if result is None:
253
+ result = AllGNFastCommands.ok()
252
254
  if isinstance(result, GNResponse):
253
255
  if r.cors is None:
254
256
  if result._cors is None:
@@ -359,7 +361,7 @@ class App:
359
361
  raise Exception('Не удалось расшифровать от KDC')
360
362
 
361
363
  request.stream_id = stream_id # type: ignore
362
- logger.debug(f'Request: {request.method} {request.url}')
364
+ logger.debug(f'[<] Request: {request.method} {request.url}')
363
365
  asyncio.create_task(self._handle_request(request, mode))
364
366
 
365
367
  self._buffer.pop(event.stream_id, None)
@@ -457,7 +459,7 @@ class App:
457
459
  await response.assembly()
458
460
 
459
461
 
460
- logger.debug(f'Response: {request.method} {request.url} -> {response.command} {response.payload if len(str(response.payload)) < 256 else ''}')
462
+ logger.debug(f'[>] Response: {request.method} {request.url} -> {response.command} {response.payload if len(str(response.payload)) < 256 else ''}')
461
463
 
462
464
  blob = response.serialize(mode)
463
465
 
@@ -542,4 +544,4 @@ class App:
542
544
  cert_path=cert_path,
543
545
  key_path=key_path,
544
546
  host=host
545
- )
547
+ )
GNServer/_client.py CHANGED
@@ -92,7 +92,7 @@ from .models import KDCObject
92
92
 
93
93
  import logging
94
94
 
95
- logger = logging.getLogger("GNAsyncClient")
95
+ logger = logging.getLogger("GNClient")
96
96
  logger.setLevel(logging.DEBUG)
97
97
 
98
98
  console = logging.StreamHandler(sys.stdout)
@@ -138,7 +138,7 @@ def devLog(request: GNRequest, point: str, level: int, log: str):
138
138
 
139
139
 
140
140
 
141
-
141
+ _sys_s_mode = 2
142
142
 
143
143
  async def chain_async(first_item, rest: AsyncIterable) -> AsyncGenerator:
144
144
  yield first_item
@@ -189,15 +189,11 @@ class AsyncClient:
189
189
 
190
190
  async def connect(self, request: GNRequest, restart_connection: bool = False, reconnect_wait: float = 10, keep_alive: bool = True) -> 'QuicClient':
191
191
  domain = request.url.hostname
192
- devLog(request, '1.2.1', 10, f'Connect to {domain}: restart_connection={restart_connection}, reconnect_wait={reconnect_wait}, keep_alive={keep_alive}')
193
192
  if not restart_connection and domain in self._active_connections:
194
193
  c = self._active_connections[domain]
195
- devLog(request, '1.2.2', 10, f'Connection to {domain} found: status={c.status}')
196
194
  if c.status == 'connecting':
197
- devLog(request, '1.2.3', 10, f'Waiting for connection to {domain}...')
198
195
  try:
199
196
  await asyncio.wait_for(c.connect_future, reconnect_wait)
200
- devLog(request, '1.2.4', 10, f'Connected to {domain}: status={c.status}')
201
197
  if c.status == 'active':
202
198
  return c
203
199
  elif c.status == 'connecting': # если очень долго подключаемся, то кидаем ошибку
@@ -206,7 +202,6 @@ class AsyncClient:
206
202
  elif c.status == 'disconnect':
207
203
  raise GNExceptions.ConnectionError.client.connection
208
204
  except:
209
- devLog(request, '1.2.5', 10, f'Connection to {domain} failed or timed out.')
210
205
  await self.disconnect(domain)
211
206
 
212
207
  else:
@@ -216,9 +211,7 @@ class AsyncClient:
216
211
  c.status = 'connecting'
217
212
  self._active_connections[domain] = c
218
213
 
219
- devLog(request, '1.2.6', 10, f'Connecting to {domain}...')
220
214
  data = await self.getDNS(domain, raise_errors=True)
221
- devLog(request, '1.2.7', 10, f'Got DNS for {domain}: {data}')
222
215
 
223
216
  data = data.split(':')
224
217
 
@@ -229,7 +222,6 @@ class AsyncClient:
229
222
 
230
223
  c._disconnect_signal = f # type: ignore
231
224
  c._domain = domain # type: ignore
232
- devLog(request, '1.2.8', 10, f'Creating QuicClient for {domain}...')
233
225
  await c.connect(data[0], int(data[1]), keep_alive=keep_alive)
234
226
  await c.connect_future
235
227
 
@@ -533,7 +525,7 @@ class RawQuicClient(QuicConnectionProtocol):
533
525
  del buf[:lenght]
534
526
 
535
527
 
536
- r = GNResponse.deserialize(data, 2)
528
+ r = GNResponse.deserialize(data, _sys_s_mode)
537
529
  handler.put_nowait(r)
538
530
  if event.end_stream:
539
531
  handler.put_nowait(None)
@@ -606,7 +598,7 @@ class RawQuicClient(QuicConnectionProtocol):
606
598
  await self.ensure_sys_stream()
607
599
  if response:
608
600
  msg_id = next(self._sys_id_gen)
609
- blob = request.serialize(2)
601
+ blob = request.serialize(_sys_s_mode)
610
602
  payload = (
611
603
  msg_id.to_bytes(8, "little") + len(blob).to_bytes(4, "little") + blob
612
604
  )
@@ -622,7 +614,7 @@ class RawQuicClient(QuicConnectionProtocol):
622
614
 
623
615
  async def request(self, request: Union[GNRequest, AsyncGenerator[GNRequest, Any]]):
624
616
  if isinstance(request, GNRequest):
625
- blob = request.serialize(2)
617
+ blob = request.serialize(_sys_s_mode)
626
618
 
627
619
  if self.quicClient._client._kdc is not None:
628
620
  blob = self.quicClient._client._kdc.encode(request.url.hostname, blob)
@@ -640,7 +632,7 @@ class RawQuicClient(QuicConnectionProtocol):
640
632
  data, domain = self.quicClient._client._kdc.decode(data)
641
633
 
642
634
  if data is not None:
643
- r = GNResponse.deserialize(data, 2)
635
+ r = GNResponse.deserialize(data, _sys_s_mode)
644
636
  return r
645
637
  else:
646
638
  return GNResponse('gn:client:0')
@@ -653,7 +645,7 @@ class RawQuicClient(QuicConnectionProtocol):
653
645
  _last = None
654
646
  async for req in request:
655
647
  _last = req
656
- blob = req.serialize(2)
648
+ blob = req.serialize(_sys_s_mode)
657
649
  self._enqueue(sid, blob, False, False)
658
650
 
659
651
 
@@ -664,7 +656,7 @@ class RawQuicClient(QuicConnectionProtocol):
664
656
 
665
657
  _last.setPayload(None)
666
658
  _last.setMethod('gn:end-stream')
667
- blob = _last.serialize(2)
659
+ blob = _last.serialize(_sys_s_mode)
668
660
  self._enqueue(sid, blob, True, False)
669
661
  self._schedule_flush()
670
662
 
@@ -677,7 +669,7 @@ class RawQuicClient(QuicConnectionProtocol):
677
669
 
678
670
  async def requestStream(self, request: Union[GNRequest, AsyncGenerator[GNRequest, Any]]) -> asyncio.Queue[GNResponse]:
679
671
  if isinstance(request, GNRequest):
680
- blob = request.serialize(2)
672
+ blob = request.serialize(_sys_s_mode)
681
673
  sid = self._quic.get_next_available_stream_id()
682
674
  self._enqueue(sid, blob, False, False)
683
675
  self._schedule_flush()
@@ -694,7 +686,7 @@ class RawQuicClient(QuicConnectionProtocol):
694
686
  _last = None
695
687
  async for req in request:
696
688
  _last = req
697
- blob = req.serialize(2)
689
+ blob = req.serialize(_sys_s_mode)
698
690
  self._enqueue(sid, blob, False, False)
699
691
 
700
692
 
@@ -705,7 +697,7 @@ class RawQuicClient(QuicConnectionProtocol):
705
697
 
706
698
  _last.setPayload(None)
707
699
  _last.setMethod('gn:end-stream')
708
- blob = _last.serialize(2)
700
+ blob = _last.serialize(_sys_s_mode)
709
701
  self._enqueue(sid, blob, True, False)
710
702
  self._schedule_flush()
711
703
 
GNServer/models.py CHANGED
@@ -28,11 +28,11 @@ class KDCObject:
28
28
 
29
29
  async def init(self, servers_keys: Optional[Dict[str, bytes]] = None): # type: ignore
30
30
 
31
-
32
- self._servers_keys[self._kdc_domain] = self._kdc_key
33
- h = hash3(self._kdc_domain.encode())
34
- self._servers_keys_hash_domain[h] = self._kdc_domain
35
- self._servers_keys_domain_hash[self._kdc_domain] = h
31
+ if self._kdc_domain not in self._servers_keys:
32
+ self._servers_keys[self._kdc_domain] = self._kdc_key
33
+ h = hash3(self._kdc_domain.encode())
34
+ self._servers_keys_hash_domain[h] = self._kdc_domain
35
+ self._servers_keys_domain_hash[self._kdc_domain] = h
36
36
 
37
37
 
38
38
  if servers_keys is not None:
@@ -76,14 +76,15 @@ class KDCObject:
76
76
  return request[:8] + sig + self._domain_hash + data
77
77
 
78
78
  def decode(self, response: bytes):
79
+ r = response
79
80
  if len(response) < 8+164+64:
80
- return response, None
81
+ return r, None
81
82
  h = response[:8]
82
83
  response = response[8:]
83
84
  sig, domain_h, data = response[:164], response[164:164+64], response[164+64:]
84
85
  if domain_h not in self._servers_keys_hash_domain:
85
86
  print(domain_h, 'not in', self._servers_keys_hash_domain)
86
- return response, None
87
+ return r, None
87
88
  d = self._servers_keys_hash_domain[domain_h]
88
89
  key = self._servers_keys[d]
89
90
  if not s2.verify(key, sig):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GNServer
3
- Version: 0.0.0.0.58
3
+ Version: 0.0.0.0.60
4
4
  Summary: GNServer
5
5
  Home-page: https://github.com/KeyisB/libs/tree/main/GNServer
6
6
  Author: KeyisB
@@ -0,0 +1,14 @@
1
+ GNServer/__init__.py,sha256=QmvIIE5RWIv040_l216aWtYuiIPtLasdsFbH0Fya2SI,1793
2
+ GNServer/_app.py,sha256=ffr4Ar-hV5m0ED-dGDQw5RYymmpUWF5Uzp3k2ZCV1wk,19414
3
+ GNServer/_client.py,sha256=Rp5INEVFfeD3rdm0tppjyGKqNT6yLe_STEVVNDJUpKw,32410
4
+ GNServer/_cors_resolver.py,sha256=aDxk4ItaEK-6vlDbkno8FJZEjczGEe8vkOui6_kz5-Y,5950
5
+ GNServer/_crt.py,sha256=SOmyX7zBiCY9EhVSekksQtBHgTIZVvdqNZ8Ni-E5Zow,1390
6
+ GNServer/_func_params_validation.py,sha256=pDXRzPVTdPnDHFMMmKd014SConBjFOuaLeJTY0vldlM,11412
7
+ GNServer/_routes.py,sha256=bJnmQ8uEhPVQgy2tTqE5TEIM8aFXV-lVI7c2nG0rQwk,3384
8
+ GNServer/_template_resolver.py,sha256=vdJYb_7PjIeTWq-Clr7jyj7QIvPBxplU7EqeOuMJ64c,1409
9
+ GNServer/models.py,sha256=QkDVNUvRhm3k_z1GSzQ8xGPcFhi9LbzWDrZnO33cHso,3289
10
+ gnserver-0.0.0.0.60.dist-info/licenses/LICENSE,sha256=_rN-sb3LemR3cKsEqjJRdXkdt7mME1mkW1BwWEn-zAw,1309
11
+ gnserver-0.0.0.0.60.dist-info/METADATA,sha256=poKkvSjNlosNVlL5sMaLV_AHnhDjf_gS60N76clzTIk,830
12
+ gnserver-0.0.0.0.60.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
+ gnserver-0.0.0.0.60.dist-info/top_level.txt,sha256=-UOUBuD4u7Qkb1o5PdcwyA3kx8xCH2lwy0tJHi26Wb4,9
14
+ gnserver-0.0.0.0.60.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- GNServer/__init__.py,sha256=6CMCZlkBO74PW8i8DAri5xz2fYM9EyPH8vdsLYBMmOo,1560
2
- GNServer/_app.py,sha256=bf5sXwimwgsSq51bK3YVq0e46p-0Hr9NY5wME2Okh54,19328
3
- GNServer/_client.py,sha256=ER5_UdzCIqRuQtIHlqFN-ecExsCPHMf2eumBQx0FquU,33063
4
- GNServer/_cors_resolver.py,sha256=aDxk4ItaEK-6vlDbkno8FJZEjczGEe8vkOui6_kz5-Y,5950
5
- GNServer/_crt.py,sha256=SOmyX7zBiCY9EhVSekksQtBHgTIZVvdqNZ8Ni-E5Zow,1390
6
- GNServer/_func_params_validation.py,sha256=pDXRzPVTdPnDHFMMmKd014SConBjFOuaLeJTY0vldlM,11412
7
- GNServer/_routes.py,sha256=bJnmQ8uEhPVQgy2tTqE5TEIM8aFXV-lVI7c2nG0rQwk,3384
8
- GNServer/_template_resolver.py,sha256=vdJYb_7PjIeTWq-Clr7jyj7QIvPBxplU7EqeOuMJ64c,1409
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,,