From d78095dce95be7935403ffe3af1a66fd91aaaa51 Mon Sep 17 00:00:00 2001
From: Rolf Niepraschk <Rolf.Niepraschk@ptb.de>
Date: Tue, 27 Jul 2021 09:39:41 +0200
Subject: [PATCH] get xsd url from "releases.json"

---
 server.py |  4 ++--
 utils.py  | 45 ++++++++++++++-------------------------------
 2 files changed, 16 insertions(+), 33 deletions(-)

diff --git a/server.py b/server.py
index f8c500d..56b1822 100644
--- a/server.py
+++ b/server.py
@@ -48,12 +48,12 @@ def update():
 @app.route('/validate', methods=['POST'])
 def validate():
     app.logger.debug('hit validate')
-    xv = request.args.get('v')
+    version = request.args.get('v')
     xml_str = request.data
     xml_tree = utils.parse(xml_str)
     if xml_tree:
         app.logger.debug('=== xml_tree OK ===')
-        xsd_str = utils.get_xsd(config, xsd_version=xv, xml_str=xml_str)
+        xsd_str = utils.get_xsd(releases_dict, xsd_version=version, xml_str=xml_str)
         if  xsd_str:
             ret = utils.validate(xml_str=xml_str, xsd_str=xsd_str)
         else:
diff --git a/utils.py b/utils.py
index 33f5437..f712b5e 100644
--- a/utils.py
+++ b/utils.py
@@ -52,38 +52,21 @@ def get_version():
     except:
         return False
 
-def get_xsd(cfg, xsd_version=None, xml_str = None):
-    filename =  cfg['xsd']['filename']
-    baseURL = cfg['xsd']['externalBaseURL']
-    xsd_str = ''
-    url = ''
-    if xsd_version:
-        if xsd_version == 'latest':
-            url = baseURL + filename
-        else:
-            url = baseURL + 'v' + xsd_version + '/' + filename
-    else:
+def get_xsd(d, xsd_version=None, xml_str = None):
+    url = False
+    version = xsd_version
+    if not version: # We use the internal version information in the XML structure
         root = parse(xml_str)
-        item = root.attrib.get('schemaVersion')
-        if item:
-            url = baseURL + 'v' + item + '/' + filename
-        else:
-            for key in root.attrib:
-                if key.endswith('schemaLocation'):
-                    x = root.attrib.get(key).split()
-                    for u in x:
-                        if u.endswith(filename):
-                            url = u
-                            break       
-    if uri_validator(url):
-        try:
-            r = requests.get(url, allow_redirects=True)
-            if r.url.endswith(filename): # no bad redirection
-                return r.text
-            else:
-                return False
-        except:
-            return False
+        version = root.attrib.get('schemaVersion')
+    for i in d['releases']:
+        if i['version'] == version:
+            url = i['url']
+            break
+    try:
+        r = requests.get(url, allow_redirects=True)
+        return r.text
+    except:
+        return False
 
 def parse(xml_str):
     try:
-- 
GitLab