diff Tests/CheckHttpServerSecurity.py @ 370:7eb5b86508b1

added Tests/CheckHttpServerSecurity.py and Tests/CheckIngestTranscoding.py
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 21 Jan 2021 11:38:47 +0100
parents
children e769bcf2b94f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Tests/CheckHttpServerSecurity.py	Thu Jan 21 11:38:47 2021 +0100
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+
+# Orthanc - A Lightweight, RESTful DICOM Store
+# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+# Department, University Hospital of Liege, Belgium
+# Copyright (C) 2017-2021 Osimis S.A., Belgium
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+import json
+import os
+import subprocess
+import sys
+import time
+import Toolbox
+
+if len(sys.argv) != 2:
+    print('Must provide a path to Orthanc binaries')
+    exit(-1)
+
+
+TMP = '/tmp/OrthancTest'
+CONFIG = os.path.join(TMP, 'Configuration.json')
+
+if os.path.exists(TMP):
+    print('Temporary path already exists: %s' % TMP)
+    exit(-1)
+
+os.mkdir(TMP)
+
+
+ORTHANC = Toolbox.DefineOrthanc(username = 'orthanc',
+                                password = 'orthanc')
+
+
+def IsHttpServerSecure(config):
+    with open(CONFIG, 'w') as f:
+        f.write(json.dumps(config))
+    
+    process = subprocess.Popen(
+        [ sys.argv[1], CONFIG ],
+        cwd = TMP,
+        #stdout=subprocess.PIPE, 
+        stderr=subprocess.PIPE, 
+        #shell=True
+        )
+
+    time.sleep(1)
+
+    while True:
+        try:
+            system = Toolbox.DoGet(ORTHANC, '/system')
+            break
+        except:
+            time.sleep(0.1)
+
+    process.terminate()
+    process.wait()
+
+    return system['IsHttpServerSecure']
+
+
+def Assert(b):
+    if not b:
+        raise Exception('Bad result')
+
+
+print('==== TEST 1 ====')
+Assert(IsHttpServerSecure({
+            'RemoteAccessAllowed': False,
+            'RegisteredUsers' : { }
+            }))
+
+print('==== TEST 2 ====')
+Assert(IsHttpServerSecure({
+            'RemoteAccessAllowed': False,
+            'AuthenticationEnabled': False,
+            'RegisteredUsers' : { }
+            }))
+
+print('==== TEST 3 ====')
+Assert(IsHttpServerSecure({
+            'RemoteAccessAllowed': False,
+            'AuthenticationEnabled': True,
+            'RegisteredUsers' : { 'orthanc' : 'orthanc' }
+            }))
+
+print('==== TEST 4 ====')
+Assert(not IsHttpServerSecure({
+            'RemoteAccessAllowed': True
+            }))
+
+print('==== TEST 5 (server application scenario) ====')
+Assert(not IsHttpServerSecure({
+            'RemoteAccessAllowed': True,
+            'AuthenticationEnabled': False,
+            }))
+
+print('==== TEST 6 ====')
+Assert(IsHttpServerSecure({
+            'RemoteAccessAllowed': True,
+            'AuthenticationEnabled': True,
+            'RegisteredUsers' : { 'orthanc' : 'orthanc' }
+            }))
+
+print('==== TEST 7 (Docker scenario) ====')
+Assert(not IsHttpServerSecure({
+            'RemoteAccessAllowed': True,
+            'AuthenticationEnabled': True
+            }))
+
+print('Success!')