A1-Simulator - Align with OSC Near-RT-RIC A1 Mediator
[sim/a1-interface.git] / near-rt-ric-simulator / src / common / maincommon.py
1 #  ============LICENSE_START===============================================
2 #  Copyright (C) 2021 Nordix Foundation. All rights reserved.
3 #  ========================================================================
4 #  Licensed under the Apache License, Version 2.0 (the "License");
5 #  you may not use this file except in compliance with the License.
6 #  You may obtain a copy of the License at
7 #
8 #       http://www.apache.org/licenses/LICENSE-2.0
9 #
10 #  Unless required by applicable law or agreed to in writing, software
11 #  distributed under the License is distributed on an "AS IS" BASIS,
12 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #  See the License for the specific language governing permissions and
14 #  limitations under the License.
15 #  ============LICENSE_END=================================================
16 #
17
18 import os
19 import sys
20 from pathlib import Path
21 from flask import Response
22 import socket
23 import ssl
24
25 # Must exist
26 apipath=os.environ['APIPATH']
27 # May exist
28 remote_hosts_logging=os.getenv('REMOTE_HOSTS_LOGGING')
29 duplicate_check=os.getenv('DUPLICATE_CHECK')
30
31 # Make sure the api path for the interface yaml file is set, otherwise exit
32 def check_apipath():
33     if (apipath is None):
34         print("Env APIPATH not set. Exiting....")
35         sys.exit(1)
36
37 # Return a Response of currently supported interfaces
38 def get_supported_interfaces_response():
39     p=Path(os.getcwd())
40     pp=p.parts
41     arr = os.listdir("../")
42     del arr[arr.index('common')] # Remove the common lib
43     del arr[arr.index('start.sh')] # Remove the start script
44     arr.sort()
45     return Response("Current interface: " + str(pp[len(pp)-1]) + "  All supported A1 interface yamls in this container: "+str(arr), 200, mimetype='text/plain')
46
47 # Remote host lookup and store host name in a set
48 def extract_host_name(hosts_set, request):
49     if (remote_hosts_logging is not None):
50         if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
51             host_ip=str(request.environ['REMOTE_ADDR'])
52         else:
53             host_ip=str(request.environ['HTTP_X_FORWARDED_FOR'])
54         prefix='::ffff:'
55         if (host_ip.startswith('::ffff:')):
56             host_ip=host_ip[len(prefix):]
57         try:
58             name, alias, addresslist = socket.gethostbyaddr(host_ip)
59             hosts_set.add(name)
60         except Exception:
61             hosts_set.add(host_ip)
62     else:
63         hosts_set.add("logging_of_remote_host_names_not_enabled")
64
65 # Function to check if duplicate check shall be made
66 # True = check for duplicates
67 # False = ignore duplicates
68 def is_duplicate_check():
69     global duplicate_check
70
71     if ((duplicate_check is not None) and (duplicate_check == "1")):
72         return True
73     return False