Files
CyberPanel/api/views.py

632 lines
22 KiB
Python
Raw Normal View History

2017-10-24 19:16:36 +05:00
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import json
2017-12-09 22:30:10 +05:00
from django.shortcuts import redirect
2017-10-24 19:16:36 +05:00
from django.http import HttpResponse
from loginSystem.models import Administrator
from plogical.virtualHostUtilities import virtualHostUtilities
from plogical import hashPassword
from packages.models import Package
from baseTemplate.views import renderBase
from random import randint
2018-10-29 21:36:03 +05:00
from websiteFunctions.models import Websites
2017-10-26 23:50:59 +05:00
import os
from baseTemplate.models import version
2017-11-05 03:02:51 +05:00
import subprocess
import shlex
2018-05-11 00:03:26 +05:00
from plogical.mailUtilities import mailUtilities
2018-08-26 05:23:08 +05:00
from plogical.website import WebsiteManager
2018-10-29 21:36:03 +05:00
from loginSystem.models import ACL
from plogical.acl import ACLManager
2018-11-14 13:36:34 +05:00
from firewall.models import FirewallRules
2018-12-14 00:43:28 +05:00
from s3Backups.s3Backups import S3Backups
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
2019-03-21 23:26:42 +05:00
from plogical.processUtilities import ProcessUtilities
2017-10-24 19:16:36 +05:00
# Create your views here.
def verifyConn(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
data_ret = {"verifyConn": 1}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {"verifyConn": 0}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'verifyConn': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def createWebsite(request):
2018-08-26 05:23:08 +05:00
wm = WebsiteManager()
return wm.createWebsiteAPI(json.loads(request.body))
2017-10-24 19:16:36 +05:00
2018-10-29 21:36:03 +05:00
def getUserInfo(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
adminUser = data['adminUser']
adminPass = data['adminPass']
username = data['username']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
pass
else:
data_ret = {"status": 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
try:
user = Administrator.objects.get(userName=username)
data_ret = {'status': 0,
'firstName': user.firstName,
'lastName': user.lastName,
'email': user.email,
'adminStatus': user.acl.adminStatus,
'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except:
data_ret = {'status': 0, 'error_message': "User does not exists."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'status': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
def changeUserPassAPI(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
websiteOwner = data['websiteOwner']
ownerPassword = data['ownerPassword']
2018-08-28 01:19:34 +05:00
2017-10-24 19:16:36 +05:00
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
pass
else:
data_ret = {"changeStatus": 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
websiteOwn = Administrator.objects.get(userName=websiteOwner)
websiteOwn.password = hashPassword.hash_password(ownerPassword)
websiteOwn.save()
data_ret = {'changeStatus': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'changeStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def changePackageAPI(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
websiteName = data['websiteName']
packageName = data['packageName']
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
pass
else:
data_ret = {"changePackage": 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
website = Websites.objects.get(domain=websiteName)
pack = Package.objects.get(packageName=packageName)
website.package = pack
website.save()
data_ret = {'changePackage': 1, 'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {'changePackage': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def deleteWebsite(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
2018-08-28 01:19:34 +05:00
data['websiteName'] = data['domainName']
2017-10-24 19:16:36 +05:00
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
pass
else:
data_ret = {"websiteDeleteStatus": 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-08-28 01:19:34 +05:00
website = Websites.objects.get(domain=data['websiteName'])
2018-06-11 21:04:55 +05:00
websiteOwner = website.admin
2018-01-02 11:49:03 +05:00
2018-06-11 21:04:55 +05:00
if admin.websites_set.all().count() == 0:
websiteOwner.delete()
2017-10-24 19:16:36 +05:00
2018-06-12 03:56:19 +05:00
## Deleting master domain
2018-08-28 01:19:34 +05:00
wm = WebsiteManager()
return wm.submitWebsiteDeletion(admin.pk, data)
2017-10-24 19:16:36 +05:00
except BaseException, msg:
data_ret = {'websiteDeleteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def submitWebsiteStatus(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
pass
else:
data_ret = {"websiteStatus": 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-08-28 01:19:34 +05:00
wm = WebsiteManager()
return wm.submitWebsiteStatus(admin.pk, json.loads(request.body))
2017-10-24 19:16:36 +05:00
except BaseException, msg:
data_ret = {'websiteStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def loginAPI(request):
try:
2018-08-28 01:19:34 +05:00
username = request.POST['username']
password = request.POST['password']
2017-10-24 19:16:36 +05:00
2018-08-28 01:19:34 +05:00
admin = Administrator.objects.get(userName=username)
2017-10-24 19:16:36 +05:00
2018-08-28 01:19:34 +05:00
if hashPassword.check_password(admin.password, password):
request.session['userID'] = admin.pk
return redirect(renderBase)
else:
return HttpResponse("Invalid Credentials.")
2017-10-24 19:16:36 +05:00
except BaseException, msg:
data = {'userID': 0, 'loginStatus': 0, 'error_message': str(msg)}
json_data = json.dumps(data)
return HttpResponse(json_data)
def fetchSSHkey(request):
try:
if request.method == "POST":
data = json.loads(request.body)
username = data['username']
password = data['password']
admin = Administrator.objects.get(userName=username)
if hashPassword.check_password(admin.password, password):
2017-11-05 03:02:51 +05:00
2018-02-21 20:10:39 +05:00
pubKey = os.path.join("/root",".ssh",'cyberpanel.pub')
2017-12-09 22:30:10 +05:00
execPath = "sudo cat " + pubKey
2019-03-21 23:26:42 +05:00
data = ProcessUtilities.outputExecutioner(execPath)
2017-11-05 03:02:51 +05:00
2018-02-21 20:10:39 +05:00
data_ret = {
'status': 1,
2018-02-21 20:10:39 +05:00
'pubKeyStatus': 1,
'error_message': "None",
'pubKey':data
}
2017-10-24 19:16:36 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2018-02-21 20:10:39 +05:00
data_ret = {
'status' : 0,
2018-02-21 20:10:39 +05:00
'pubKeyStatus': 0,
'error_message': "Could not authorize access to API."
}
2017-10-24 19:16:36 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data = {'status' : 0, 'pubKeyStatus': 0,'error_message': str(msg)}
2017-10-24 19:16:36 +05:00
json_data = json.dumps(data)
return HttpResponse(json_data)
def remoteTransfer(request):
try:
if request.method == "POST":
2017-10-24 19:16:36 +05:00
data = json.loads(request.body)
username = data['username']
password = data['password']
ipAddress = data['ipAddress']
2017-10-27 00:09:34 +05:00
accountsToTransfer = data['accountsToTransfer']
2017-10-24 19:16:36 +05:00
admin = Administrator.objects.get(userName=username)
2017-12-09 22:30:10 +05:00
2017-10-24 19:16:36 +05:00
if hashPassword.check_password(admin.password, password):
dir = str(randint(1000, 9999))
2017-11-05 03:02:51 +05:00
2017-12-09 22:30:10 +05:00
##
2018-05-11 00:03:26 +05:00
mailUtilities.checkHome()
path = "/home/cyberpanel/accounts-" + str(randint(1000, 9999))
writeToFile = open(path,'w')
for items in accountsToTransfer:
writeToFile.writelines(items + "\n")
writeToFile.close()
## Accounts to transfer is a path to file, containing accounts.
2017-10-24 19:16:36 +05:00
2017-12-09 22:30:10 +05:00
execPath = "sudo python " + virtualHostUtilities.cyberPanel + "/plogical/remoteTransferUtilities.py"
2018-05-11 00:03:26 +05:00
execPath = execPath + " remoteTransfer --ipAddress " + ipAddress + " --dir " + dir + " --accountsToTransfer " + path
2019-03-21 23:26:42 +05:00
ProcessUtilities.popenExecutioner(execPath)
2017-12-09 22:30:10 +05:00
return HttpResponse(json.dumps({"transferStatus": 1, "dir": dir}))
##
2017-10-24 19:16:36 +05:00
else:
2018-02-22 12:17:38 +05:00
data_ret = {'transferStatus': 0, 'error_message': "Could not authorize access to API."}
2017-10-24 19:16:36 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data = {'transferStatus': 0,'error_message': str(msg)}
json_data = json.dumps(data)
return HttpResponse(json_data)
def fetchAccountsFromRemoteServer(request):
try:
if request.method == "POST":
data = json.loads(request.body)
username = data['username']
password = data['password']
admin = Administrator.objects.get(userName=username)
if hashPassword.check_password(admin.password, password):
records = Websites.objects.all()
json_data = "["
checker = 0
for items in records:
dic = {
'website': items.domain,
'php': items.phpSelection,
'package': items.package.packageName,
'email': items.adminEmail,
}
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)
else:
data_ret = {'fetchStatus': 0, 'error_message': "Invalid Credentials"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
2017-10-26 23:50:59 +05:00
data = {'fetchStatus': 0,'error_message': str(msg)}
json_data = json.dumps(data)
return HttpResponse(json_data)
def FetchRemoteTransferStatus(request):
try:
if request.method == "POST":
data = json.loads(request.body)
username = data['username']
password = data['password']
2018-05-11 00:03:26 +05:00
2017-10-26 23:50:59 +05:00
dir = "/home/backup/transfer-"+str(data['dir'])+"/backup_log"
2017-12-09 22:30:10 +05:00
try:
2019-03-21 23:26:42 +05:00
execPath = "sudo cat "+ dir
status = ProcessUtilities.outputExecutioner(execPath)
2017-10-26 23:50:59 +05:00
2017-12-09 22:30:10 +05:00
admin = Administrator.objects.get(userName=username)
if hashPassword.check_password(admin.password, password):
2017-10-26 23:50:59 +05:00
2017-12-09 22:30:10 +05:00
final_json = json.dumps({'fetchStatus': 1, 'error_message': "None", "status": status})
return HttpResponse(final_json)
else:
data_ret = {'fetchStatus': 0, 'error_message': "Invalid Credentials"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except:
final_json = json.dumps({'fetchStatus': 1, 'error_message': "None", "status": "Just started.."})
2017-10-26 23:50:59 +05:00
return HttpResponse(final_json)
2017-12-09 22:30:10 +05:00
2017-10-26 23:50:59 +05:00
except BaseException, msg:
data = {'fetchStatus': 0,'error_message': str(msg)}
json_data = json.dumps(data)
return HttpResponse(json_data)
def cancelRemoteTransfer(request):
try:
if request.method == "POST":
data = json.loads(request.body)
username = data['username']
password = data['password']
dir = "/home/backup/transfer-"+str(data['dir'])
admin = Administrator.objects.get(userName=username)
if hashPassword.check_password(admin.password, password):
2018-05-12 02:21:42 +05:00
path = dir + "/pid"
2017-10-26 23:50:59 +05:00
2019-03-21 23:26:42 +05:00
execPath = "sudo cat " + path
pid = ProcessUtilities.outputExecutioner(execPath)
2017-10-26 23:50:59 +05:00
2019-03-21 23:26:42 +05:00
execPath = "sudo kill -KILL " + pid
ProcessUtilities.executioner(execPath)
2017-10-26 23:50:59 +05:00
2019-03-21 23:26:42 +05:00
execPath = "sudo rm -rf " + dir
ProcessUtilities.executioner(execPath)
2017-10-26 23:50:59 +05:00
2018-05-12 02:21:42 +05:00
data = {'cancelStatus': 1, 'error_message': "None"}
json_data = json.dumps(data)
return HttpResponse(json_data)
2017-10-26 23:50:59 +05:00
else:
data_ret = {'cancelStatus': 0, 'error_message': "Invalid Credentials"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data = {'cancelStatus': 1, 'error_message': str(msg)}
2017-10-24 19:16:36 +05:00
json_data = json.dumps(data)
return HttpResponse(json_data)
2017-10-26 23:50:59 +05:00
def cyberPanelVersion(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
adminUser = data['username']
adminPass = data['password']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
Version = version.objects.get(pk=1)
2018-02-21 20:10:39 +05:00
data_ret = {
"getVersion": 1,
'error_message': "none",
'currentVersion':Version.currentVersion,
2018-02-21 20:10:39 +05:00
'build':Version.build
}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2018-02-21 20:10:39 +05:00
data_ret = {
"getVersion": 0,
'error_message': "Could not authorize access to API."
}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
2018-02-21 20:10:39 +05:00
data_ret = {
"getVersion": 0,
'error_message': str(msg)
}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-11-05 03:02:51 +05:00
def putSSHkey(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
adminUser = data['username']
adminPass = data['password']
pubKey = data['putSSHKey']
admin = Administrator.objects.get(userName=adminUser)
if hashPassword.check_password(admin.password, adminPass):
keyPath = "/home/cyberpanel/.ssh"
if not os.path.exists(keyPath):
os.makedirs(keyPath)
## writeKey
authorized_keys = keyPath+"/authorized_keys"
presenseCheck = 0
try:
data = open(authorized_keys, "r").readlines()
for items in data:
if items.find(pubKey) > -1:
presenseCheck = 1
except:
pass
if presenseCheck == 0:
writeToFile = open(authorized_keys, 'a')
writeToFile.writelines("#Added by CyberPanel\n")
writeToFile.writelines("\n")
writeToFile.writelines(pubKey)
writeToFile.writelines("\n")
writeToFile.close()
##
2019-03-21 23:26:42 +05:00
execPath = "sudo chmod g-w /home/cyberpanel"
ProcessUtilities.executioner(execPath)
2017-11-05 03:02:51 +05:00
os.chmod(keyPath,0700)
os.chmod(authorized_keys, 0600)
data_ret = {"putSSHKey": 1,
'error_message': "None",}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {"putSSHKey": 0,
'error_message': "Could not authorize access to API"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {"putSSHKey": 0,
'error_message': str(msg)}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-12-09 22:30:10 +05:00
def changeAdminPassword(request):
try:
data = json.loads(request.body)
adminPass = data['password']
randomFile = data['randomFile']
if os.path.exists(randomFile):
2018-10-29 21:36:03 +05:00
numberOfAdministrator = Administrator.objects.count()
if numberOfAdministrator == 0:
ACLManager.createDefaultACLs()
acl = ACL.objects.get(name='admin')
2018-11-20 15:43:43 +05:00
token = hashPassword.generateToken('admin', '1234567')
2018-10-29 21:36:03 +05:00
email = 'usman@cyberpersons.com'
2018-11-14 13:36:34 +05:00
admin = Administrator(userName="admin", password=hashPassword.hash_password(adminPass), type=1, email=email,
2018-11-20 15:43:43 +05:00
firstName="Cyber", lastName="Panel", acl=acl, token=token)
2018-10-29 21:36:03 +05:00
admin.save()
2018-11-14 13:36:34 +05:00
2019-02-06 17:53:07 +05:00
vers = version(currentVersion="1.8", build=1)
2018-11-14 13:36:34 +05:00
vers.save()
package = Package(admin=admin, packageName="Default", diskSpace=1000,
bandwidth=1000, ftpAccounts=1000, dataBases=1000,
emailAccounts=1000, allowedDomains=20)
package.save()
newFWRule = FirewallRules(name="panel", proto="tcp", port="8090")
newFWRule.save()
newFWRule = FirewallRules(name="http", proto="tcp", port="80")
newFWRule.save()
newFWRule = FirewallRules(name="https", proto="tcp", port="443")
newFWRule.save()
newFWRule = FirewallRules(name="ftp", proto="tcp", port="21")
newFWRule.save()
newFWRule = FirewallRules(name="ftptls", proto="tcp", port="40110-40210")
newFWRule.save()
2018-10-29 21:36:03 +05:00
data_ret = {"changed": 1,
'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-12-09 22:30:10 +05:00
os.remove(randomFile)
2019-02-09 14:01:43 +05:00
token = hashPassword.generateToken('admin', adminPass)
2018-11-09 22:01:28 +05:00
admin = Administrator.objects.get(userName="admin")
2017-12-09 22:30:10 +05:00
admin.password = hashPassword.hash_password(adminPass)
2019-02-09 14:01:43 +05:00
admin.token = token
2017-12-09 22:30:10 +05:00
admin.save()
data_ret = {"changed": 1,
'error_message': "None"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
data_ret = {"changed": 0,
'error_message': "Failed to authorize access to change password!"}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
data_ret = {"changed": 0,
2018-11-08 13:19:36 +05:00
'error_message': str(msg)}
2017-12-09 22:30:10 +05:00
json_data = json.dumps(data_ret)
2018-12-14 00:43:28 +05:00
return HttpResponse(json_data)
def runAWSBackups(request):
try:
data = json.loads(request.body)
randomFile = data['randomFile']
if os.path.exists(randomFile):
s3 = S3Backups(request, None, 'runAWSBackups')
s3.start()
except BaseException, msg:
logging.writeToFile(str(msg) + ' [API.runAWSBackups]')