mirror of
				https://git.collinwebdesigns.de/oscar.krause/fastapi-dls.git
				synced 2025-10-31 08:20:16 +01:00 
			
		
		
		
	removed "PatchMalformedJsonMiddleware" because its not working on driver site
ref. oscar.krause/fastapi-dls#1
This commit is contained in:
		| @@ -48,7 +48,6 @@ package() { | ||||
|     install -Dm755 "$srcdir/$pkgname/app/main.py" "$pkgdir/opt/$pkgname/main.py" | ||||
|     install -Dm755 "$srcdir/$pkgname/app/orm.py" "$pkgdir/opt/$pkgname/orm.py" | ||||
|     install -Dm755 "$srcdir/$pkgname/app/util.py" "$pkgdir/opt/$pkgname/util.py" | ||||
|     install -Dm755 "$srcdir/$pkgname/app/middleware.py" "$pkgdir/opt/$pkgname/middleware.py" | ||||
|     install -Dm644 "$srcdir/$pkgname.default" "$pkgdir/etc/default/$pkgname" | ||||
|     install -Dm644 "$srcdir/$pkgname.service" "$pkgdir/usr/lib/systemd/system/$pkgname.service" | ||||
|     install -Dm644 "$srcdir/$pkgname.tmpfiles" "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf" | ||||
|   | ||||
| @@ -430,7 +430,6 @@ After first success you have to replace `--issue` with `--renew`. | ||||
| | `ALLOTMENT_REF`          | `20000000-0000-0000-0000-000000000001` | Allotment identification uuid                                                                                                       | | ||||
| | `INSTANCE_KEY_RSA`       | `<app-dir>/cert/instance.private.pem`  | Site-wide private RSA key for singing JWTs \*3                                                                                      | | ||||
| | `INSTANCE_KEY_PUB`       | `<app-dir>/cert/instance.public.pem`   | Site-wide public key \*3                                                                                                            | | ||||
| | `SUPPORT_MALFORMED_JSON` | `false`                                | Support parsing for mal formatted "mac_address_list" ([Issue](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/issues/1)) | | ||||
|  | ||||
| \*1 For example, if the lease period is one day and the renewal period is 20%, the client attempts to renew its license | ||||
| every 4.8 hours. If network connectivity is lost, the loss of connectivity is detected during license renewal and the | ||||
|   | ||||
| @@ -96,11 +96,6 @@ app.add_middleware( | ||||
|     allow_methods=['*'], | ||||
|     allow_headers=['*'], | ||||
| ) | ||||
| if bool(env('SUPPORT_MALFORMED_JSON', False)): | ||||
|     from middleware import PatchMalformedJsonMiddleware | ||||
|  | ||||
|     logger.info(f'Enabled "PatchMalformedJsonMiddleware"!') | ||||
|     app.add_middleware(PatchMalformedJsonMiddleware, enabled=True) | ||||
|  | ||||
|  | ||||
| # Helper | ||||
|   | ||||
| @@ -1,75 +0,0 @@ | ||||
| import json | ||||
| import logging | ||||
| import re | ||||
|  | ||||
| from starlette.middleware.base import BaseHTTPMiddleware | ||||
| from starlette.requests import Request | ||||
|  | ||||
| logger = logging.getLogger(__name__) | ||||
|  | ||||
|  | ||||
| class PatchMalformedJsonMiddleware(BaseHTTPMiddleware): | ||||
|     # see oscar.krause/fastapi-dls#1 | ||||
|  | ||||
|     REGEX = r'(\"mac_address_list\"\:\s?\[)([\w\d])' | ||||
|  | ||||
|     def __init__(self, app, enabled: bool): | ||||
|         super().__init__(app) | ||||
|         self.enabled = enabled | ||||
|  | ||||
|     async def dispatch(self, request: Request, call_next): | ||||
|         body = await request.body() | ||||
|         content_type = request.headers.get('Content-Type') | ||||
|  | ||||
|         if self.enabled and content_type == 'application/json': | ||||
|             logger.debug(f'Using Request-Patch because "PatchMalformedJsonMiddleware" is enabled!') | ||||
|             body = body.decode() | ||||
|  | ||||
|             # try to fix json | ||||
|             try: | ||||
|                 j = json.loads(body) | ||||
|                 PatchMalformedJsonMiddleware.fix_mac_address_list_length(j=j, size=1) | ||||
|                 PatchMalformedJsonMiddleware.fix_ip_address_list_length(j=j, size=1) | ||||
|             except json.decoder.JSONDecodeError: | ||||
|                 logger.warning(f'Malformed json received! Try to fix it.') | ||||
|                 body = PatchMalformedJsonMiddleware.fix_json(body) | ||||
|                 logger.debug(f'Fixed JSON: "{body}"') | ||||
|                 j = json.loads(body)  # ensure json is now valid | ||||
|                 PatchMalformedJsonMiddleware.fix_mac_address_list_length(j=j, size=1) | ||||
|                 PatchMalformedJsonMiddleware.fix_ip_address_list_length(j=j, size=1) | ||||
|                 # set new body | ||||
|                 request._body = json.dumps(j).encode('utf-8') | ||||
|  | ||||
|         response = await call_next(request) | ||||
|         return response | ||||
|  | ||||
|     @staticmethod | ||||
|     def fix_mac_address_list_length(j: dict, size: int = 1) -> dict: | ||||
|         # reduce "mac_address_list" to | ||||
|         environment = j.get('environment', {}) | ||||
|         fingerprint = environment.get('fingerprint', {}) | ||||
|         mac_address = fingerprint.get('mac_address_list', []) | ||||
|  | ||||
|         if len(mac_address) > 0: | ||||
|             logger.info(f'Transforming "mac_address_list" to length of {size}.') | ||||
|             j['environment']['fingerprint']['mac_address_list'] = mac_address[:size] | ||||
|  | ||||
|         return j | ||||
|  | ||||
|     @staticmethod | ||||
|     def fix_ip_address_list_length(j: dict, size: int = 1) -> dict: | ||||
|         # reduce "ip_address_list" to | ||||
|         environment = j.get('environment', {}) | ||||
|         ip_addresses = environment.get('ip_address_list', []) | ||||
|  | ||||
|         if len(ip_addresses) > 0: | ||||
|             logger.info(f'Transforming "ip_address_list" to length of {size}.') | ||||
|             j['environment']['ip_address_list'] = ip_addresses[:size] | ||||
|  | ||||
|         return j | ||||
|  | ||||
|     @staticmethod | ||||
|     def fix_json(s: str) -> str: | ||||
|         s = s.replace('\t', '') | ||||
|         s = s.replace('\n', '') | ||||
|         return re.sub(PatchMalformedJsonMiddleware.REGEX, r'\1"\2', s) | ||||
							
								
								
									
										23
									
								
								test/main.py
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								test/main.py
									
									
									
									
									
								
							| @@ -18,7 +18,6 @@ sys.path.append('../app') | ||||
| from app import main | ||||
| from app.util import load_key | ||||
|  | ||||
| # main.app.add_middleware(PatchMalformedJsonMiddleware, enabled=True) | ||||
| client = TestClient(main.app) | ||||
|  | ||||
| ORIGIN_REF, ALLOTMENT_REF, SECRET = str(uuid4()), '20000000-0000-0000-0000-000000000001', 'HelloWorld' | ||||
| @@ -107,28 +106,6 @@ def test_auth_v1_origin(): | ||||
|     assert response.json().get('origin_ref') == ORIGIN_REF | ||||
|  | ||||
|  | ||||
| def test_auth_v1_origin_malformed_json():  # see oscar.krause/fastapi-dls#1 | ||||
|     from middleware import PatchMalformedJsonMiddleware | ||||
|  | ||||
|     # test regex (temporary, until this section is merged into main.py | ||||
|     s = '{"environment": {"fingerprint": {"mac_address_list": [ff:ff:ff:ff:ff:ff"]}}' | ||||
|     replaced = PatchMalformedJsonMiddleware.fix_json(s) | ||||
|     assert replaced == '{"environment": {"fingerprint": {"mac_address_list": ["ff:ff:ff:ff:ff:ff"]}}' | ||||
|  | ||||
|  | ||||
| def test_auth_v1_origin_middleware():  # see oscar.krause/fastapi-dls#1 | ||||
|     import json | ||||
|     from middleware import PatchMalformedJsonMiddleware | ||||
|  | ||||
|     # test regex (temporary, until this section is merged into main.py | ||||
|     s = '{"environment": {"fingerprint": {"mac_address_list": ["aa:aa:aa:aa:aa:aa", "bb:bb:bb:bb:bb:bb"]}, "ip_address_list": ["127.0.0.1", "127.0.0.2"]}}' | ||||
|     j = json.loads(s) | ||||
|     PatchMalformedJsonMiddleware.fix_mac_address_list_length(j=j, size=1) | ||||
|     PatchMalformedJsonMiddleware.fix_ip_address_list_length(j=j, size=1) | ||||
|     s = json.dumps(j) | ||||
|     assert s == '{"environment": {"fingerprint": {"mac_address_list": ["aa:aa:aa:aa:aa:aa"]}, "ip_address_list": ["127.0.0.1"]}}' | ||||
|  | ||||
|  | ||||
|  | ||||
| def auth_v1_origin_update(): | ||||
|     payload = { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user