GNServer 0.0.0.0.10__tar.gz → 0.0.0.0.11__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.10 → gnserver-0.0.0.0.11}/GNServer/GNServer/_app.py +43 -4
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/GNServer.egg-info/PKG-INFO +1 -1
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/PKG-INFO +1 -1
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/setup.py +1 -1
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/GNServer/__init__.py +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/GNServer.egg-info/SOURCES.txt +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/GNServer.egg-info/dependency_links.txt +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/GNServer.egg-info/requires.txt +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/GNServer.egg-info/top_level.txt +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/LICENSE +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/GNServer/mmbConfig.json +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/LICENSE +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/MANIFEST.in +0 -0
- {gnserver-0.0.0.0.10 → gnserver-0.0.0.0.11}/setup.cfg +0 -0
@@ -158,8 +158,31 @@ def extract_template_vars(filedata: bytes, mime: str) -> List[str]:
|
|
158
158
|
return list(set(m.group(1) for m in TPL_VAR_RE.finditer(text)))
|
159
159
|
|
160
160
|
|
161
|
+
import re
|
162
|
+
from urllib.parse import urlparse
|
161
163
|
|
162
|
-
|
164
|
+
def resolve_cors(origin_url: str, rules: list[str]) -> bool:
|
165
|
+
origin = origin_url.rstrip("/")
|
166
|
+
parsed = urlparse(origin)
|
167
|
+
|
168
|
+
for rule in rules:
|
169
|
+
rule = rule.rstrip("/")
|
170
|
+
if rule.startswith("!"):
|
171
|
+
pattern = rule[1:]
|
172
|
+
if re.match(pattern, origin):
|
173
|
+
return True
|
174
|
+
elif "*" in rule:
|
175
|
+
r = urlparse(rule.replace("*.", ""))
|
176
|
+
if r.scheme and r.scheme != parsed.scheme:
|
177
|
+
continue
|
178
|
+
regex = "^" + re.escape(rule).replace("\\*", "[^.]+") + "$"
|
179
|
+
if re.match(regex, origin):
|
180
|
+
return True
|
181
|
+
else:
|
182
|
+
if origin == rule:
|
183
|
+
return True
|
184
|
+
|
185
|
+
return False
|
163
186
|
|
164
187
|
|
165
188
|
|
@@ -307,6 +330,14 @@ class App:
|
|
307
330
|
if r.method != method:
|
308
331
|
continue
|
309
332
|
|
333
|
+
if r.cors is not None:
|
334
|
+
if request._origin is None:
|
335
|
+
return gn.GNResponse("gn:backend:801", {'error': 'Cors error. Route has cors but request has no origin url.'})
|
336
|
+
if not resolve_cors(request._origin, r.cors._allow_origins):
|
337
|
+
return gn.GNResponse("gn:backend:802", {'error': 'Cors error: origin'})
|
338
|
+
if request.method not in r.cors._allow_methods:
|
339
|
+
return gn.GNResponse("gn:backend:803", {'error': 'Cors error: method'})
|
340
|
+
|
310
341
|
sig = inspect.signature(r.handler)
|
311
342
|
def _ann(name: str):
|
312
343
|
param = sig.parameters.get(name)
|
@@ -331,10 +362,18 @@ class App:
|
|
331
362
|
|
332
363
|
result = await r.handler(**kw)
|
333
364
|
if isinstance(result, gn.GNResponse):
|
365
|
+
if result._cors is not None and result._cors != r.cors:
|
366
|
+
if request._origin is None:
|
367
|
+
return gn.GNResponse("gn:backend:801", {'error': 'Cors error. Route has cors but request has no origin url.'})
|
368
|
+
if not resolve_cors(request._origin, r.cors._allow_origins):
|
369
|
+
return gn.GNResponse("gn:backend:802", {'error': 'Cors error: origin'})
|
370
|
+
if request.method not in r.cors._allow_methods:
|
371
|
+
return gn.GNResponse("gn:backend:803", {'error': 'Cors error: method'})
|
334
372
|
return result
|
335
|
-
|
336
|
-
|
337
|
-
|
373
|
+
else:
|
374
|
+
raise TypeError(
|
375
|
+
f"{r.handler.__name__} returned {type(result)}; GNResponse expected"
|
376
|
+
)
|
338
377
|
|
339
378
|
if allowed:
|
340
379
|
return gn.GNResponse("gn:backend:405", {'error': 'Method Not Allowed'})
|
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
|