#!/usr/bin/python3 # -*- coding: utf-8 -*- import subprocess, os, random, string, sys, shutil, socket, zipfile, urllib.request, urllib.error, urllib.parse, json, base64 from itertools import cycle from zipfile import ZipFile from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError rDownloadURL = {"main": "https://bitbucket.org/le_lio/assets/raw/master/main_xui_neyslim.tar.gz", "sub": "https://bitbucket.org/le_lio/assets/raw/master/sub_xui_neyslim.tar.gz"} rPackages = ["libcurl4", "libxslt1-dev", "libgeoip-dev", "e2fsprogs", "wget", "mcrypt", "nscd", "htop", "zip", "unzip", "mc", "mariadb-common", "mariadb-server", "libpng16-16", "libzip5", "python3-paramiko", "python-is-python3"] rInstall = {"MAIN": "main", "LB": "sub"} rUpdate = {"ADMIN": "admin"} rMySQLCnf = base64.b64decode("IyBYdHJlYW0gQ29kZXMKCltjbGllbnRdCnBvcnQgICAgICAgICAgICA9IDMzMDYKCltteXNxbGRfc2FmZV0KbmljZSAgICAgICAgICAgID0gMAoKW215c3FsZF0KZGVmYXVsdF9hdXRoZW50aWNhdGlvbl9wbHVnaW49bXlzcWxfbmF0aXZlX3Bhc3N3b3JkCnVzZXIgICAgICAgICAgICA9IG15c3FsCnBvcnQgICAgICAgICAgICA9IDc5OTkKYmFzZWRpciAgICAgICAgID0gL3VzcgpkYXRhZGlyICAgICAgICAgPSAvdmFyL2xpYi9teXNxbAp0bXBkaXIgICAgICAgICAgPSAvdG1wCmxjLW1lc3NhZ2VzLWRpciA9IC91c3Ivc2hhcmUvbXlzcWwKc2tpcC1leHRlcm5hbC1sb2NraW5nCnNraXAtbmFtZS1yZXNvbHZlPTEKCmJpbmQtYWRkcmVzcyAgICAgICAgICAgID0gKgprZXlfYnVmZmVyX3NpemUgPSAxMjhNCgpteWlzYW1fc29ydF9idWZmZXJfc2l6ZSA9IDRNCm1heF9hbGxvd2VkX3BhY2tldCAgICAgID0gNjRNCm15aXNhbS1yZWNvdmVyLW9wdGlvbnMgPSBCQUNLVVAKbWF4X2xlbmd0aF9mb3Jfc29ydF9kYXRhID0gODE5MgoKCmV4cGlyZV9sb2dzX2RheXMgICAgICAgID0gMTAKbWF4X2JpbmxvZ19zaXplICAgICAgICAgPSAxMDBNCgptYXhfY29ubmVjdGlvbnMgID0gMjAwMCAjcmVjb21tZW5kZWQgZm9yIDE2R0IgcmFtIApiYWNrX2xvZyA9IDQwOTYKb3Blbl9maWxlc19saW1pdCA9IDE2Mzg0Cmlubm9kYl9vcGVuX2ZpbGVzID0gMTYzODQKbWF4X2Nvbm5lY3RfZXJyb3JzID0gMzA3Mgp0YWJsZV9vcGVuX2NhY2hlID0gNDA5Ngp0YWJsZV9kZWZpbml0aW9uX2NhY2hlID0gNDA5NgoKCnRtcF90YWJsZV9zaXplID0gMUcKbWF4X2hlYXBfdGFibGVfc2l6ZSA9IDFHCgppbm5vZGJfYnVmZmVyX3Bvb2xfc2l6ZSA9IDEyRyAjcmVjb21tZW5kZWQgZm9yIDE2R0IgcmFtCmlubm9kYl9idWZmZXJfcG9vbF9pbnN0YW5jZXMgPSAxCmlubm9kYl9yZWFkX2lvX3RocmVhZHMgPSA2NAppbm5vZGJfd3JpdGVfaW9fdGhyZWFkcyA9IDY0Cmlubm9kYl90aHJlYWRfY29uY3VycmVuY3kgPSAwCmlubm9kYl9mbHVzaF9sb2dfYXRfdHJ4X2NvbW1pdCA9IDAKaW5ub2RiX2ZsdXNoX21ldGhvZCA9IE9fRElSRUNUCnBlcmZvcm1hbmNlX3NjaGVtYSA9IE9OCmlubm9kYi1maWxlLXBlci10YWJsZSA9IDEKaW5ub2RiX2lvX2NhcGFjaXR5PTIwMDAwCmlubm9kYl90YWJsZV9sb2NrcyA9IDAKaW5ub2RiX2xvY2tfd2FpdF90aW1lb3V0ID0gMAppbm5vZGJfZGVhZGxvY2tfZGV0ZWN0ID0gMAppbm5vZGJfbG9nX2ZpbGVfc2l6ZSA9IDUxMk0KCnNxbC1tb2RlPSJOT19FTkdJTkVfU1VCU1RJVFVUSU9OIgoKW215c3FsZHVtcF0KcXVpY2sKcXVvdGUtbmFtZXMKbWF4X2FsbG93ZWRfcGFja2V0ICAgICAgPSAxNk0KCltteXNxbF0KCltpc2FtY2hrXQprZXlfYnVmZmVyX3NpemUgICAgICAgICAgICAgID0gMTZNCg==") class col: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' YELLOW = '\033[33m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' def generate(length=19): return ''.join(random.choice(string.ascii_letters + string.digits) for i in range(length)) def getIP(): ip = urlopen('http://ip.42.pl/raw').read().decode() return ip def getLanIP(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) return s.getsockname()[0] def getVersion(): try: return subprocess.check_output("lsb_release -d".split()).split(":")[-1].strip() except: return "" def printc(rText, rColour=col.OKBLUE, rPadding=0): print("%s ┌─────────────────────────────────────────────────┐ %s" % (rColour, col.ENDC)) for i in range(rPadding): print("%s │ │ %s" % (rColour, col.ENDC)) print("%s │ %s%s%s │ %s" % (rColour, " "*round(23-(len(rText)/2)), rText, " "*round(46-(22-(len(rText)/2))-len(rText)), col.ENDC)) for i in range(rPadding): print("%s │ │ %s" % (rColour, col.ENDC)) print("%s └─────────────────────────────────────────────────┘ %s" % (rColour, col.ENDC)) print(" ") def prepare(rType="MAIN"): global rPackages if rType != "MAIN": rPackages = rPackages[:-3] printc("Preparing Installation") if os.path.isfile('/home/xtreamcodes/iptv_xtream_codes/config'): shutil.copyfile('/home/xtreamcodes/iptv_xtream_codes/config', '/tmp/config.xtmp') os.system('chattr -i /home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb > /dev/null') for rFile in ["/var/lib/dpkg/lock-frontend", "/var/cache/apt/archives/lock", "/var/lib/dpkg/lock"]: try: os.remove(rFile) except: pass os.system("apt-get update > /dev/null") os.system("apt-get full-upgrade -y > /dev/null") for rPackage in rPackages: printc("Installing %s" % rPackage) os.system("apt-get install %s -y > /dev/null" % rPackage) os.system("apt-get install -f > /dev/null") # Clean up above os.system("systemctl start mariadb") try: subprocess.check_output("getent passwd xtreamcodes > /dev/null".split()) except: # Create User printc("Creating user xtreamcodes") os.system("adduser --system --shell /bin/false --group --disabled-login xtreamcodes > /dev/null") if not os.path.exists("/home/xtreamcodes"): os.mkdir("/home/xtreamcodes") return True def install(rType="MAIN"): global rInstall, rDownloadURL printc("Downloading Software") try: rURL = rDownloadURL[rInstall[rType]] except: printc("Invalid download URL!", col.FAIL) return False os.system('wget -q -O "/tmp/xtreamcodes.tar.gz" "%s"' % rURL) if os.path.exists("/tmp/xtreamcodes.tar.gz"): printc("Installing Software") os.system('tar -zxvf "/tmp/xtreamcodes.tar.gz" -C "/home/xtreamcodes/" > /dev/null') try: os.remove("/tmp/xtreamcodes.tar.gz") except: pass return True printc("Failed to download installation file!", col.FAIL) return False def update(rType="MAIN"): rlink ="https://bitbucket.org/le_lio/assets/raw/master/release_22f.zip" hdr = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', 'Connection': 'keep-alive'} req = urllib.request.Request(rlink, headers=hdr) try: urllib.request.urlopen(req) except: printc("Invalid download URL!", col.FAIL) return False print("\n") rURL = rlink printc("Downloading Software Update") print("\n") os.system('wget -q -O "/tmp/update.zip" "%s"' % rURL) if os.path.exists("/tmp/update.zip"): try: is_ok = zipfile.ZipFile("/tmp/update.zip") except: printc("Invalid link or zip file is corrupted!", col.FAIL) os.remove("/tmp/update.zip") return False printc("Updating Software") os.system('chattr -i /home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb > /dev/null && rm -rf /home/xtreamcodes/iptv_xtream_codes/admin > /dev/null && rm -rf /home/xtreamcodes/iptv_xtream_codes/pytools > /dev/null && unzip /tmp/update.zip -d /tmp/update/ > /dev/null && cp -rf /tmp/update/XtreamUI-master/* /home/xtreamcodes/iptv_xtream_codes/ > /dev/null && rm -rf /tmp/update/XtreamUI-master > /dev/null && rm -rf /tmp/update > /dev/null && chown -R xtreamcodes:xtreamcodes /home/xtreamcodes/ > /dev/null && chmod +x /home/xtreamcodes/iptv_xtream_codes/permissions.sh > /dev/null && chattr +i /home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb > /dev/null') if not "sudo chmod 400 /home/xtreamcodes/iptv_xtream_codes/config" in open("/home/xtreamcodes/iptv_xtream_codes/permissions.sh").read(): os.system('echo "#!/bin/bash\nsudo chmod -R 777 /home/xtreamcodes 2>/dev/null\nsudo find /home/xtreamcodes/iptv_xtream_codes/admin/ -type f -exec chmod 644 {} \; 2>/dev/null\nsudo find /home/xtreamcodes/iptv_xtream_codes/admin/ -type d -exec chmod 755 {} \; 2>/dev/null\nsudo find /home/xtreamcodes/iptv_xtream_codes/wwwdir/ -type f -exec chmod 644 {} \; 2>/dev/null\nsudo find /home/xtreamcodes/iptv_xtream_codes/wwwdir/ -type d -exec chmod 755 {} \; 2>/dev/null\nsudo chmod +x /home/xtreamcodes/iptv_xtream_codes/nginx/sbin/nginx 2>/dev/null\nsudo chmod +x /home/xtreamcodes/iptv_xtream_codes/nginx_rtmp/sbin/nginx_rtmp 2>/dev/null\nsudo chmod 400 /home/xtreamcodes/iptv_xtream_codes/config 2>/dev/null" > /home/xtreamcodes/iptv_xtream_codes/permissions.sh') os.system("/home/xtreamcodes/iptv_xtream_codes/permissions.sh > /dev/null") try: os.remove("/tmp/update.zip") except: pass return True printc("Failed to download installation file!", col.FAIL) return False def mysql(rUsername, rPassword): global rMySQLCnf printc("Configuring MySQL") rCreate = True if os.path.exists("/etc/mysql/my.cnf"): if open("/etc/mysql/my.cnf", "r").read(14) == "# Xtream Codes": rCreate = False if rCreate: shutil.copy("/etc/mysql/my.cnf", "/etc/mysql/my.cnf.xc") rFile = open("/etc/mysql/my.cnf", "wb") rFile.write(rMySQLCnf) rFile.close() os.system("systemctl restart mariadb > /dev/null") #printc("Enter MySQL Root Password:", col.WARNING) for i in range(5): rMySQLRoot = "" #raw_input(" ") print(" ") if len(rMySQLRoot) > 0: rExtra = " -p%s" % rMySQLRoot else: rExtra = "" printc("Drop existing & create database? Y/N", col.WARNING) if input(" ").upper() == "Y": rDrop = True else: rDrop = False try: if rDrop: os.system('rm -f /home/xtreamcodes/iptv_xtream_codes/config > /dev/null' ) os.system('mysql -u root%s -e "DROP DATABASE IF EXISTS xtream_iptvpro; CREATE DATABASE IF NOT EXISTS xtream_iptvpro;" > /dev/null' % rExtra) os.system('mysql -u root%s -e "USE xtream_iptvpro; DROP USER IF EXISTS \'%s\'@\'%%\';" ' % (rExtra, rUsername)) os.system("mysql -u root%s xtream_iptvpro < /home/xtreamcodes/iptv_xtream_codes/database.sql > /dev/null" % rExtra) os.system('mysql -u root%s -e "USE xtream_iptvpro; UPDATE settings SET live_streaming_pass = \'%s\', unique_id = \'%s\', crypt_load_balancing = \'%s\';" > /dev/null' % (rExtra, generate(20), generate(10), generate(20))) os.system('mysql -u root%s -e "USE xtream_iptvpro; REPLACE INTO streaming_servers (id, server_name, domain_name, server_ip, vpn_ip, ssh_password, ssh_port, diff_time_main, http_broadcast_port, total_clients, system_os, network_interface, latency, status, enable_geoip, geoip_countries, last_check_ago, can_delete, server_hardware, total_services, persistent_connections, rtmp_port, geoip_type, isp_names, isp_type, enable_isp, boost_fpm, http_ports_add, network_guaranteed_speed, https_broadcast_port, https_ports_add, whitelist_ips, watchdog_data, timeshift_only) VALUES (1, \'Main Server\', \'\', \'%s\', \'\', NULL, NULL, 0, 25461, 1000, \'%s\', \'eth0\', 0, 1, 0, \'\', 0, 0, \'{}\', 3, 0, 25462, \'low_priority\', \'\', \'low_priority\', 0, 1, \'\', 1000, 25463, \'\', \'[\"127.0.0.1\",\"%s\",\"%s\"]\', \'{}\', 0);" > /dev/null' % (rExtra, getLanIP(), getVersion(), getLanIP(), getIP())) os.system('mysql -u root%s -e "USE xtream_iptvpro; REPLACE INTO reg_users (id, username, password, email, member_group_id, verified, status) VALUES (1, \'admin\', \'\$6\$rounds=20000\$xtreamcodes\$XThC5OwfuS0YwS4ahiifzF14vkGbGsFF1w7ETL4sRRC5sOrAWCjWvQJDromZUQoQuwbAXAFdX3h3Cp3vqulpS0\', \'admin@website.com\', 1, 1, 1);" > /dev/null' % rExtra) os.system('mysql -u root%s -e "CREATE USER \'%s\'@\'%%\' IDENTIFIED BY \'%s\'; GRANT ALL PRIVILEGES ON xtream_iptvpro.* TO \'%s\'@\'%%\' WITH GRANT OPTION; GRANT SELECT, LOCK TABLES ON xtream_iptvpro.* TO \'%s\'@\'%%\'; FLUSH PRIVILEGES;"' % (rExtra, rUsername, rPassword, rUsername, rUsername)) os.system('mysql -u root%s -e "USE xtream_iptvpro; CREATE TABLE IF NOT EXISTS dashboard_statistics (id int(11) NOT NULL AUTO_INCREMENT, type varchar(16) NOT NULL DEFAULT \'\', time int(16) NOT NULL DEFAULT \'0\', count int(16) NOT NULL DEFAULT \'0\', PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO dashboard_statistics (type, time, count) VALUES(\'conns\', UNIX_TIMESTAMP(), 0),(\'users\', UNIX_TIMESTAMP(), 0);\" > /dev/null' % rExtra) try: os.remove("/home/xtreamcodes/iptv_xtream_codes/database.sql") except: pass return True except: printc("Invalid password! Try again", col.FAIL) return False def encrypt(rHost="127.0.0.1", rUsername="user_iptvpro", rPassword="", rDatabase="xtream_iptvpro", rServerID=1, rPort=7999): if os.path.isfile('/home/xtreamcodes/iptv_xtream_codes/config'): rDecrypt = decrypt() rHost = rDecrypt["host"] rPassword = rDecrypt["db_pass"] rServerID = int(rDecrypt["server_id"]) rUsername = rDecrypt["db_user"] rDatabase = rDecrypt["db_name"] rPort = int(rDecrypt["db_port"]) printc("Encrypting...") try: os.remove("/home/xtreamcodes/iptv_xtream_codes/config") except: pass rf = open('/home/xtreamcodes/iptv_xtream_codes/config', 'wb') lestring=''.join(chr(ord(c)^ord(k)) for c,k in zip('{\"host\":\"%s\",\"db_user\":\"%s\",\"db_pass\":\"%s\",\"db_name\":\"%s\",\"server_id\":\"%d\", \"db_port\":\"%d\"}' % (rHost, rUsername, rPassword, rDatabase, rServerID, rPort), cycle('5709650b0d7806074842c6de575025b1'))) rf.write(base64.b64encode(bytes(lestring, 'ascii'))) rf.close() def decrypt(): rConfigPath = "/home/xtreamcodes/iptv_xtream_codes/config" try: return json.loads(''.join(chr(c^ord(k)) for c,k in zip(base64.b64decode(open(rConfigPath, 'rb').read()), cycle('5709650b0d7806074842c6de575025b1')))) except: return None def configure(): printc("Configuring System") if not "/home/xtreamcodes/iptv_xtream_codes/" in open("/etc/fstab").read(): rFile = open("/etc/fstab", "a") rFile.write("tmpfs /home/xtreamcodes/iptv_xtream_codes/streams tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=90% 0 0\ntmpfs /home/xtreamcodes/iptv_xtream_codes/tmp tmpfs defaults,noatime,nosuid,nodev,noexec,mode=1777,size=2G 0 0") rFile.close() if not "xtreamcodes" in open("/etc/sudoers").read(): os.system('echo "xtreamcodes ALL = (root) NOPASSWD: /sbin/iptables, /usr/bin/chattr, /usr/bin/python2, /usr/bin/python" >> /etc/sudoers') try: os.remove("/usr/bin/ffmpeg") except: pass if not os.path.exists("/home/xtreamcodes/iptv_xtream_codes/tv_archive"): os.mkdir("/home/xtreamcodes/iptv_xtream_codes/tv_archive/") os.system("ln -s /home/xtreamcodes/iptv_xtream_codes/bin/ffmpeg /usr/bin/") os.system("chattr -i /home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb > /dev/null") os.system("wget -q https://bitbucket.org/le_lio/assets/raw/master/GeoLite2.mmdb -O /home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb") os.system("wget -q https://bitbucket.org/le_lio/assets/raw/master/pid_monitor.php -O /home/xtreamcodes/iptv_xtream_codes/crons/pid_monitor.php") os.system("chown xtreamcodes:xtreamcodes -R /home/xtreamcodes > /dev/null") os.system("chmod -R 0777 /home/xtreamcodes > /dev/null") os.system("chattr +i /home/xtreamcodes/iptv_xtream_codes/GeoLite2.mmdb > /dev/null") os.system("sed -i 's|chown -R xtreamcodes:xtreamcodes /home/xtreamcodes|chown -R xtreamcodes:xtreamcodes /home/xtreamcodes 2>/dev/null|g' /home/xtreamcodes/iptv_xtream_codes/start_services.sh") os.system("chmod +x /home/xtreamcodes/iptv_xtream_codes/start_services.sh > /dev/null") os.system("mount -a") os.system("chmod 0700 /home/xtreamcodes/iptv_xtream_codes/config > /dev/null") os.system("sed -i 's|echo \"Xtream Codes Reborn\";|header(\"Location: https://www.google.com/\");|g' /home/xtreamcodes/iptv_xtream_codes/wwwdir/index.php") if not "api.xtream-codes.com" in open("/etc/hosts").read(): os.system('echo "127.0.0.1 api.xtream-codes.com" >> /etc/hosts') if not "downloads.xtream-codes.com" in open("/etc/hosts").read(): os.system('echo "127.0.0.1 downloads.xtream-codes.com" >> /etc/hosts') if not "xtream-codes.com" in open("/etc/hosts").read(): os.system('echo "127.0.0.1 xtream-codes.com" >> /etc/hosts') # Deploy systemd_start.sh start_script = """#!/bin/bash sudo -u xtreamcodes /home/xtreamcodes/iptv_xtream_codes/php/bin/php /home/xtreamcodes/iptv_xtream_codes/crons/setup_cache.php sudo -u xtreamcodes /home/xtreamcodes/iptv_xtream_codes/php/bin/php /home/xtreamcodes/iptv_xtream_codes/tools/signal_receiver.php >/dev/null 2>/dev/null & sudo -u xtreamcodes /home/xtreamcodes/iptv_xtream_codes/php/bin/php /home/xtreamcodes/iptv_xtream_codes/tools/pipe_reader.php >/dev/null 2>/dev/null & chown -R xtreamcodes:xtreamcodes /sys/class/net chown -R xtreamcodes:xtreamcodes /home/xtreamcodes 2>/dev/null /home/xtreamcodes/iptv_xtream_codes/nginx_rtmp/sbin/nginx_rtmp /home/xtreamcodes/iptv_xtream_codes/nginx/sbin/nginx /home/xtreamcodes/iptv_xtream_codes/php/sbin/php-fpm --daemonize --fpm-config /home/xtreamcodes/iptv_xtream_codes/php/etc/VaiIb8.conf /home/xtreamcodes/iptv_xtream_codes/php/sbin/php-fpm --daemonize --fpm-config /home/xtreamcodes/iptv_xtream_codes/php/etc/JdlJXm.conf /home/xtreamcodes/iptv_xtream_codes/php/sbin/php-fpm --daemonize --fpm-config /home/xtreamcodes/iptv_xtream_codes/php/etc/CWcfSP.conf """ with open('/home/xtreamcodes/iptv_xtream_codes/systemd_start.sh', 'w') as start_file: start_file.write(start_script) # Deploy systemd_stop.sh stop_script = """#!/bin/bash kill $(ps aux | grep 'xtreamc' | grep -v grep | grep -v 'start_services.sh' | awk '{print $2}') 2>/dev/null sleep 1 kill $(ps aux | grep 'xtreamc' | grep -v grep | grep -v 'start_services.sh' | awk '{print $2}') 2>/dev/null sleep 1 kill $(ps aux | grep 'xtreamc' | grep -v grep | grep -v 'start_services.sh' | awk '{print $2}') 2>/dev/null """ with open('/home/xtreamcodes/iptv_xtream_codes/systemd_stop.sh', 'w') as stop_file: stop_file.write(stop_script) # Deploy xtreamui-22.service service_unit = """[Unit] Description=XtreamUI Main 20.04 NeySlim Edition After=network-online.target Wants=network-online.target [Service] Type=forking ExecStart=/home/xtreamcodes/iptv_xtream_codes/systemd_start.sh ExecStop=/home/xtreamcodes/iptv_xtream_codes/systemd_stop.sh TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no [Install] WantedBy=multi-user.target """ with open('/etc/systemd/system/xtreamui.service', 'w') as service_file: service_file.write(service_unit) os.system('chown xtreamcodes. /home/xtreamcodes/iptv_xtream_codes/systemd_st*') os.system('chmod +x /home/xtreamcodes/iptv_xtream_codes/systemd_st*') os.system('systemctl daemon-reload') os.system('systemctl enable xtreamui.service') def start(first=True): if first: printc("Starting Xtream Codes") else: printc("Restarting Xtream Codes") os.system("/home/xtreamcodes/iptv_xtream_codes/systemd_stop.sh") os.system("systemctl restart xtreamui") def modifyNginx(): printc("Modifying Nginx") rPath = "/home/xtreamcodes/iptv_xtream_codes/nginx/conf/nginx.conf" rPrevData = open(rPath, "r").read() if not "listen 25500;" in rPrevData: shutil.copy(rPath, "%s.xc" % rPath) rData = "}".join(rPrevData.split("}")[:-1]) + " server {\n listen 25500;\n index index.php index.html index.htm;\n root /home/xtreamcodes/iptv_xtream_codes/admin/;\n\n location ~ \.php$ {\n limit_req zone=one burst=8;\n try_files $uri =404;\n fastcgi_index index.php;\n fastcgi_pass php;\n include fastcgi_params;\n fastcgi_buffering on;\n fastcgi_buffers 96 32k;\n fastcgi_buffer_size 32k;\n fastcgi_max_temp_file_size 0;\n fastcgi_keep_conn on;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n fastcgi_param SCRIPT_NAME $fastcgi_script_name;\n }\n }\n}" rFile = open(rPath, "w") rFile.write(rData) rFile.close() if __name__ == "__main__": printc("XtreamUI 20.04 Installer - NeySlim Edition", col.OKGREEN, 2) print(" ") rType = "MAIN" print(" ") if rType.upper() in ["MAIN", "LB"]: rHost = "127.0.0.1" rPassword = generate() rServerID = 1 rUsername = "user_iptvpro" rDatabase = "xtream_iptvpro" rPort = 7999 if len(rHost) > 0 and len(rPassword) > 0 and rServerID > -1: printc("Start installation? Y/N", col.WARNING) if input(" ").upper() == "Y": print(" ") rRet = prepare(rType.upper()) if not install(rType.upper()): sys.exit(1) if rType.upper() == "MAIN": if not mysql(rUsername, rPassword): sys.exit(1) encrypt(rHost, rUsername, rPassword, rDatabase, rServerID, rPort) configure() if rType.upper() == "MAIN": modifyNginx() start() printc("Installation completed!", col.OKGREEN, 2) if rType.upper() == "MAIN": printc("Please store your MySQL password!") printc(rPassword) printc("Admin UI Wan IP: http://%s:25500" % getIP()) printc("Admin UI Lan IP: http://%s:25500" % getLanIP()) printc("Admin UI default login is admin/admin") else: printc("Installation cancelled", col.FAIL) else: printc("Invalid entries", col.FAIL)