mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-11-05 12:55:44 +01:00
348 lines
12 KiB
Python
348 lines
12 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
||
|
|
from __future__ import unicode_literals
|
||
|
|
|
||
|
|
from django.shortcuts import render,redirect
|
||
|
|
from django.http import HttpResponse
|
||
|
|
from loginSystem.models import Administrator
|
||
|
|
from websiteFunctions.models import Websites
|
||
|
|
import plogical.CyberCPLogFileWriter as logging
|
||
|
|
from plogical.mysqlUtilities import mysqlUtilities
|
||
|
|
from loginSystem.views import loadLoginPage
|
||
|
|
from models import Databases
|
||
|
|
import json
|
||
|
|
import shlex
|
||
|
|
import subprocess
|
||
|
|
# Create your views here.
|
||
|
|
|
||
|
|
|
||
|
|
def loadDatabaseHome(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
return render(request, 'databases/index.html')
|
||
|
|
except BaseException, msg:
|
||
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||
|
|
return HttpResponse(str(msg))
|
||
|
|
|
||
|
|
except KeyError:
|
||
|
|
return redirect(loadLoginPage)
|
||
|
|
|
||
|
|
def createDatabase(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
admin = Administrator.objects.get(pk=request.session['userID'])
|
||
|
|
|
||
|
|
if admin.type == 1:
|
||
|
|
websites = Websites.objects.all()
|
||
|
|
websitesName = []
|
||
|
|
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
else:
|
||
|
|
if admin.type == 2:
|
||
|
|
websites = Websites.objects.filter(admin=admin)
|
||
|
|
admins = Administrator.objects.filter(owner=admin.pk)
|
||
|
|
websitesName = []
|
||
|
|
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
|
||
|
|
for items in admins:
|
||
|
|
webs = Websites.objects.filter(admin=items)
|
||
|
|
|
||
|
|
for web in webs:
|
||
|
|
websitesName.append(web.domain)
|
||
|
|
else:
|
||
|
|
websitesName = []
|
||
|
|
websites = Websites.objects.filter(admin=admin)
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
|
||
|
|
|
||
|
|
return render(request, 'databases/createDatabase.html', {'websitesList':websitesName})
|
||
|
|
except BaseException, msg:
|
||
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||
|
|
return HttpResponse(str(msg))
|
||
|
|
|
||
|
|
except KeyError:
|
||
|
|
return redirect(loadLoginPage)
|
||
|
|
|
||
|
|
|
||
|
|
def submitDBCreation(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
if request.method == 'POST':
|
||
|
|
|
||
|
|
|
||
|
|
data = json.loads(request.body)
|
||
|
|
databaseWebsite = data['databaseWebsite']
|
||
|
|
dbName = data['dbName']
|
||
|
|
dbUsername = data['dbUsername']
|
||
|
|
dbPassword = data['dbPassword']
|
||
|
|
|
||
|
|
webUsername = databaseWebsite.replace("-","")
|
||
|
|
|
||
|
|
|
||
|
|
webUsername = webUsername.split('.')[0]
|
||
|
|
|
||
|
|
dbName = webUsername+"_"+dbName
|
||
|
|
dbUsername = webUsername+"_"+dbUsername
|
||
|
|
|
||
|
|
if len(dbName) > 16 or len(dbUsername) > 16:
|
||
|
|
data_ret = {'createDBStatus': 0,
|
||
|
|
'error_message': "Length of Database name or Database user should be 16 at max."}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
website = Websites.objects.get(domain=databaseWebsite)
|
||
|
|
|
||
|
|
if website.package.dataBases == 0:
|
||
|
|
pass
|
||
|
|
elif website.package.dataBases > website.databases_set.all().count():
|
||
|
|
pass
|
||
|
|
else:
|
||
|
|
data_ret = {'createDBStatus': 0, 'error_message': "Maximum database limit reached for this website."}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
if Databases.objects.filter(dbName=dbName).exists() or Databases.objects.filter(dbUser=dbUsername).exists() :
|
||
|
|
data_ret = {'createDBStatus': 0,
|
||
|
|
'error_message': "This database or user is already taken."}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
result = mysqlUtilities.createDatabase(dbName, dbUsername, dbPassword)
|
||
|
|
|
||
|
|
if result == 1:
|
||
|
|
pass
|
||
|
|
else:
|
||
|
|
data_ret = {'createDBStatus': 0,
|
||
|
|
'error_message': result}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
db = Databases(website=website,dbName=dbName,dbUser=dbUsername)
|
||
|
|
db.save()
|
||
|
|
|
||
|
|
data_ret = {'createDBStatus': 1, 'error_message': "None"}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
|
||
|
|
except BaseException,msg:
|
||
|
|
data_ret = {'createDBStatus': 0, 'error_message': str(msg)}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
except KeyError,msg:
|
||
|
|
data_ret = {'createDBStatus': 0, 'error_message': str(msg)}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
|
||
|
|
def deleteDatabase(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
|
||
|
|
admin = Administrator.objects.get(pk=request.session['userID'])
|
||
|
|
|
||
|
|
if admin.type == 1:
|
||
|
|
websites = Websites.objects.all()
|
||
|
|
websitesName = []
|
||
|
|
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
else:
|
||
|
|
if admin.type == 2:
|
||
|
|
websites = admin.websites_set.all()
|
||
|
|
admins = Administrator.objects.filter(owner=admin.pk)
|
||
|
|
websitesName = []
|
||
|
|
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
|
||
|
|
for items in admins:
|
||
|
|
webs = items.websites_set.all()
|
||
|
|
|
||
|
|
for web in webs:
|
||
|
|
websitesName.append(web.domain)
|
||
|
|
else:
|
||
|
|
websitesName = []
|
||
|
|
websites = Websites.objects.filter(admin=admin)
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
|
||
|
|
|
||
|
|
return render(request, 'databases/deleteDatabase.html', {'websitesList':websitesName})
|
||
|
|
except BaseException, msg:
|
||
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||
|
|
return HttpResponse(str(msg))
|
||
|
|
|
||
|
|
except KeyError:
|
||
|
|
return redirect(loadLoginPage)
|
||
|
|
|
||
|
|
def fetchDatabases(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
|
||
|
|
data = json.loads(request.body)
|
||
|
|
|
||
|
|
databaseWebsite = data['databaseWebsite']
|
||
|
|
|
||
|
|
website = Websites.objects.get(domain=databaseWebsite)
|
||
|
|
|
||
|
|
|
||
|
|
databases = Databases.objects.filter(website=website)
|
||
|
|
|
||
|
|
json_data = "["
|
||
|
|
checker = 0
|
||
|
|
|
||
|
|
for items in databases:
|
||
|
|
dic = { 'id':items.pk,
|
||
|
|
'dbName': items.dbName,
|
||
|
|
'dbUser': items.dbUser,}
|
||
|
|
|
||
|
|
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, msg:
|
||
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||
|
|
final_json = json.dumps({'fetchStatus': 0, 'error_message': str(msg)})
|
||
|
|
return HttpResponse(final_json)
|
||
|
|
|
||
|
|
except KeyError:
|
||
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||
|
|
final_json = json.dumps({'fetchStatus': 0, 'error_message': "Not logged in."})
|
||
|
|
return HttpResponse(final_json)
|
||
|
|
|
||
|
|
|
||
|
|
def submitDatabaseDeletion(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
if request.method == 'POST':
|
||
|
|
|
||
|
|
|
||
|
|
data = json.loads(request.body)
|
||
|
|
dbName = data['dbName']
|
||
|
|
|
||
|
|
|
||
|
|
databaseToBeDeleted = Databases.objects.get(dbName=dbName)
|
||
|
|
result = mysqlUtilities.deleteDatabase(dbName,databaseToBeDeleted.dbUser)
|
||
|
|
|
||
|
|
if result == 1:
|
||
|
|
data_ret = {'deleteStatus': 1, 'error_message': "None"}
|
||
|
|
databaseToBeDeleted.delete()
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
else:
|
||
|
|
data_ret = {'deleteStatus': 0, 'error_message': result}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
|
||
|
|
except BaseException,msg:
|
||
|
|
data_ret = {'deleteStatus': 0, 'error_message': str(msg)}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
except KeyError,msg:
|
||
|
|
data_ret = {'deleteStatus': 0, 'error_message': str(msg)}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
|
||
|
|
def listDBs(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
admin = Administrator.objects.get(pk=request.session['userID'])
|
||
|
|
|
||
|
|
if admin.type == 1:
|
||
|
|
websites = Websites.objects.all()
|
||
|
|
websitesName = []
|
||
|
|
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
else:
|
||
|
|
if admin.type == 2:
|
||
|
|
websites = admin.websites_set.all()
|
||
|
|
admins = Administrator.objects.filter(owner=admin.pk)
|
||
|
|
websitesName = []
|
||
|
|
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
|
||
|
|
for items in admins:
|
||
|
|
webs = items.websites_set.all()
|
||
|
|
|
||
|
|
for web in webs:
|
||
|
|
websitesName.append(web.domain)
|
||
|
|
else:
|
||
|
|
websitesName = []
|
||
|
|
websites = Websites.objects.filter(admin=admin)
|
||
|
|
for items in websites:
|
||
|
|
websitesName.append(items.domain)
|
||
|
|
|
||
|
|
return render(request, 'databases/listDataBases.html', {'websiteList':websitesName})
|
||
|
|
except BaseException, msg:
|
||
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
||
|
|
return HttpResponse(str(msg))
|
||
|
|
|
||
|
|
except KeyError:
|
||
|
|
return redirect(loadLoginPage)
|
||
|
|
|
||
|
|
|
||
|
|
def changePassword(request):
|
||
|
|
try:
|
||
|
|
val = request.session['userID']
|
||
|
|
try:
|
||
|
|
if request.method == 'POST':
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
data = json.loads(request.body)
|
||
|
|
userName = data['dbUserName']
|
||
|
|
dbPassword = data['dbPassword']
|
||
|
|
|
||
|
|
passFile = "/etc/cyberpanel/mysqlPassword"
|
||
|
|
|
||
|
|
f = open(passFile)
|
||
|
|
data = f.read()
|
||
|
|
password = data.split('\n', 1)[0]
|
||
|
|
|
||
|
|
|
||
|
|
passwordCMD = "use mysql;SET PASSWORD FOR '" + userName + "'@'localhost' = PASSWORD('" + dbPassword + "');FLUSH PRIVILEGES;"
|
||
|
|
|
||
|
|
command = 'mysql -u root -p' + password + ' -e "' + passwordCMD + '"'
|
||
|
|
cmd = shlex.split(command)
|
||
|
|
res = subprocess.call(cmd)
|
||
|
|
|
||
|
|
if res == 1:
|
||
|
|
data_ret = {'changePasswordStatus': 0, 'error_message': "Please see CyberPanel main log file."}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
|
||
|
|
data_ret = {'changePasswordStatus': 1, 'error_message': "None"}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
|
||
|
|
except BaseException,msg:
|
||
|
|
data_ret = {'changePasswordStatus': 0, 'error_message': str(msg)}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|
||
|
|
except KeyError,msg:
|
||
|
|
data_ret = {'changePasswordStatus': 0, 'error_message': str(msg)}
|
||
|
|
json_data = json.dumps(data_ret)
|
||
|
|
return HttpResponse(json_data)
|