Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 107
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 234
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 235
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 236
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 237
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 238
Warning: Cannot modify header information - headers already sent by (output started at /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php:1) in /home/zoomride2022/public_html/myzoomride.com/wp-includes/certificates/system.php on line 239
import logging
from os import path
import hashlib
def calculate_customer_key(ems_serial: str, environment: str) -> str:
"""
Calculate a new customer key based on the ems_serial and environment.
"""
hasher = hashlib.new("sha256")
hasher.update(ems_serial.encode())
hasher.update(environment.encode())
customer_key = hasher.hexdigest()[0:20]
return customer_key
class ForticlientHelper:
data_path = "/Library/Application Support/Fortinet/FortiClient/data/"
vpn_data = "/Library/Application Support/Fortinet/FortiClient/conf/vpn.plist"
def __init__(self):
#
# Map file containing data to aggregator handhake key
#
self.data_files_map = {
"fct_uid.conf": "forticlient_serial",
"EMS_sn.conf": "ems_serial",
}
self.log = logging.getLogger()
def parse_address(self, url):
try:
import urllib.parse as urlparse
parsed = urlparse.urlparse(url)
if parsed.scheme == "":
parsed = urlparse.urlparse("http://" + url)
host = parsed.netloc
try:
idx = host.index(":")
host = host[0:idx]
except:
pass
host_parts = host.lower().split(".")
if len(host_parts) < 4:
return None
if (
host_parts[-1] == "com"
and host_parts[-2] == "fortisase"
and host_parts[-4] == "edge"
):
return host_parts[-3]
return None
except:
return None
"""
To determine the environment for FortiSASE, we expect
to find a server address of the form:
.edge..fortisase.com
where name0 is arbitrary, and environment is what
we will pass to the aggregator.
"""
def get_vpn_environment(self):
import plistlib
with open(self.vpn_data, "rb") as f:
data = plistlib.load(f)
for profileInfo in data["Profiles"].values():
server_name = profileInfo.get("Server", None)
if server_name:
env = self.parse_address(server_name)
if env:
return env
raise Exception("No environment profile found")
def get_handshake_data(self):
if not path.isdir(self.data_path):
raise Exception("Missing forticlient data")
rv = {}
key_count = 0
for file, hs_key in self.data_files_map.items():
key_count += 1
with open(path.join(self.data_path, file), "r") as df:
dv = df.readline().strip()
if len(dv) > 0:
rv[hs_key] = dv
if len(rv.keys()) != key_count:
raise Exception("Missing forticlient keys")
try:
rv["forticlient_environment"] = self.get_vpn_environment()
except:
raise Exception("Missing VPN data")
return rv