GNServer 0.0.0.0.61__tar.gz → 0.0.0.0.63__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.
Files changed (21) hide show
  1. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_app.py +35 -3
  2. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_client.py +17 -11
  3. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/models.py +9 -6
  4. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer.egg-info/PKG-INFO +1 -1
  5. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/PKG-INFO +1 -1
  6. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/setup.py +1 -1
  7. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/__init__.py +0 -0
  8. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_cors_resolver.py +0 -0
  9. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_crt.py +0 -0
  10. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_func_params_validation.py +0 -0
  11. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_routes.py +0 -0
  12. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer/_template_resolver.py +0 -0
  13. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer.egg-info/SOURCES.txt +0 -0
  14. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer.egg-info/dependency_links.txt +0 -0
  15. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer.egg-info/requires.txt +0 -0
  16. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/GNServer.egg-info/top_level.txt +0 -0
  17. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/LICENSE +0 -0
  18. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/GNServer/mmbConfig.json +0 -0
  19. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/LICENSE +0 -0
  20. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/MANIFEST.in +0 -0
  21. {gnserver-0.0.0.0.61 → gnserver-0.0.0.0.63}/setup.cfg +0 -0
@@ -18,14 +18,15 @@ from typing import Any, AsyncGenerator, Union
18
18
  from gnobjects.net.objects import GNRequest, GNResponse, FileObject, CORSObject, TemplateObject
19
19
  from gnobjects.net.fastcommands import AllGNFastCommands, GNFastCommand
20
20
 
21
+ from KeyisBTools.cryptography.bytes import userFriendly
21
22
 
22
23
  from ._func_params_validation import register_schema_by_key, validate_params_by_key
23
24
  from ._cors_resolver import resolve_cors
24
-
25
25
  from ._routes import Route, _compile_path, _ensure_async, _convert_value
26
-
27
26
  from .models import KDCObject
27
+ from ._client import AsyncClient
28
28
 
29
+ from pathlib import Path
29
30
 
30
31
  try:
31
32
  if not sys.platform.startswith("win"):
@@ -122,6 +123,8 @@ class App:
122
123
 
123
124
  self._kdc: Optional[KDCObject] = None
124
125
 
126
+ self.client = AsyncClient()
127
+
125
128
  def setKDC(self, kdc: KDCObject):
126
129
  self._kdc = kdc
127
130
 
@@ -487,21 +490,50 @@ class App:
487
490
  port: int,
488
491
  cert_path: str,
489
492
  key_path: str,
493
+ server_key: Optional[Union[str, Path]] = None,
490
494
  *,
491
495
  host: str = '0.0.0.0',
492
496
  idle_timeout: float = 20.0,
493
497
  wait: bool = True,
494
- run: Optional[Callable] = None
498
+ run: Optional[Callable] = None,
499
+ kdc_passive_key_sync_domains: List[str] = [],
500
+ kdc_active_key_synchronization: bool = True
495
501
  ):
496
502
  """
497
503
  # Запустить сервер
498
504
 
499
505
  Запускает сервер в главном процессе asyncio.run()
506
+
507
+ server_key: `:kdc.core:<...>:<...>:`
500
508
  """
501
509
 
502
510
  self.domain = domain
503
511
 
504
512
 
513
+ if server_key is not None:
514
+ if isinstance(server_key, Path):
515
+ server_key = server_key.read_text('utf-8')
516
+
517
+ if server_key[0] == ':' and server_key[0] == ':':
518
+ kdc_domain, dns_key, kdc_key = server_key.split(':')
519
+
520
+ dns_key = userFriendly.decode(dns_key)
521
+ kdc_key = userFriendly.decode(kdc_key)
522
+
523
+ kdc = KDCObject(self.domain, kdc_domain, kdc_key, kdc_passive_key_sync_domains, active_key_synchronization=kdc_active_key_synchronization)
524
+ self.setKDC(kdc)
525
+
526
+ if self.client._domain is None:
527
+ self.client._domain = domain
528
+ if self.client._dns_key is None:
529
+ self.client.setDNSkey(dns_key)
530
+
531
+
532
+
533
+
534
+
535
+
536
+
505
537
  self._init_sys_routes()
506
538
 
507
539
  cfg = QuicConfiguration(
@@ -161,20 +161,26 @@ class AsyncClient:
161
161
  self.__dns_client: Optional[AsyncClient] = None
162
162
  self._dns_cache: TTLDict = TTLDict()
163
163
 
164
- self.__domain = domain
164
+ self._domain = domain
165
165
 
166
166
  self._kdc: Optional[KDCObject] = None
167
167
 
168
+
168
169
  if server_key:
169
- if isinstance(server_key, bytes):
170
- self.__server_key = server_key
170
+ self.setDNSkey(server_key)
171
+
172
+
173
+ def setDNSkey(self, key: Union[bytes, str]):
174
+ if key:
175
+ if isinstance(key, bytes):
176
+ self._dns_key = key
171
177
  else:
172
- if os.path.exists(server_key):
173
- self.__server_key = open(server_key, 'rb').read()
178
+ if os.path.exists(key):
179
+ self._dns_key = open(key, 'rb').read()
174
180
  else:
175
- self.__server_key = userFriendly.decode(server_key)
181
+ self._dns_key = userFriendly.decode(key)
176
182
  else:
177
- self.__server_key = None
183
+ self._dns_key = None
178
184
 
179
185
  def setKDC(self, kdc: KDCObject):
180
186
  self._kdc = kdc
@@ -348,10 +354,10 @@ class AsyncClient:
348
354
  if self.__dns_client is None:
349
355
  self.__dns_client = AsyncClient()
350
356
 
351
- if self.__server_key is not None:
352
- s = s2.sign(self.__server_key)
353
- data = m1.encrypt(s, domain.encode(), serialize({'domain': domain}), hash(self.__server_key))
354
- payload = {'sign': {'alg': 'KeyisB-c-s-m1', 'data': s, 'domain': self.__domain}, 'data': data}
357
+ if self._dns_key is not None:
358
+ s = s2.sign(self._dns_key)
359
+ data = m1.encrypt(s, domain.encode(), serialize({'domain': domain}), hash(self._dns_key))
360
+ payload = {'sign': {'alg': 'KeyisB-c-s-m1', 'data': s, 'domain': self._domain}, 'data': data}
355
361
  else:
356
362
  payload = None
357
363
 
@@ -6,7 +6,7 @@ from KeyisBTools.cryptography import m1
6
6
  from ._app import GNRequest, GNResponse
7
7
  from gnobjects.net.objects import Url
8
8
 
9
- from KeyisBTools.cryptography.bytes import hash3
9
+ from KeyisBTools.cryptography.bytes import hash3, userFriendly
10
10
 
11
11
  class KDCObject:
12
12
  def __init__(self, domain: str, kdc_domain: str, kdc_key: bytes, requested_domains: List[str], active_key_synchronization: bool = True):
@@ -19,6 +19,7 @@ class KDCObject:
19
19
 
20
20
  from ._client import AsyncClient
21
21
  self._client = AsyncClient(domain)
22
+ self._client.setKDC(self)
22
23
 
23
24
  self._servers_keys: Dict[str, bytes] = {}
24
25
  self._servers_keys_hash_domain: Dict[bytes, str] = {}
@@ -36,9 +37,12 @@ class KDCObject:
36
37
  else:
37
38
  servers_keys = {}
38
39
 
40
+ self._servers_keys.update(servers_keys)
41
+
39
42
  if len(self._requested_domains) > 0:
40
43
  await self.requestKDC(self._requested_domains) # type: ignore
41
-
44
+ else:
45
+ self._update()
42
46
 
43
47
  def _update(self):
44
48
  for domain in self._servers_keys.keys():
@@ -70,7 +74,7 @@ class KDCObject:
70
74
 
71
75
  async def encode(self, domain: str, request: bytes):
72
76
  if domain not in self._servers_keys:
73
- if not self._active_key_synchronization:
77
+ if domain is None or not self._active_key_synchronization:
74
78
  return request
75
79
  else:
76
80
  await self.requestKDC(domain)
@@ -88,10 +92,9 @@ class KDCObject:
88
92
  response = response[8:]
89
93
  sig, domain_h, data = response[:164], response[164:164+64], response[164+64:]
90
94
  if domain_h not in self._servers_keys_hash_domain:
91
- if not self._active_key_synchronization:
92
- print(domain_h, 'not in', self._servers_keys_hash_domain)
95
+ if domain_h is None or not self._active_key_synchronization:
93
96
  return r, None
94
- else:
97
+ elif self._active_key_synchronization:
95
98
  await self.requestKDC(domain_h)
96
99
 
97
100
  d = self._servers_keys_hash_domain[domain_h]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GNServer
3
- Version: 0.0.0.0.61
3
+ Version: 0.0.0.0.63
4
4
  Summary: GNServer
5
5
  Home-page: https://github.com/KeyisB/libs/tree/main/GNServer
6
6
  Author: KeyisB
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GNServer
3
- Version: 0.0.0.0.61
3
+ Version: 0.0.0.0.63
4
4
  Summary: GNServer
5
5
  Home-page: https://github.com/KeyisB/libs/tree/main/GNServer
6
6
  Author: KeyisB
@@ -5,7 +5,7 @@ filesName = 'GNServer'
5
5
 
6
6
  setup(
7
7
  name=name,
8
- version='0.0.0.0.61',
8
+ version='0.0.0.0.63',
9
9
  author="KeyisB",
10
10
  author_email="keyisb.pip@gmail.com",
11
11
  description=name,
File without changes
File without changes
File without changes