Skip to content
Snippets Groups Projects
Commit 43ec42fd authored by Martin van Es's avatar Martin van Es
Browse files

Reuse some code in utils.py

parent f8ed9aac
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@
bin/
lib/
pyvenv.cfg
__pycache__
meta.crt
meta.key
*.xml
......@@ -8,24 +8,14 @@ from urllib.parse import unquote
from dateutil import parser, tz
from datetime import datetime
from utils import hasher, Entity
app = Flask(__name__)
# Find all IdP's in edugain metadata
cached = {}
signer = 'http://localhost:5001/sign'
class Entity(object):
md = None
valid_until = 0
def hasher(entity_id):
sha1 = hashlib.sha1()
sha1.update(entity_id.encode())
sha1_digest = sha1.hexdigest()
sha1_identifier = sha1_digest
return sha1_identifier
signer_url = 'http://localhost:5001/sign'
@app.route('/cache/<path:eid>', methods=['GET'])
......@@ -43,7 +33,7 @@ def cache(eid):
return cached[entityID].md
else:
print(f"request {entityID}")
result = requests.get(f"{signer}/{{sha1}}{entityID}").text
result = requests.get(f"{signer_url}/{{sha1}}{entityID}").text
parsed = ET.fromstring(result)
validUntil = parsed.get('validUntil')
# cacheDuration = parsed.get('cacheDuration')
......
#!/usr/bin/env python
import sys
import copy
import hashlib
from lxml import etree as ET
from signxml import XMLSigner
from flask import Flask
from urllib.parse import unquote
from dateutil import parser, tz
from datetime import datetime
import traceback
from utils import hasher, signer, Entity
app = Flask(__name__)
......@@ -24,27 +24,9 @@ cert = open("meta.crt").read()
key = open("meta.key").read()
class Entity(object):
md = None
valid_until = 0
def hasher(entity_id):
sha1 = hashlib.sha1()
sha1.update(entity_id.encode())
sha1_digest = sha1.hexdigest()
return sha1_digest
def signer(xml):
global cert, key
print(xml)
return XMLSigner().sign(xml, key=key, cert=cert)
@app.route('/sign/<path:eid>', methods=['GET'])
def sign(eid):
global idps, signed
global idps, signed, cert, key
entityID = unquote(eid)
if entityID[:6] == "{sha1}":
entityID = entityID[6:]
......@@ -60,7 +42,7 @@ def sign(eid):
if entityID in idps:
try:
print(f"sign {entityID}")
signed_element = signer(idps[entityID].md)
signed_element = signer(idps[entityID].md, cert, key)
signed_xml = ET.tostring(signed_element, pretty_print=True).decode()
signed_entity = Entity()
signed_entity.md = signed_xml
......
......@@ -4,10 +4,10 @@ import copy
from concurrent.futures import ThreadPoolExecutor
from lxml import etree as ET
from signxml import XMLSigner, XMLVerifier
import hashlib
# import traceback
from .utils import hasher, signer
# Find all IdP's in edugain metadata
idps = []
......@@ -20,16 +20,14 @@ key = open("meta.key").read()
def sign(xml, name):
global success, failed, cert
global success, failed, cert, key
# print("Signer")
try:
sha1 = hashlib.sha1()
sha1.update(name.encode('utf-8'))
sha1d = sha1.hexdigest()
signed = XMLSigner().sign(xml, key=key, cert=cert)
sha1 = hasher(name)
signed = signer(xml, cert, key)
out = ET.tostring(signed, pretty_print=True).decode()
# XMLVerifier().verify(out, x509_cert=cert)
with open(f'output/{sha1d}.xml', 'w') as f:
with open(f'output/{sha1}.xml', 'w') as f:
f.write(out)
success += 1
except Exception as e:
......
utils.py 0 → 100644
import hashlib
from signxml import XMLSigner
class Entity(object):
md = None
valid_until = 0
def hasher(entity_id):
sha1 = hashlib.sha1()
sha1.update(entity_id.encode())
sha1_digest = sha1.hexdigest()
return sha1_digest
def signer(xml, cert, key):
return XMLSigner().sign(xml, key=key, cert=cert)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment