HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/ftp/ftpManager.py
#!/usr/local/CyberCP/bin/python
import os.path
import sys
import errno
import django
sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
import json
from plogical.httpProc import httpProc
from django.http import HttpResponse
try:
    from .models import Users
    from loginSystem.models import Administrator
except:
    pass
import plogical.CyberCPLogFileWriter as logging
try:
    from loginSystem.views import loadLoginPage
    from websiteFunctions.models import Websites
    from plogical.ftpUtilities import FTPUtilities
    from plogical.acl import ACLManager
except:
    pass
import os

from plogical.processUtilities import ProcessUtilities
import argparse

class FTPManager:
    def __init__(self, request, extraArgs = None):
        self.request = request
        self.extraArgs = extraArgs

    def loadFTPHome(self):
        proc = httpProc(self.request, 'ftp/index.html',
                        None, 'createFTPAccount')
        return proc.render()

    def createFTPAccount(self):
        userID = self.request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        admin = Administrator.objects.get(pk=userID)

        if not os.path.exists('/home/cyberpanel/pureftpd'):
            proc = httpProc(self.request, 'ftp/createFTPAccount.html',
                            {"status": 0}, 'createFTPAccount')
            return proc.render()

        websitesName = ACLManager.findAllSites(currentACL, userID)

        proc = httpProc(self.request, 'ftp/createFTPAccount.html',
                        {'websiteList': websitesName, 'OwnerFTP': admin.userName, "status": 1}, 'createFTPAccount')
        return proc.render()

    def submitFTPCreation(self):
        try:
            userID = self.request.session['userID']
            currentACL = ACLManager.loadedACL(userID)

            if ACLManager.currentContextPermission(currentACL, 'createFTPAccount') == 0:
                return ACLManager.loadErrorJson('creatFTPStatus', 0)

            data = json.loads(self.request.body)
            userName = data['ftpUserName']
            password = data['passwordByPass']

            domainName = data['ftpDomain']

            admin = Administrator.objects.get(pk=userID)

            if ACLManager.checkOwnership(domainName, admin, currentACL) == 1:
                pass
            else:
                return ACLManager.loadError()

            try:
                api = data['api']
            except:
                api = '0'

            admin = Administrator.objects.get(id=userID)

            try:
                path = data['path']
                if len(path) > 0:
                    pass
                else:
                    path = 'None'
            except:
                path = 'None'


            result = FTPUtilities.submitFTPCreation(domainName, userName, password, path, admin.userName, api)

            if result[0] == 1:
                data_ret = {'status': 1, 'creatFTPStatus': 1, 'error_message': 'None'}
                json_data = json.dumps(data_ret)
                return HttpResponse(json_data)
            else:
                data_ret = {'status': 0, 'creatFTPStatus': 0, 'error_message': result[1]}
                json_data = json.dumps(data_ret)
                return HttpResponse(json_data)

        except BaseException as msg:
            data_ret = {'status': 0, 'creatFTPStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    def deleteFTPAccount(self):
        userID = self.request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if not os.path.exists('/home/cyberpanel/pureftpd'):
            proc = httpProc(self.request, 'ftp/deleteFTPAccount.html',
                            {"status": 0}, 'deleteFTPAccount')
            return proc.render()

        websitesName = ACLManager.findAllSites(currentACL, userID)

        proc = httpProc(self.request, 'ftp/deleteFTPAccount.html',
                        {'websiteList': websitesName, "status": 1}, 'deleteFTPAccount')
        return proc.render()

    def fetchFTPAccounts(self):
        try:
            userID = self.request.session['userID']
            currentACL = ACLManager.loadedACL(userID)

            if ACLManager.currentContextPermission(currentACL, 'deleteFTPAccount') == 0:
                return ACLManager.loadErrorJson('fetchStatus', 0)

            data = json.loads(self.request.body)
            domain = data['ftpDomain']

            admin = Administrator.objects.get(pk=userID)
            if ACLManager.checkOwnership(domain, admin, currentACL) == 1:
                pass
            else:
                return ACLManager.loadErrorJson()

            website = Websites.objects.get(domain=domain)

            ftpAccounts = website.users_set.all()

            json_data = "["
            checker = 0

            for items in ftpAccounts:
                dic = {"userName": items.user}

                if checker == 0:
                    json_data = json_data + json.dumps(dic)
                    checker = 1
                else:
                    json_data = json_data + ',' + json.dumps(dic)

            json_data = json_data + ']'
            final_json = json.dumps({'fetchStatus': 1, 'error_message': "None", "data": json_data})
            return HttpResponse(final_json)

        except BaseException as msg:
            data_ret = {'fetchStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    def submitFTPDelete(self):
        try:
            userID = self.request.session['userID']
            currentACL = ACLManager.loadedACL(userID)

            if ACLManager.currentContextPermission(currentACL, 'deleteFTPAccount') == 0:
                return ACLManager.loadErrorJson('deleteStatus', 0)

            data = json.loads(self.request.body)
            ftpUserName = data['ftpUsername']

            admin = Administrator.objects.get(pk=userID)
            ftp = Users.objects.get(user=ftpUserName)

            if ACLManager.checkOwnership(ftp.domain.domain, admin, currentACL) == 1:
                pass
            else:
                return ACLManager.loadErrorJson()

            FTPUtilities.submitFTPDeletion(ftpUserName)

            final_json = json.dumps({'status': 1, 'deleteStatus': 1, 'error_message': "None"})
            return HttpResponse(final_json)

        except BaseException as msg:
            data_ret = {'status': 0, 'deleteStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    def listFTPAccounts(self):
        userID = self.request.session['userID']
        currentACL = ACLManager.loadedACL(userID)

        if not os.path.exists('/home/cyberpanel/pureftpd'):
            proc = httpProc(self.request, 'ftp/listFTPAccounts.html',
                            {"status": 0}, 'listFTPAccounts')
            return proc.render()

        websitesName = ACLManager.findAllSites(currentACL, userID)
        proc = httpProc(self.request, 'ftp/listFTPAccounts.html',
                        {'websiteList': websitesName, "status": 1}, 'listFTPAccounts')
        return proc.render()

    def getAllFTPAccounts(self):
        try:
            userID = self.request.session['userID']
            currentACL = ACLManager.loadedACL(userID)

            if ACLManager.currentContextPermission(currentACL, 'listFTPAccounts') == 0:
                return ACLManager.loadErrorJson('fetchStatus', 0)

            data = json.loads(self.request.body)
            selectedDomain = data['selectedDomain']

            domain = Websites.objects.get(domain=selectedDomain)

            admin = Administrator.objects.get(pk=userID)
            if ACLManager.checkOwnership(selectedDomain, admin, currentACL) == 1:
                pass
            else:
                return ACLManager.loadErrorJson()

            records = Users.objects.filter(domain=domain)

            json_data = "["
            checker = 0

            for items in records:
                dic = {'id': items.id,
                       'user': items.user,
                       'dir': items.dir,
                       'quotasize': str(items.quotasize) + "MB",
                       }

                if checker == 0:
                    json_data = json_data + json.dumps(dic)
                    checker = 1
                else:
                    json_data = json_data + ',' + json.dumps(dic)

            json_data = json_data + ']'
            final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
            return HttpResponse(final_json)

        except BaseException as msg:
            final_dic = {'status': 0, 'fetchStatus': 0, 'error_message': str(msg)}
            final_json = json.dumps(final_dic)
            return HttpResponse(final_json)

    def changePassword(self):
        try:
            userID = self.request.session['userID']
            currentACL = ACLManager.loadedACL(userID)

            if ACLManager.currentContextPermission(currentACL, 'listFTPAccounts') == 0:
                return ACLManager.loadErrorJson('changePasswordStatus', 0)

            data = json.loads(self.request.body)
            userName = data['ftpUserName']
            password = data['passwordByPass']

            admin = Administrator.objects.get(pk=userID)
            ftp = Users.objects.get(user=userName)

            if currentACL['admin'] == 1:
                pass
            elif ftp.domain.admin != admin:
                return ACLManager.loadErrorJson()

            FTPUtilities.changeFTPPassword(userName, password)

            data_ret = {'status': 1, 'changePasswordStatus': 1, 'error_message': "None"}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)
        except BaseException as msg:
            data_ret = {'status': 0, 'changePasswordStatus': 0, 'error_message': str(msg)}
            json_data = json.dumps(data_ret)
            return HttpResponse(json_data)

    def installPureFTPD(self):

        def pureFTPDServiceName():
            if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
                return 'pure-ftpd-mysql'
            return 'pure-ftpd'

        #### new install

        if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:

            command = 'DEBIAN_FRONTEND=noninteractive apt purge pure-ftp* -y'
            ProcessUtilities.executioner(command, 'root', True)


            command = 'DEBIAN_FRONTEND=noninteractive apt install pure-ftpd-mysql -y'
            ProcessUtilities.executioner(command, 'root', True)

        elif ProcessUtilities.decideDistro() == ProcessUtilities.centos:

            command = 'yum erase pure-ftp* -y'
            ProcessUtilities.executioner(command, 'root', True)

            command = "yum install -y pure-ftpd"
            ProcessUtilities.executioner(command, 'root', True)
        elif ProcessUtilities.decideDistro() == ProcessUtilities.cent8:

            command = 'yum erase pure-ftp* -y'
            ProcessUtilities.executioner(command, 'root', True)

            command = 'dnf install pure-ftpd -y'
            ProcessUtilities.executioner(command, 'root', True)

        ####### Install pureftpd to system startup

        command = "systemctl enable " + pureFTPDServiceName()
        ProcessUtilities.executioner(command, 'root', True)

        ###### FTP Groups and user settings settings

        command = 'groupadd -g 2001 ftpgroup'
        ProcessUtilities.executioner(command, 'root', True)

        command = 'useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser'
        ProcessUtilities.executioner(command, 'root', True)

        return 1

    def startPureFTPD(self):
        ############## Start pureftpd ######################
        if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
            serviceName = 'pure-ftpd-mysql'
            command = 'systemctl start pure-ftpd-mysql'
        else:
            serviceName = 'pure-ftpd'
            command = 'systemctl start pure-ftpd'
        
        ProcessUtilities.executioner(command)
        
        # Give service time to start
        import time
        time.sleep(2)
        
        # Check if service started successfully
        command = 'systemctl is-active %s' % serviceName
        output = ProcessUtilities.outputExecutioner(command)
        
        if output.strip() != 'active':
            logging.CyberCPLogFileWriter.writeToFile('[ERROR] Pure-FTPd failed to start. Service status: ' + output)
            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
                                                      '[ERROR] Pure-FTPd service failed to start properly [404]')
            return 0

        return 1

    def installPureFTPDConfigurations(self, mysqlPassword):
        # try:
        #     ## setup ssl for ftp
        #
        #     try:
        #         os.mkdir("/etc/ssl/private")
        #     except:
        #         pass
        #
        #     if (ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8) or (
        #             ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20 and ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu):
        #         command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem'
        #     else:
        #         command = 'openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem'
        #
        #     ProcessUtilities.executioner(command)
        #
        #     import shutil
        #
        #     ftpdPath = "/etc/pure-ftpd"
        #
        #     if os.path.exists(ftpdPath):
        #         shutil.rmtree(ftpdPath)
        #         shutil.copytree("/usr/local/CyberCP/install/pure-ftpd-one", ftpdPath)
        #
        #     else:
        #         shutil.copytree("/usr/local/CyberCP/install/pure-ftpd-one", ftpdPath)
        #
        #
        #     if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
        #         try:
        #             os.mkdir('/etc/pure-ftpd/conf')
        #             os.mkdir('/etc/pure-ftpd/auth')
        #             os.mkdir('/etc/pure-ftpd/db')
        #         except OSError as err:
        #             pass
        #
        #     data = open(ftpdPath + "/pureftpd-mysql.conf", "r").readlines()
        #
        #     writeDataToFile = open(ftpdPath + "/pureftpd-mysql.conf", "w")
        #
        #     dataWritten = "MYSQLPassword " + mysqlPassword + '\n'
        #     for items in data:
        #         if items.find("MYSQLPassword") > -1:
        #             writeDataToFile.writelines(dataWritten)
        #         else:
        #             writeDataToFile.writelines(items)
        #
        #     writeDataToFile.close()
        #
        #     ftpConfPath = '/etc/pure-ftpd/pureftpd-mysql.conf'
        #
        #     if self.remotemysql == 'ON':
        #         command = "sed -i 's|localhost|%s|g' %s" % (self.mysqlhost, ftpConfPath)
        #         ProcessUtilities.executioner(command)
        #
        #         command = "sed -i 's|3306|%s|g' %s" % (self.mysqlport, ftpConfPath)
        #         ProcessUtilities.executioner(command)
        #
        #         command = "sed -i 's|MYSQLSocket /var/lib/mysql/mysql.sock||g' %s" % (ftpConfPath)
        #         ProcessUtilities.executioner(command)
        #
        #     if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu:
        #
        #         if os.path.exists('/etc/pure-ftpd/db/mysql.conf'):
        #             os.remove('/etc/pure-ftpd/db/mysql.conf')
        #             shutil.copy(ftpdPath + "/pureftpd-mysql.conf", '/etc/pure-ftpd/db/mysql.conf')
        #         else:
        #             shutil.copy(ftpdPath + "/pureftpd-mysql.conf", '/etc/pure-ftpd/db/mysql.conf')
        #
        #         import subprocess
        #         command = 'echo 1 > /etc/pure-ftpd/conf/TLS'
        #         subprocess.call(command, shell=True)
        #
        #         command = 'echo %s > /etc/pure-ftpd/conf/ForcePassiveIP' % (self.publicip)
        #         subprocess.call(command, shell=True)
        #
        #         command = 'echo "40110 40210" > /etc/pure-ftpd/conf/PassivePortRange'
        #         subprocess.call(command, shell=True)
        #
        #         command = 'echo "no" > /etc/pure-ftpd/conf/UnixAuthentication'
        #         subprocess.call(command, shell=True)
        #
        #         command = 'echo "/etc/pure-ftpd/db/mysql.conf" > /etc/pure-ftpd/conf/MySQLConfigFile'
        #         subprocess.call(command, shell=True)
        #
        #         command = 'ln -s /etc/pure-ftpd/conf/MySQLConfigFile /etc/pure-ftpd/auth/30mysql'
        #         ProcessUtilities.executioner(command)
        #
        #         command = 'ln -s /etc/pure-ftpd/conf/UnixAuthentication /etc/pure-ftpd/auth/65unix'
        #         ProcessUtilities.executioner(command)
        #
        #         command = 'systemctl restart pure-ftpd-mysql.service'
        #         ProcessUtilities.executioner(command)
        #
        #     return 1
        #
        # except IOError as msg:
        #     return 0

        try:
            ## setup ssl for ftp

            try:
                if not os.path.exists("/etc/ssl/private"):
                    os.makedirs("/etc/ssl/private", mode=0o755)
            except OSError as e:
                if e.errno != errno.EEXIST:
                    logging.CyberCPLogFileWriter.writeToFile("[ERROR] Could not create directory for FTP SSL: " + str(e))
                    raise

            if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
                command = 'openssl req -newkey rsa:1024 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem'
            else:
                command = 'openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem'

            ProcessUtilities.executioner(command, 'root', True)

            ### let see if this is needed the chdir
            cwd = os.getcwd()
            os.chdir('/usr/local/CyberCP/install')
            ftpdPath = "/etc/pure-ftpd"
            import shutil

            if os.path.exists(ftpdPath):
                shutil.rmtree(ftpdPath)

                shutil.copytree("pure-ftpd-one", ftpdPath)
            else:

                shutil.copytree("pure-ftpd-one", ftpdPath)

            if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
                try:
                    os.mkdir('/etc/pure-ftpd/conf')
                    os.mkdir('/etc/pure-ftpd/auth')
                    os.mkdir('/etc/pure-ftpd/db')
                except BaseException as msg:
                    logging.CyberCPLogFileWriter.writeToFile("[ERROR] Error creating extra pure-ftpd directories: " + str(msg), ".  Should be ok", 1)
                    logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], "[ERROR] Error creating extra pure-ftpd directories: " + str(msg), "" + " [installPureFTPDConfigurations][404]")
                    return 0

            data = open(ftpdPath + "/pureftpd-mysql.conf", "r").readlines()

            writeDataToFile = open(ftpdPath + "/pureftpd-mysql.conf", "w")

            dataWritten = "MYSQLPassword " + mysqlPassword + '\n'
            for items in data:
                if items.find("MYSQLPassword") > -1:
                    writeDataToFile.writelines(dataWritten)
                else:
                    writeDataToFile.writelines(items)

            writeDataToFile.close()

            ftpConfPath = '/etc/pure-ftpd/pureftpd-mysql.conf'

            if self.remotemysql == 'ON':
                command = "sed -i 's|localhost|%s|g' %s" % (self.mysqlhost, ftpConfPath)
                ProcessUtilities.executioner(command, 'root', True)

                command = "sed -i 's|3306|%s|g' %s" % (self.mysqlport, ftpConfPath)
                ProcessUtilities.executioner(command, 'root', True)

                command = "sed -i 's|MYSQLSocket /var/lib/mysql/mysql.sock||g' %s" % (ftpConfPath)
                ProcessUtilities.executioner(command, 'root', True)

            if ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:

                if os.path.exists('/etc/pure-ftpd/db/mysql.conf'):
                    os.remove('/etc/pure-ftpd/db/mysql.conf')
                    shutil.copy(ftpdPath + "/pureftpd-mysql.conf", '/etc/pure-ftpd/db/mysql.conf')
                else:
                    shutil.copy(ftpdPath + "/pureftpd-mysql.conf", '/etc/pure-ftpd/db/mysql.conf')

                command = 'echo 1 > /etc/pure-ftpd/conf/TLS'
                ProcessUtilities.executioner(command, 'root', True)

                command = 'echo %s > /etc/pure-ftpd/conf/ForcePassiveIP' % (ACLManager.fetchIP())
                ProcessUtilities.executioner(command, 'root', True)

                command = 'echo "40110 40210" > /etc/pure-ftpd/conf/PassivePortRange'
                ProcessUtilities.executioner(command, 'root', True)

                command = 'echo "no" > /etc/pure-ftpd/conf/UnixAuthentication'
                ProcessUtilities.executioner(command, 'root', True)

                command = 'echo "/etc/pure-ftpd/db/mysql.conf" > /etc/pure-ftpd/conf/MySQLConfigFile'
                ProcessUtilities.executioner(command, 'root', True)

                command = 'ln -s /etc/pure-ftpd/conf/MySQLConfigFile /etc/pure-ftpd/auth/30mysql'
                ProcessUtilities.executioner(command, 'root', True)

                command = 'ln -s /etc/pure-ftpd/conf/UnixAuthentication /etc/pure-ftpd/auth/65unix'
                ProcessUtilities.executioner(command, 'root', True)

                command = 'systemctl restart pure-ftpd-mysql.service'
                ProcessUtilities.executioner(command, 'root', True)

                ProcessUtilities.decideDistro()

                if ProcessUtilities.ubuntu22Check:
                    ### change mysql md5 to crypt

                    command = "sed -i 's/MYSQLCrypt md5/MYSQLCrypt crypt/g' /etc/pure-ftpd/db/mysql.conf"
                    ProcessUtilities.executioner(command, 'root', True)

                    command = "systemctl restart pure-ftpd-mysql.service"
                    ProcessUtilities.executioner(command, 'root', True)

            # from plogical.mailUtilities import mailUtilities
            # PostFixHostname = mailUtilities.FetchPostfixHostname()
            # pathToStoreSSLFullChain = '/etc/letsencrypt/live/' + PostFixHostname + '/fullchain.pem'
            # pathToStoreSSLPrivKey = '/etc/letsencrypt/live/' + PostFixHostname + '/privkey.pem'
            # if ProcessUtilities != 'localhost':
            #
            #     if os.path.exists('/etc/ssl/private/pure-ftpd.pem'):
            #     ## create symlink for hostname SSL for lsws webadmin SSL
            #         os.remove('/etc/ssl/private/pure-ftpd.pem')
            #         command = 'ln -s %s /etc/ssl/private/pure-ftpd.pem' % (pathToStoreSSLFullChain)
            #         ProcessUtilities.normalExecutioner(command)


            os.chdir(cwd)


        except IOError as msg:
            logging.CyberCPLogFileWriter.writeToFile('[ERROR] ' + str(msg) + " [installPureFTPDConfigurations]")
            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], '[ERROR] ' + str(msg) + " [installPureFTPDConfigurations][404]")
            return 0

    def ResetFTPConfigurations(self):
        try:
            ### Check if remote or local mysql

            passFile = "/etc/cyberpanel/mysqlPassword"

            try:
                jsonData = json.loads(ProcessUtilities.outputExecutioner('cat %s' % (passFile)))

                self.mysqluser = jsonData['mysqluser']
                self.mysqlpassword = jsonData['mysqlpassword']
                self.mysqlport = jsonData['mysqlport']
                self.mysqlhost = jsonData['mysqlhost']
                self.remotemysql = 'ON'

                if self.mysqlhost.find('rds.amazon') > -1:
                    self.RDS = 1

                ## Also set localhost to this server

                ipFile = "/etc/cyberpanel/machineIP"
                f = open(ipFile)
                ipData = f.read()
                ipAddressLocal = ipData.split('\n', 1)[0]

                self.LOCALHOST = ipAddressLocal
            except BaseException as msg:
                self.remotemysql = 'OFF'

                if os.path.exists(ProcessUtilities.debugPath):
                    logging.CyberCPLogFileWriter.writeToFile('%s. [setupConnection:75]' % (str(msg)))

            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Removing and re-installing FTP..,5')

            if self.installPureFTPD() == 0:
                logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
                                                          'installPureFTPD failed. [404].')
                return 0

            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Resetting configurations..,40')

            import sys
            sys.path.append('/usr/local/CyberCP')
            os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
            from CyberCP import settings

            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Configurations reset..,70')

            if self.installPureFTPDConfigurations(settings.DATABASES['default']['PASSWORD']) == 0:
                logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'installPureFTPDConfigurations failed. [404].')
                return 0

            if self.startPureFTPD() == 0:
                logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'],
                                                          'startPureFTPD failed. [404].')
                return 0

            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Fixing permissions..,90')

            ACLManager.fixPermissions()
            logging.CyberCPLogFileWriter.statusWriter(self.extraArgs['tempStatusPath'], 'Completed [200].')

        except BaseException as msg:
            final_dic = {'status': 0, 'error_message': str(msg)}
            final_json = json.dumps(final_dic)
            return HttpResponse(final_json)

def main():

    parser = argparse.ArgumentParser(description='CyberPanel')
    parser.add_argument('function', help='Specify a function to call!')
    parser.add_argument('--tempStatusPath', help='Path of temporary status file.')

    args = parser.parse_args()

    if args.function == "ResetFTPConfigurations":
        extraArgs = {'tempStatusPath': args.tempStatusPath}
        ftp = FTPManager(None, extraArgs)
        ftp.ResetFTPConfigurations()

if __name__ == "__main__":
    main()