diff --git a/mdserver.py b/mdserver.py index bac944ed85d8e47f284b9d823aa96e59a6f9e7cd..86af27fde3d107647d0e1cd5c90165fdb230fb1f 100755 --- a/mdserver.py +++ b/mdserver.py @@ -8,6 +8,7 @@ from flask import Flask from urllib.parse import unquote from dateutil import parser, tz from datetime import datetime +from isoduration import parse_duration import traceback from utils import hasher, signer, Entity @@ -73,6 +74,7 @@ def read_metadata(signum, frm): validUntil = root.get('validUntil') cacheDuration = root.get('cacheDuration') valid_until = parser.isoparse(validUntil) + cache_duration = parse_duration(cacheDuration) if valid_until > datetime.now(tz.tzutc()): for entity_descriptor in root.findall('md:EntityDescriptor', ns): entityID = entity_descriptor.attrib.get('entityID', 'none') @@ -83,6 +85,7 @@ def read_metadata(signum, frm): entity = Entity() entity.md = entity_descriptor entity.valid_until = valid_until + entity.cache_duration = cache_duration idps[sha1] = entity old_idps.pop(sha1, None) # signed.pop(sha1, None) @@ -96,6 +99,9 @@ def read_metadata(signum, frm): print(f"Removed: {removed} entities") print(f"validUntil: {validUntil}") + signal.signal(signal.SIGHUP, read_metadata) -app.run(host='0.0.0.0', port=5001) +read_metadata(None, None) + +app.run(host='127.0.0.1', port=5001) diff --git a/mdserver.service b/mdserver.service new file mode 100644 index 0000000000000000000000000000000000000000..b44fc7eb84172b20dd29986348f0459aa29c5a28 --- /dev/null +++ b/mdserver.service @@ -0,0 +1,15 @@ +[Unit] +Description=MDServer +After=syslog.target network.target + +[Service] +Type=simple +WorkingDirectory=/opt/alternate-mdx +ExecStart=/opt/alternate-mdx/bin/python -u mdserver.py md.xml +ExecReload=/bin/kill -HUP $MAINPID +Restart=on-failure +RestartSec=10 +SyslogIdentifier=mdserver + +[Install] +WantedBy=multi-user.target diff --git a/requirements.txt b/requirements.txt index f3c10b9d7d25b1162bbc62934e2020e9cd392358..1a986fb8bb3ca71b3b65d1e67de8a80eb525c89d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ signxml flask requests python-dateutil +isoduration diff --git a/utils.py b/utils.py index 23bf931e78ddea080ed2623ca9adfcccd1eec585..d74d9187f369a3c090f6c077d380dc08ca35fd53 100644 --- a/utils.py +++ b/utils.py @@ -5,6 +5,7 @@ from signxml import XMLSigner class Entity(object): md = None valid_until = 0 + cache_duration = 0 def hasher(entity_id):