mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-07 13:56:01 +01:00
bug fix for ubuntu and docker manager
This commit is contained in:
@@ -10,9 +10,27 @@ class secMiddleware:
|
||||
def __call__(self, request):
|
||||
try:
|
||||
uID = request.session['userID']
|
||||
if request.session['ipAddr'] == request.META.get('REMOTE_ADDR'):
|
||||
ipAddr = request.META.get('REMOTE_ADDR')
|
||||
|
||||
if ipAddr.find('.') > -1:
|
||||
if request.session['ipAddr'] == ipAddr:
|
||||
pass
|
||||
else:
|
||||
del request.session['userID']
|
||||
del request.session['ipAddr']
|
||||
logging.writeToFile(request.META.get('REMOTE_ADDR'))
|
||||
final_dic = {'error_message': "Session reuse detected, IPAddress logged.",
|
||||
"errorMessage": "Session reuse detected, IPAddress logged."}
|
||||
final_json = json.dumps(final_dic)
|
||||
return HttpResponse(final_json)
|
||||
else:
|
||||
ipAddr = request.META.get('REMOTE_ADDR').split(':')[:3]
|
||||
|
||||
if request.session['ipAddr'] == ipAddr:
|
||||
pass
|
||||
else:
|
||||
del request.session['userID']
|
||||
del request.session['ipAddr']
|
||||
logging.writeToFile(request.META.get('REMOTE_ADDR'))
|
||||
final_dic = {'error_message': "Session reuse detected, IPAddress logged.",
|
||||
"errorMessage": "Session reuse detected, IPAddress logged."}
|
||||
@@ -40,9 +58,9 @@ class secMiddleware:
|
||||
else:
|
||||
continue
|
||||
|
||||
if request.build_absolute_uri().find('cloudAPI') > -1 or request.build_absolute_uri().find('filemanager') > -1 or request.build_absolute_uri().find('verifyLogin') > -1 or request.build_absolute_uri().find('submitUserCreation') > -1:
|
||||
if request.build_absolute_uri().find('docker') > -1 or request.build_absolute_uri().find('cloudAPI') > -1 or request.build_absolute_uri().find('filemanager') > -1 or request.build_absolute_uri().find('verifyLogin') > -1 or request.build_absolute_uri().find('submitUserCreation') > -1:
|
||||
continue
|
||||
if key == 'passwordByPass' or key == 'cronCommand' or key == 'emailMessage' or key == 'configData' or key == 'rewriteRules' or key == 'modSecRules' or key == 'recordContentTXT' or key == 'SecAuditLogRelevantStatus' or key == 'fileContent':
|
||||
if key == 'imageByPass' or key == 'passwordByPass' or key == 'cronCommand' or key == 'emailMessage' or key == 'configData' or key == 'rewriteRules' or key == 'modSecRules' or key == 'recordContentTXT' or key == 'SecAuditLogRelevantStatus' or key == 'fileContent':
|
||||
continue
|
||||
if value.find(';') > -1 or value.find('&&') > -1 or value.find('|') > -1 or value.find('...') > -1 \
|
||||
or value.find("`") > -1 or value.find("$") > -1 or value.find("(") > -1 or value.find(")") > -1 \
|
||||
|
||||
@@ -1035,8 +1035,7 @@ class BackupManager:
|
||||
|
||||
##
|
||||
|
||||
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/remoteTransferUtilities.py"
|
||||
|
||||
execPath = "python " + virtualHostUtilities.cyberPanel + "/plogical/remoteTransferUtilities.py"
|
||||
execPath = execPath + " remoteBackupRestore --backupDirComplete " + backupDirComplete + " --backupDir " + str(
|
||||
backupDir)
|
||||
|
||||
@@ -1074,14 +1073,14 @@ class BackupManager:
|
||||
status = ProcessUtilities.outputExecutioner(command)
|
||||
|
||||
if status.find("completed[success]") > -1:
|
||||
command = "sudo rm -rf " + removalPath
|
||||
# subprocess.call(shlex.split(command))
|
||||
command = "rm -rf " + removalPath
|
||||
ProcessUtilities.executioner(command)
|
||||
data_ret = {'remoteTransferStatus': 1, 'error_message': "None", "status": status, "complete": 1}
|
||||
json_data = json.dumps(data_ret)
|
||||
return HttpResponse(json_data)
|
||||
elif status.find("[5010]") > -1:
|
||||
command = "sudo rm -rf " + removalPath
|
||||
# subprocess.call(shlex.split(command))
|
||||
ProcessUtilities.executioner(command)
|
||||
data = {'remoteTransferStatus': 0, 'error_message': status,
|
||||
"status": "None", "complete": 0}
|
||||
json_data = json.dumps(data)
|
||||
|
||||
@@ -190,7 +190,7 @@ class DatabaseManager:
|
||||
userName = data['dbUserName']
|
||||
dbPassword = data['dbPassword']
|
||||
|
||||
db = Databases.objects.get(dbName=userName)
|
||||
db = Databases.objects.get(dbUser=userName)
|
||||
|
||||
admin = Administrator.objects.get(pk=userID)
|
||||
if ACLManager.checkOwnership(db.website.domain, admin, currentACL) == 1:
|
||||
|
||||
@@ -386,10 +386,14 @@ class FirewallManager:
|
||||
FirewallUtilities.deleteRule("tcp", updateFW.port, "0.0.0.0/0")
|
||||
updateFW.port = sshPort
|
||||
updateFW.save()
|
||||
FirewallUtilities.addRule('tcp', sshPort, "0.0.0.0/0")
|
||||
except:
|
||||
try:
|
||||
newFireWallRule = FirewallRules(name="SSHCustom", port=sshPort, proto="tcp")
|
||||
newFireWallRule.save()
|
||||
FirewallUtilities.addRule('tcp', sshPort, "0.0.0.0/0")
|
||||
command = 'firewall-cmd --permanent --remove-service=ssh'
|
||||
ProcessUtilities.executioner(command)
|
||||
except BaseException, msg:
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ class FTPManager:
|
||||
|
||||
data = json.loads(self.request.body)
|
||||
userName = data['ftpUserName']
|
||||
password = data['ftpPassword']
|
||||
password = data['passwordByPass']
|
||||
|
||||
admin = Administrator.objects.get(pk=userID)
|
||||
ftp = Users.objects.get(user=userName)
|
||||
|
||||
@@ -328,7 +328,7 @@ app.controller('listFTPAccounts', function ($scope, $http) {
|
||||
|
||||
var data = {
|
||||
ftpUserName: globalFTPUsername,
|
||||
ftpPassword: $scope.ftpPassword,
|
||||
passwordByPass: $scope.ftpPassword,
|
||||
};
|
||||
|
||||
var config = {
|
||||
|
||||
@@ -1151,7 +1151,7 @@ class preFlightsChecks:
|
||||
'Change permissions for client.', 1, 0, os.EX_OSERR)
|
||||
|
||||
impFile = ['/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf', '/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
|
||||
'/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf']
|
||||
'/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf', '/etc/pure-ftpd/db/mysql.conf']
|
||||
|
||||
for items in impFile:
|
||||
command = 'chmod 600 %s' % (items)
|
||||
@@ -2470,6 +2470,7 @@ enabled=1"""
|
||||
FirewallUtilities.addRule("tcp", "993")
|
||||
FirewallUtilities.addRule("udp", "53")
|
||||
FirewallUtilities.addRule("tcp", "53")
|
||||
FirewallUtilities.addRule("udp", "443")
|
||||
FirewallUtilities.addRule("tcp", "40110-40210")
|
||||
|
||||
logging.InstallLog.writeToFile("FirewallD installed and configured!")
|
||||
|
||||
@@ -599,7 +599,7 @@ class InstallCyberPanel:
|
||||
"/etc/resolv.conf'", 1, 1, os.EX_OSERR)
|
||||
|
||||
if self.distro == centos:
|
||||
command = 'yum -y install epel-release yum-plugin-priorities'
|
||||
command = 'yum -y install epel-release'
|
||||
install.preFlightsChecks.call(command, self.distro, '[installPowerDNS]',
|
||||
'Install PowerDNS',
|
||||
1, 1, os.EX_OSERR)
|
||||
|
||||
@@ -15,6 +15,7 @@ import CyberCP.settings as settings
|
||||
from models import ACL
|
||||
from plogical.acl import ACLManager
|
||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
|
||||
# Create your views here.
|
||||
|
||||
def verifyLogin(request):
|
||||
@@ -116,7 +117,15 @@ def verifyLogin(request):
|
||||
if hashPassword.check_password(admin.password, password):
|
||||
|
||||
request.session['userID'] = admin.pk
|
||||
|
||||
ipAddr = request.META.get('REMOTE_ADDR')
|
||||
|
||||
if ipAddr.find(':') > -1:
|
||||
ipAddr = ipAddr.split(':')[:3]
|
||||
request.session['ipAddr'] = ''.join(ipAddr)
|
||||
else:
|
||||
request.session['ipAddr'] = request.META.get('REMOTE_ADDR')
|
||||
|
||||
request.session.set_expiry(3600)
|
||||
data = {'userID': admin.pk, 'loginStatus': 1, 'error_message': "None"}
|
||||
json_data = json.dumps(data)
|
||||
@@ -195,6 +204,9 @@ def loadLoginPage(request):
|
||||
newFWRule = FirewallRules(name="ftptls", proto="tcp", port="40110-40210")
|
||||
newFWRule.save()
|
||||
|
||||
newFWRule = FirewallRules(name="quic", proto="udp", port="443")
|
||||
newFWRule.save()
|
||||
|
||||
if numberOfAdministrator == 0:
|
||||
ACLManager.createDefaultACLs()
|
||||
acl = ACL.objects.get(name='admin')
|
||||
|
||||
@@ -377,7 +377,7 @@ class MailServerManager:
|
||||
|
||||
data = json.loads(self.request.body)
|
||||
email = data['email']
|
||||
password = data['password']
|
||||
password = data['passwordByPass']
|
||||
|
||||
emailDB = EUsers.objects.get(email=email)
|
||||
|
||||
@@ -393,6 +393,8 @@ class MailServerManager:
|
||||
password = '{CRYPT}%s' % (password)
|
||||
emailDB.password = password
|
||||
else:
|
||||
password = bcrypt.hashpw(str(password), bcrypt.gensalt())
|
||||
password = '{CRYPT}%s' % (password)
|
||||
emailDB.password = password
|
||||
|
||||
emailDB.save()
|
||||
|
||||
@@ -391,7 +391,7 @@ app.controller('changeEmailPassword', function ($scope, $http) {
|
||||
var data = {
|
||||
domain: domain,
|
||||
email: email,
|
||||
password: password,
|
||||
passwordByPass: password,
|
||||
};
|
||||
|
||||
var config = {
|
||||
|
||||
@@ -49,6 +49,8 @@ class CyberCPLogFileWriter:
|
||||
statusFile.close()
|
||||
print(mesg + '\n')
|
||||
except BaseException, msg:
|
||||
CyberCPLogFileWriter.writeToFile(str(msg) + ' [statusWriter]')
|
||||
print str(msg)
|
||||
pass
|
||||
#CyberCPLogFileWriter.writeToFile(str(msg) + ' [statusWriter]')
|
||||
#print str(msg)
|
||||
|
||||
|
||||
|
||||
@@ -102,7 +102,13 @@ class backupUtilities:
|
||||
databasesXML = Element('Databases')
|
||||
|
||||
for items in databases:
|
||||
try:
|
||||
dbuser = DBUsers.objects.get(user=items.dbUser)
|
||||
except:
|
||||
dbusers = DBUsers.objects.all().filter(user=items.dbUser)
|
||||
for it in dbusers:
|
||||
dbuser = it
|
||||
break
|
||||
|
||||
databaseXML = Element('database')
|
||||
|
||||
@@ -154,8 +160,8 @@ class backupUtilities:
|
||||
|
||||
metaFileXML.append(dnsRecordsXML)
|
||||
|
||||
except:
|
||||
pass
|
||||
except BaseException, msg:
|
||||
logging.CyberCPLogFileWriter.statusWriter(status, '%s. [158:prepMeta]' % (str(msg)))
|
||||
|
||||
## Email accounts XML
|
||||
|
||||
@@ -175,9 +181,8 @@ class backupUtilities:
|
||||
emailRecordsXML.append(emailRecordXML)
|
||||
|
||||
metaFileXML.append(emailRecordsXML)
|
||||
|
||||
except:
|
||||
pass
|
||||
except BaseException, msg:
|
||||
logging.CyberCPLogFileWriter.statusWriter(status, '%s. [179:prepMeta]' % (str(msg)))
|
||||
|
||||
## Email meta generated!
|
||||
|
||||
@@ -1009,25 +1014,45 @@ def submitBackupCreation(tempStoragePath, backupName, backupPath, backupDomain):
|
||||
|
||||
##
|
||||
|
||||
if not os.path.exists(backupPath) or not os.path.islink(backupPath):
|
||||
command = 'mkdir -p %s' % (backupPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
return 0
|
||||
|
||||
if not os.path.exists(backupPath) or not os.path.islink(backupPath):
|
||||
command = 'chown -R %s:%s %s' % (website.externalApp, website.externalApp, backupPath)
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
return 0
|
||||
|
||||
##
|
||||
|
||||
|
||||
if not os.path.exists(tempStoragePath) or not os.path.islink(tempStoragePath):
|
||||
command = 'mkdir -p %s' % (tempStoragePath)
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
return 0
|
||||
|
||||
if not os.path.exists(tempStoragePath) or not os.path.islink(tempStoragePath):
|
||||
command = 'chown -R %s:%s %s' % (website.externalApp, website.externalApp, tempStoragePath)
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
return 0
|
||||
|
||||
##
|
||||
if not os.path.exists(status) or not os.path.islink(status):
|
||||
command = 'touch %s' % (status)
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
return 0
|
||||
|
||||
if not os.path.exists(status) or not os.path.islink(status):
|
||||
command = 'chown cyberpanel:cyberpanel %s' % (status)
|
||||
ProcessUtilities.executioner(command)
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
result = backupUtilities.prepareBackupMeta(backupDomain, backupName, tempStoragePath, backupPath)
|
||||
|
||||
@@ -1052,11 +1077,6 @@ def submitBackupCreation(tempStoragePath, backupName, backupPath, backupDomain):
|
||||
|
||||
backupMetaData = ElementTree.parse(result[2])
|
||||
|
||||
if os.path.islink(status) or os.path.islink(tempStoragePath or os.path.islink(backupPath)) or os.path.islink(
|
||||
result[2]):
|
||||
logging.CyberCPLogFileWriter.writeToFile('symlinked.')
|
||||
return 0
|
||||
|
||||
databases = backupMetaData.findall('Databases/database')
|
||||
|
||||
for database in databases:
|
||||
|
||||
@@ -514,6 +514,7 @@ class cPanelImporter:
|
||||
start = 0
|
||||
|
||||
for items in data:
|
||||
try:
|
||||
if items.find('SOA') > -1:
|
||||
SOACheck = 1
|
||||
continue
|
||||
@@ -539,6 +540,9 @@ class cPanelImporter:
|
||||
else:
|
||||
DNS.createDNSRecord(zone, RecordsData[0] + '.' + topLevelDomain , RecordsData[3], RecordsData[4], 0,
|
||||
RecordsData[1])
|
||||
except BaseException, msg:
|
||||
message = 'Failed while creating DNS entry for %s, error message: %s.' % (topLevelDomain, str(msg))
|
||||
logging.statusWriter(self.logFile, message, 1)
|
||||
|
||||
message = 'DNS records successfully created for %s.' % (topLevelDomain)
|
||||
logging.statusWriter(self.logFile, message, 1)
|
||||
@@ -599,7 +603,7 @@ class cPanelImporter:
|
||||
try:
|
||||
cursor.execute("CREATE DATABASE " + items.replace('.sql', ''))
|
||||
except BaseException, msg:
|
||||
message = 'Error while restoring database %s from backup file %s, error message: %s' % (items.replace('.sql', ''), self.backupFile, str(msg))
|
||||
message = 'Failed while restoring database %s from backup file %s, error message: %s' % (items.replace('.sql', ''), self.backupFile, str(msg))
|
||||
logging.statusWriter(self.logFile, message, 1)
|
||||
|
||||
command = 'sudo mysql -u root -p' + password + ' ' + items.replace('.sql', '')
|
||||
@@ -632,7 +636,7 @@ class cPanelImporter:
|
||||
try:
|
||||
cursor.execute(items)
|
||||
except BaseException, msg:
|
||||
message = 'Error while restoring database %s from backup file %s, error message: %s' % (
|
||||
message = 'Failed while restoring database %s from backup file %s, error message: %s' % (
|
||||
items.replace('.sql', ''), self.backupFile, str(msg))
|
||||
logging.statusWriter(self.logFile, message, 1)
|
||||
|
||||
@@ -684,6 +688,8 @@ class cPanelImporter:
|
||||
pass
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
if self.RestoreDatabases():
|
||||
pass
|
||||
else:
|
||||
@@ -811,11 +817,14 @@ def main():
|
||||
for items in os.listdir(args.path):
|
||||
if items.endswith('.tar.gz'):
|
||||
finalPath = '%s/%s' % (args.path.rstrip('/'), items)
|
||||
try:
|
||||
cI = cPanelImporter(finalPath, LogFile)
|
||||
if cI.MainController():
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -132,6 +132,8 @@ class mailUtilities:
|
||||
emailAcct.mail = 'maildir:/home/vmail/%s/%s/Maildir' % (domain, userName)
|
||||
emailAcct.save()
|
||||
else:
|
||||
password = bcrypt.hashpw(str(password), bcrypt.gensalt())
|
||||
password = '{CRYPT}%s' % (password)
|
||||
emailAcct = EUsers(emailOwner=emailDomain, email=finalEmailUsername, password=password)
|
||||
emailAcct.mail = 'maildir:/home/vmail/%s/%s/Maildir' % (domain, userName)
|
||||
emailAcct.save()
|
||||
|
||||
@@ -321,12 +321,6 @@ class remoteTransferUtilities:
|
||||
"%I-%M-%S-%a-%b-%Y") + "]" + " Backup Restore complete\n")
|
||||
writeToFile.writelines("completed[success]")
|
||||
|
||||
try:
|
||||
shutil.rmtree("/home/backup/transfer-" + dir)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
except BaseException, msg:
|
||||
logging.CyberCPLogFileWriter.writeToFile(str(msg) + " [remoteTransferUtilities.startRestore]")
|
||||
|
||||
|
||||
@@ -1443,7 +1443,7 @@ class Upgrade:
|
||||
|
||||
impFile = ['/etc/pure-ftpd/pure-ftpd.conf', '/etc/pure-ftpd/pureftpd-pgsql.conf',
|
||||
'/etc/pure-ftpd/pureftpd-mysql.conf', '/etc/pure-ftpd/pureftpd-ldap.conf',
|
||||
'/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf']
|
||||
'/etc/dovecot/dovecot.conf', '/etc/pdns/pdns.conf', '/etc/pure-ftpd/db/mysql.conf']
|
||||
|
||||
for items in impFile:
|
||||
command = 'chmod 600 %s' % (items)
|
||||
@@ -1508,7 +1508,7 @@ class Upgrade:
|
||||
|
||||
@staticmethod
|
||||
def upgradePDNS():
|
||||
command = "yum install epel-release yum-plugin-priorities && curl -o /etc/yum.repos.d/powerdns-auth-42.repo https://repo.powerdns.com/repo-files/centos-auth-42.repo && yum --enablerepo=epel install pdns"
|
||||
command = "yum install epel-release && curl -o /etc/yum.repos.d/powerdns-auth-42.repo https://repo.powerdns.com/repo-files/centos-auth-42.repo && yum --enablerepo=epel install pdns"
|
||||
subprocess.call(command, shell=True)
|
||||
|
||||
@staticmethod
|
||||
@@ -1572,6 +1572,9 @@ enabled=1"""
|
||||
|
||||
os.chdir("/usr/local")
|
||||
|
||||
command = 'yum remove yum-plugin-priorities -y'
|
||||
Upgrade.executioner(command, 'remove yum-plugin-priorities', 0)
|
||||
|
||||
## Current Version
|
||||
|
||||
Version = version.objects.get(pk=1)
|
||||
|
||||
@@ -57,22 +57,22 @@ class ServerStatusUtil:
|
||||
except:
|
||||
pass
|
||||
|
||||
command = 'wget https://www.litespeedtech.com/packages/5.0/lsws-5.3.5-ent-x86_64-linux.tar.gz'
|
||||
command = 'wget https://www.litespeedtech.com/packages/5.0/lsws-5.3.8-ent-x86_64-linux.tar.gz'
|
||||
if ServerStatusUtil.executioner(command, statusFile) == 0:
|
||||
return 0
|
||||
|
||||
command = 'tar zxf lsws-5.3.5-ent-x86_64-linux.tar.gz -C /usr/local/CyberCP'
|
||||
command = 'tar zxf lsws-5.3.8-ent-x86_64-linux.tar.gz -C /usr/local/CyberCP'
|
||||
if ServerStatusUtil.executioner(command, statusFile) == 0:
|
||||
return 0
|
||||
|
||||
writeSerial = open('/usr/local/CyberCP/lsws-5.3.5/serial.no', 'w')
|
||||
writeSerial = open('/usr/local/CyberCP/lsws-5.3.8/serial.no', 'w')
|
||||
writeSerial.writelines(licenseKey)
|
||||
writeSerial.close()
|
||||
|
||||
shutil.copy('/usr/local/CyberCP/serverStatus/litespeed/install.sh', '/usr/local/CyberCP/lsws-5.3.5/')
|
||||
shutil.copy('/usr/local/CyberCP/serverStatus/litespeed/functions.sh', '/usr/local/CyberCP/lsws-5.3.5/')
|
||||
shutil.copy('/usr/local/CyberCP/serverStatus/litespeed/install.sh', '/usr/local/CyberCP/lsws-5.3.8/')
|
||||
shutil.copy('/usr/local/CyberCP/serverStatus/litespeed/functions.sh', '/usr/local/CyberCP/lsws-5.3.8/')
|
||||
|
||||
os.chdir('/usr/local/CyberCP/lsws-5.3.5/')
|
||||
os.chdir('/usr/local/CyberCP/lsws-5.3.8/')
|
||||
|
||||
command = 'chmod +x install.sh'
|
||||
if ServerStatusUtil.executioner(command, statusFile) == 0:
|
||||
@@ -99,7 +99,7 @@ class ServerStatusUtil:
|
||||
pass
|
||||
|
||||
try:
|
||||
os.rmdir("/usr/local/CyberCP/lsws-5.3.5")
|
||||
os.rmdir("/usr/local/CyberCP/lsws-5.3.8")
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
@@ -328,7 +328,7 @@ app.controller('listFTPAccounts', function ($scope, $http) {
|
||||
|
||||
var data = {
|
||||
ftpUserName: globalFTPUsername,
|
||||
ftpPassword: $scope.ftpPassword,
|
||||
passwordByPass: $scope.ftpPassword,
|
||||
};
|
||||
|
||||
var config = {
|
||||
|
||||
@@ -391,7 +391,7 @@ app.controller('changeEmailPassword', function ($scope, $http) {
|
||||
var data = {
|
||||
domain: domain,
|
||||
email: email,
|
||||
password: password,
|
||||
passwordByPass: password,
|
||||
};
|
||||
|
||||
var config = {
|
||||
|
||||
Reference in New Issue
Block a user