Files
CyberPanel/databases/databaseManager.py

261 lines
9.7 KiB
Python
Raw Normal View History

2018-10-08 22:12:05 +05:00
#!/usr/local/CyberCP/bin/python2
import os.path
import sys
import django
sys.path.append('/usr/local/CyberCP')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
django.setup()
from django.shortcuts import render, redirect
from django.http import HttpResponse
import json
from plogical.acl import ACLManager
import plogical.CyberCPLogFileWriter as logging
from plogical.mysqlUtilities import mysqlUtilities
from websiteFunctions.models import Websites
from databases.models import Databases
2019-03-26 16:19:03 +05:00
import argparse
from loginSystem.models import Administrator
import plogical.randomPassword as randomPassword
2018-10-08 22:12:05 +05:00
class DatabaseManager:
def loadDatabaseHome(self, request = None, userID = None):
try:
return render(request, 'databases/index.html')
except BaseException, msg:
return HttpResponse(str(msg))
2019-03-26 16:19:03 +05:00
def phpMyAdmin(self, request = None, userID = None):
try:
return render(request, 'databases/phpMyAdmin.html')
except BaseException, msg:
return HttpResponse(str(msg))
2018-10-08 22:12:05 +05:00
def createDatabase(self, request = None, userID = None):
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'createDatabase') == 0:
return ACLManager.loadError()
websitesName = ACLManager.findAllSites(currentACL, userID)
return render(request, 'databases/createDatabase.html', {'websitesList': websitesName})
except BaseException, msg:
return HttpResponse(str(msg))
2018-11-08 13:19:36 +05:00
def submitDBCreation(self, userID = None, data = None, rAPI = None):
2018-10-08 22:12:05 +05:00
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2018-10-08 22:12:05 +05:00
if ACLManager.currentContextPermission(currentACL, 'createDatabase') == 0:
return ACLManager.loadErrorJson('createDBStatus', 0)
databaseWebsite = data['databaseWebsite']
dbName = data['dbName']
dbUsername = data['dbUsername']
dbPassword = data['dbPassword']
webUsername = data['webUserName']
if ACLManager.checkOwnership(databaseWebsite, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-11-08 13:19:36 +05:00
if rAPI == None:
dbName = webUsername + "_" + dbName
dbUsername = webUsername + "_" + dbUsername
2018-10-08 22:12:05 +05:00
result = mysqlUtilities.submitDBCreation(dbName, dbUsername, dbPassword, databaseWebsite)
if result[0] == 1:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'createDBStatus': 1, 'error_message': "None"}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'createDBStatus': 0, 'error_message': result[1]}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'createDBStatus': 0, 'error_message': str(msg)}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def deleteDatabase(self, request = None, userID = None):
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'deleteDatabase') == 0:
return ACLManager.loadError()
websitesName = ACLManager.findAllSites(currentACL, userID)
return render(request, 'databases/deleteDatabase.html', {'websitesList': websitesName})
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
return HttpResponse(str(msg))
def fetchDatabases(self, userID = None, data = None):
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'deleteDatabase') == 0:
return ACLManager.loadErrorJson('fetchStatus', 0)
databaseWebsite = data['databaseWebsite']
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(databaseWebsite, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-10-08 22:12:05 +05:00
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 + ']'
2018-11-08 13:19:36 +05:00
final_json = json.dumps({'status': 1, 'fetchStatus': 1, 'error_message': "None", "data": json_data})
2018-10-08 22:12:05 +05:00
return HttpResponse(final_json)
except BaseException, msg:
logging.CyberCPLogFileWriter.writeToFile(str(msg))
2018-11-08 13:19:36 +05:00
final_json = json.dumps({'status': 0, 'fetchStatus': 0, 'error_message': str(msg)})
2018-10-08 22:12:05 +05:00
return HttpResponse(final_json)
def submitDatabaseDeletion(self, userID = None, data = None):
try:
currentACL = ACLManager.loadedACL(userID)
admin = Administrator.objects.get(pk=userID)
2018-10-08 22:12:05 +05:00
if ACLManager.currentContextPermission(currentACL, 'deleteDatabase') == 0:
return ACLManager.loadErrorJson('deleteStatus', 0)
dbName = data['dbName']
db = Databases.objects.get(dbName=dbName)
if ACLManager.checkOwnership(db.website.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-10-08 22:12:05 +05:00
result = mysqlUtilities.submitDBDeletion(dbName)
if result[0] == 1:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'deleteStatus': 1, 'error_message': "None"}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
else:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'deleteStatus': 0, 'error_message': result[1]}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'deleteStatus': 0, 'error_message': str(msg)}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
def listDBs(self, request = None, userID = None):
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'listDatabases') == 0:
return ACLManager.loadError()
websitesName = ACLManager.findAllSites(currentACL, userID)
return render(request, 'databases/listDataBases.html', {'websiteList': websitesName})
except BaseException, msg:
return HttpResponse(str(msg))
def changePassword(self, userID = None, data = None):
try:
currentACL = ACLManager.loadedACL(userID)
if ACLManager.currentContextPermission(currentACL, 'listDatabases') == 0:
return ACLManager.loadErrorJson('changePasswordStatus', 0)
userName = data['dbUserName']
dbPassword = data['dbPassword']
2019-07-24 22:37:37 +05:00
db = Databases.objects.get(dbUser=userName)
admin = Administrator.objects.get(pk=userID)
if ACLManager.checkOwnership(db.website.domain, admin, currentACL) == 1:
pass
else:
return ACLManager.loadErrorJson()
2018-10-08 22:12:05 +05:00
2019-03-26 16:19:03 +05:00
res = mysqlUtilities.changePassword(userName, dbPassword)
2018-10-08 22:12:05 +05:00
2019-03-26 16:19:03 +05:00
if res == 0:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'changePasswordStatus': 0,'error_message': "Please see CyberPanel main log file."}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
2018-11-08 13:19:36 +05:00
data_ret = {'status': 1, 'changePasswordStatus': 1, 'error_message': "None"}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
return HttpResponse(json_data)
except BaseException, msg:
2018-11-08 13:19:36 +05:00
data_ret = {'status': 0, 'changePasswordStatus': 0, 'error_message': str(msg)}
2018-10-08 22:12:05 +05:00
json_data = json.dumps(data_ret)
2019-03-26 16:19:03 +05:00
return HttpResponse(json_data)
@staticmethod
def generatePHPMYAdminData(userID):
try:
admin = Administrator.objects.get(id=userID)
path = '/etc/cyberpanel/' + admin.userName
currentACL = ACLManager.loadedACL(userID)
websiteOBJs = ACLManager.findWebsiteObjects(currentACL, userID)
finalUserPassword = randomPassword.generate_pass()
writeToFile = open(path, 'w')
writeToFile.write(finalUserPassword)
writeToFile.close()
mysqlUtilities.createDBUser(admin.userName, finalUserPassword)
mysqlUtilities.changePassword(admin.userName, finalUserPassword)
for webs in websiteOBJs:
for db in webs.databases_set.all():
mysqlUtilities.allowGlobalUserAccess(admin.userName, db.dbName)
print "1," + finalUserPassword
except BaseException, msg:
print "0," + str(msg)
def main():
parser = argparse.ArgumentParser(description='CyberPanel Installer')
parser.add_argument('function', help='Specific a function to call!')
parser.add_argument('--userID', help='Logged in user ID')
args = parser.parse_args()
if args.function == "generatePHPMYAdminData":
DatabaseManager.generatePHPMYAdminData(int(args.userID))
if __name__ == "__main__":
main()