Added IPV6 support and support for https
[sim/a1-interface.git] / near-rt-ric-simulator / src / common / maincommon.py
index d0b9802..79cda3b 100644 (file)
@@ -19,8 +19,13 @@ import os
 import sys
 from pathlib import Path
 from flask import Response
+import socket
+import ssl
 
+#Must exist
 apipath=os.environ['APIPATH']
+#May exist
+remote_hosts_logging=os.getenv('REMOTE_HOSTS_LOGGING')
 
 # Make sure the api path for the interface yaml file is set, otherwise exit
 def check_apipath():
@@ -37,3 +42,38 @@ def get_supported_interfaces_response():
     del arr[arr.index('start.sh')] # Remove the start script
     return Response("Current interface: " + str(pp[len(pp)-1]) + "  All supported A1 interface yamls in this container: "+str(arr), 200, mimetype='text/plain')
 
+# Remote host lookup and store host name in a set
+def extract_host_name(hosts_set, request):
+    if (remote_hosts_logging is not None):
+        host_ip=str(request.environ['REMOTE_ADDR'])
+        prefix='::ffff:'
+        if (host_ip.startswith('::ffff:')):
+            host_ip=host_ip[len(prefix):]
+        try:
+            name, alias, addresslist = socket.gethostbyaddr(host_ip)
+            hosts_set.add(name)
+        except Exception as e:
+            hosts_set.add(host_ip)
+    else:
+        hosts_set.add("logging_of_remote_host_names_not_enabled")
+
+# Check if cert is available and return a sec context, if not return 'None'
+def get_security_context():
+
+    try:
+        path="/usr/src/app/cert"
+        if (os.path.isdir(path)):
+            certpath=path+"/cert.crt"
+            keypath=path+"/key.crt"
+            if (os.path.isfile(certpath) and os.path.isfile(keypath)):
+                context = ssl.SSLContext(ssl.PROTOCOL_TLS)
+                context.load_cert_chain(certpath, keypath, password="test")
+                return context
+            else:
+                print("Cert and/or key does not exists in dir "+str(path))
+
+        else:
+            print("Path "+str(path)+" to certificate and key does not exists")
+    except Exception as e:
+        print("Problem when loading cert and key: "+str(e))
+    return None