From c791278b25dce1f319dcf82650fa1670ec874dfb Mon Sep 17 00:00:00 2001 From: Martin van Es <martin@mrvanes.com> Date: Thu, 2 Dec 2021 11:25:24 +0100 Subject: [PATCH] Add cache duration and load xml file on start --- mdserver.py | 8 +++++++- mdserver.service | 15 +++++++++++++++ requirements.txt | 1 + utils.py | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 mdserver.service diff --git a/mdserver.py b/mdserver.py index bac944e..86af27f 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 0000000..b44fc7e --- /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 f3c10b9..1a986fb 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 23bf931..d74d918 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): -- GitLab