Files
CyberPanel/api/views.py

626 lines
21 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
2018-05-11 00:03:26 +05:00
from plogical.mailUtilities import mailUtilities
2019-08-03 14:53:31 +05:00
from websiteFunctions.website import WebsiteManager
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
from django.views.decorators.csrf import csrf_exempt
2019-12-06 21:11:23 +05:00
from userManagment.views import submitUserCreation
2017-10-24 19:16:36 +05:00
# Create your views here.
@csrf_exempt
2017-10-24 19:16:36 +05:00
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"verifyConn": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
def createWebsite(request):
2019-03-30 14:21:52 +05:00
data = json.loads(request.body)
adminUser = data['adminUser']
admin = Administrator.objects.get(userName=adminUser)
if admin.api == 0:
data_ret = {"existsStatus": 0, 'createWebSiteStatus': 0,
'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
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
@csrf_exempt
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"status": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-10-29 21:36:03 +05:00
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)
2019-11-27 13:11:19 +05:00
data_ret = {'status': 1,
2018-10-29 21:36:03 +05:00
'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)
@csrf_exempt
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"changeStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"changePackage": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
def deleteWebsite(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
2019-03-30 14:21:52 +05:00
2017-10-24 19:16:36 +05:00
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"websiteDeleteStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
data['websiteName'] = data['domainName']
2017-10-24 19:16:36 +05:00
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
2019-04-15 15:54:23 +05:00
try:
if admin.websites_set.all().count() == 0:
websiteOwner.delete()
except:
pass
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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"websiteStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
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
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"userID": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"status": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
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')
execPath = "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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
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']
2019-03-30 14:21:52 +05:00
2017-10-24 19:16:36 +05:00
admin = Administrator.objects.get(userName=username)
2017-12-09 22:30:10 +05:00
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"transferStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
ipAddress = data['ipAddress']
accountsToTransfer = data['accountsToTransfer']
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
2019-08-27 14:40:02 +05:00
execPath = "/usr/local/CyberCP/bin/python2 " + 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)
@csrf_exempt
2017-10-24 19:16:36 +05:00
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"fetchStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2017-10-24 19:16:36 +05:00
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)
@csrf_exempt
2017-10-26 23:50:59 +05:00
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
2019-03-30 14:21:52 +05:00
admin = Administrator.objects.get(userName=username)
if admin.api == 0:
data_ret = {"fetchStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
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:
command = "cat "+ dir
2019-03-26 16:19:03 +05:00
status = ProcessUtilities.outputExecutioner(command)
2017-10-26 23:50:59 +05:00
2019-03-30 14:21:52 +05:00
2017-12-09 22:30:10 +05:00
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)
@csrf_exempt
2017-10-26 23:50:59 +05:00
def cancelRemoteTransfer(request):
try:
if request.method == "POST":
data = json.loads(request.body)
username = data['username']
password = data['password']
admin = Administrator.objects.get(userName=username)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"cancelStatus": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
dir = "/home/backup/transfer-"+str(data['dir'])
2017-10-26 23:50:59 +05:00
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
command = "cat " + path
2019-03-26 16:19:03 +05:00
pid = ProcessUtilities.outputExecutioner(command)
2017-10-26 23:50:59 +05:00
command = "kill -KILL " + pid
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
2017-10-26 23:50:59 +05:00
command = "rm -rf " + dir
2019-03-26 16:19:03 +05:00
ProcessUtilities.executioner(command)
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
@csrf_exempt
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)
2019-03-30 14:21:52 +05:00
if admin.api == 0:
data_ret = {"getVersion": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
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)
@csrf_exempt
2018-12-14 00:43:28 +05:00
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:
2019-12-06 21:11:23 +05:00
logging.writeToFile(str(msg) + ' [API.runAWSBackups]')
@csrf_exempt
def submitUserCreation(request):
try:
if request.method == 'POST':
data = json.loads(request.body)
adminUser = data['adminUser']
adminPass = data['adminPass']
admin = Administrator.objects.get(userName=adminUser)
if admin.api == 0:
data_ret = {"status": 0, 'error_message': "API Access Disabled."}
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
if hashPassword.check_password(admin.password, adminPass):
2019-12-06 21:14:33 +05:00
request.session['userID'] = admin.pk
2019-12-06 21:11:23 +05:00
return submitUserCreation(request)
else:
data_ret = {"status": 0,
'error_message': "Could not authorize access to API"}
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)