GNServer 0.0.0.0.43__py3-none-any.whl → 0.0.0.0.44__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 +5 -23
- GNServer/_cors_resolver.py +29 -2
- {gnserver-0.0.0.0.43.dist-info → gnserver-0.0.0.0.44.dist-info}/METADATA +1 -1
- {gnserver-0.0.0.0.43.dist-info → gnserver-0.0.0.0.44.dist-info}/RECORD +7 -7
- {gnserver-0.0.0.0.43.dist-info → gnserver-0.0.0.0.44.dist-info}/WHEEL +0 -0
- {gnserver-0.0.0.0.43.dist-info → gnserver-0.0.0.0.44.dist-info}/licenses/LICENSE +0 -0
- {gnserver-0.0.0.0.43.dist-info → gnserver-0.0.0.0.44.dist-info}/top_level.txt +0 -0
GNServer/_app.py
CHANGED
@@ -113,9 +113,6 @@ def guess_type(filename: str) -> str:
|
|
113
113
|
|
114
114
|
|
115
115
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
116
|
class App:
|
120
117
|
def __init__(self):
|
121
118
|
self._routes: List[Route] = []
|
@@ -192,9 +189,6 @@ class App:
|
|
192
189
|
else:
|
193
190
|
await func()
|
194
191
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
192
|
|
199
193
|
|
200
194
|
async def dispatchRequest(
|
@@ -214,13 +208,7 @@ class App:
|
|
214
208
|
if r.method != method:
|
215
209
|
continue
|
216
210
|
|
217
|
-
|
218
|
-
if request._origin is None:
|
219
|
-
return GNResponse("gn:backend:801", {'error': 'Cors error. Route has cors but request has no origin url.'})
|
220
|
-
if not resolve_cors(request._origin, r.cors.allow_origins):
|
221
|
-
return GNResponse("gn:backend:802", {'error': 'Cors error: origin'})
|
222
|
-
if r.cors.allow_methods is not None and request.method not in r.cors.allow_methods and '*' not in r.cors.allow_methods:
|
223
|
-
return GNResponse("gn:backend:803", {'error': 'Cors error: method'})
|
211
|
+
_resolve_cors(request, r.cors)
|
224
212
|
|
225
213
|
sig = inspect.signature(r.handler)
|
226
214
|
def _ann(name: str):
|
@@ -261,14 +249,8 @@ class App:
|
|
261
249
|
else:
|
262
250
|
result._cors = r.cors
|
263
251
|
|
264
|
-
|
265
|
-
|
266
|
-
print(result._cors.allow_origins)
|
267
|
-
return GNResponse("gn:backend:801", {'error': 'Cors error. Route has cors but request has no origin url. [2]'})
|
268
|
-
if not resolve_cors(request._origin, result._cors.allow_origins):
|
269
|
-
return GNResponse("gn:backend:802", {'error': 'Cors error: origin'})
|
270
|
-
if result._cors.allow_methods is not None and request.method not in result._cors.allow_methods and '*' not in result._cors.allow_methods:
|
271
|
-
return GNResponse("gn:backend:803", {'error': 'Cors error: method'})
|
252
|
+
_resolve_cors(request, result._cors)
|
253
|
+
|
272
254
|
return result
|
273
255
|
else:
|
274
256
|
raise TypeError(
|
@@ -342,8 +324,8 @@ class App:
|
|
342
324
|
# получаем длинну пакета
|
343
325
|
mode, stream, lenght = GNRequest.type(buf)
|
344
326
|
|
345
|
-
if mode not in (1, 2): # не наш пакет
|
346
|
-
logger.debug(f'Пакет отклонен: mode пакета {mode}. Разрешен 1, 2')
|
327
|
+
if mode not in (1, 2, 4): # не наш пакет
|
328
|
+
logger.debug(f'Пакет отклонен: mode пакета {mode}. Разрешен 1, 2, 3')
|
347
329
|
return
|
348
330
|
|
349
331
|
if not stream: # если не стрим, то ждем конец quic стрима и запускаем обработку ответа
|
GNServer/_cors_resolver.py
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
|
2
2
|
import re
|
3
|
+
from typing import Optional
|
3
4
|
from urllib.parse import urlparse
|
5
|
+
from gnobjects.net.objects import GNRequest, CORSObject
|
6
|
+
from gnobjects.net.fastcommands import AllGNFastCommands
|
4
7
|
|
5
|
-
def
|
8
|
+
def _resolve_cors(origin_url: str, rules: list[str]) -> bool:
|
6
9
|
"""
|
7
10
|
Возвращает origin_url если он матчится хотя бы с одним правилом.
|
8
11
|
Правила:
|
@@ -126,4 +129,28 @@ def _host_matches_pattern(host: str, pattern: str) -> bool:
|
|
126
129
|
return match(hi + 1, pi + 1)
|
127
130
|
return False
|
128
131
|
|
129
|
-
return match(0, 0)
|
132
|
+
return match(0, 0)
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
def resolve_cors(request: GNRequest, cors: Optional[CORSObject]):
|
137
|
+
if cors is None:
|
138
|
+
return
|
139
|
+
|
140
|
+
if request.client.type not in cors.allow_client_types:
|
141
|
+
raise AllGNFastCommands.CorsClientTypeNotAllowed()
|
142
|
+
|
143
|
+
if cors.allow_origins is not None:
|
144
|
+
if request._origin is None:
|
145
|
+
raise AllGNFastCommands.CorsOriginNotAllowed('Route has cors but request has no origin url')
|
146
|
+
|
147
|
+
if not _resolve_cors(request._origin, cors.allow_origins):
|
148
|
+
raise AllGNFastCommands.CorsOriginNotAllowed()
|
149
|
+
|
150
|
+
if cors.allow_methods is not None:
|
151
|
+
if request.method not in cors.allow_methods:
|
152
|
+
raise AllGNFastCommands.CorsMethodNotAllowed()
|
153
|
+
|
154
|
+
if cors.allow_transport_protocols is not None:
|
155
|
+
if request.transport in ('gn:quik:real', 'gn:quik:dev') and request.transport not in cors.allow_transport_protocols:
|
156
|
+
raise AllGNFastCommands.CorsTransportProtocolNotAllowed()
|
@@ -1,13 +1,13 @@
|
|
1
1
|
GNServer/__init__.py,sha256=6CMCZlkBO74PW8i8DAri5xz2fYM9EyPH8vdsLYBMmOo,1560
|
2
|
-
GNServer/_app.py,sha256=
|
2
|
+
GNServer/_app.py,sha256=KufVyN1gLnjui36peLXxeiwgaJLdjQrJ5CQk2jY2n04,17534
|
3
3
|
GNServer/_client.py,sha256=jABXjnNJ9o6Mo3jRTW5Qyb-yhgjdH4VnIexwOplJcyg,31867
|
4
|
-
GNServer/_cors_resolver.py,sha256=
|
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-0.0.0.0.
|
10
|
-
gnserver-0.0.0.0.
|
11
|
-
gnserver-0.0.0.0.
|
12
|
-
gnserver-0.0.0.0.
|
13
|
-
gnserver-0.0.0.0.
|
9
|
+
gnserver-0.0.0.0.44.dist-info/licenses/LICENSE,sha256=_rN-sb3LemR3cKsEqjJRdXkdt7mME1mkW1BwWEn-zAw,1309
|
10
|
+
gnserver-0.0.0.0.44.dist-info/METADATA,sha256=GOyzvmFKw0xoSvlGFfkrhkq6GnjXGUajm20FsBsTvAs,830
|
11
|
+
gnserver-0.0.0.0.44.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
12
|
+
gnserver-0.0.0.0.44.dist-info/top_level.txt,sha256=-UOUBuD4u7Qkb1o5PdcwyA3kx8xCH2lwy0tJHi26Wb4,9
|
13
|
+
gnserver-0.0.0.0.44.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|