2017-10-24 19:16:36 +05:00
|
|
|
# -*- coding: utf-8 -*-
|
2019-12-10 15:09:10 +05:00
|
|
|
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
from django.shortcuts import redirect, HttpResponse
|
2017-10-24 19:16:36 +05:00
|
|
|
from loginSystem.views import loadLoginPage
|
2019-12-11 10:40:35 +05:00
|
|
|
from .databaseManager import DatabaseManager
|
|
|
|
|
from .pluginManager import pluginManager
|
2017-10-24 19:16:36 +05:00
|
|
|
import json
|
2019-03-26 16:19:03 +05:00
|
|
|
from plogical.processUtilities import ProcessUtilities
|
|
|
|
|
from loginSystem.models import Administrator
|
2020-08-09 00:27:57 +05:00
|
|
|
from plogical.acl import ACLManager
|
|
|
|
|
from databases.models import GlobalUserDB
|
|
|
|
|
from plogical import randomPassword
|
|
|
|
|
from cryptography.fernet import Fernet
|
|
|
|
|
from plogical.mysqlUtilities import mysqlUtilities
|
2017-10-24 19:16:36 +05:00
|
|
|
# Create your views here.
|
|
|
|
|
|
|
|
|
|
def loadDatabaseHome(request):
|
|
|
|
|
try:
|
2018-10-08 22:12:05 +05:00
|
|
|
userID = request.session['userID']
|
|
|
|
|
dm = DatabaseManager()
|
|
|
|
|
return dm.loadDatabaseHome(request, userID)
|
2017-10-24 19:16:36 +05:00
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
|
|
|
|
def createDatabase(request):
|
|
|
|
|
try:
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.preCreateDatabase(request)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
userID = request.session['userID']
|
|
|
|
|
dm = DatabaseManager()
|
|
|
|
|
coreResult = dm.createDatabase(request, userID)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.postCreateDatabase(request, coreResult)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
return coreResult
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
|
|
|
|
def submitDBCreation(request):
|
|
|
|
|
try:
|
2018-08-18 00:39:10 +05:00
|
|
|
userID = request.session['userID']
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.preSubmitDBCreation(request)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2018-08-18 00:39:10 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
dm = DatabaseManager()
|
2018-10-12 18:18:10 +05:00
|
|
|
coreResult = dm.submitDBCreation(userID, json.loads(request.body))
|
2018-06-30 15:29:56 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.postSubmitDBCreation(request, coreResult)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
return coreResult
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def deleteDatabase(request):
|
|
|
|
|
try:
|
2018-08-18 00:39:10 +05:00
|
|
|
userID = request.session['userID']
|
2018-10-08 22:12:05 +05:00
|
|
|
dm = DatabaseManager()
|
|
|
|
|
return dm.deleteDatabase(request, userID)
|
2017-10-24 19:16:36 +05:00
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
|
|
|
|
def fetchDatabases(request):
|
|
|
|
|
try:
|
2018-08-18 00:39:10 +05:00
|
|
|
userID = request.session['userID']
|
2018-10-08 22:12:05 +05:00
|
|
|
dm = DatabaseManager()
|
|
|
|
|
return dm.fetchDatabases(userID, json.loads(request.body))
|
2017-10-24 19:16:36 +05:00
|
|
|
except KeyError:
|
2018-10-08 22:12:05 +05:00
|
|
|
return redirect(loadLoginPage)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def submitDatabaseDeletion(request):
|
|
|
|
|
try:
|
2018-08-18 00:39:10 +05:00
|
|
|
userID = request.session['userID']
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.preSubmitDatabaseDeletion(request)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
dm = DatabaseManager()
|
|
|
|
|
coreResult = dm.submitDatabaseDeletion(userID, json.loads(request.body))
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.postSubmitDatabaseDeletion(request, coreResult)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
return coreResult
|
|
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
2017-10-24 19:16:36 +05:00
|
|
|
|
|
|
|
|
def listDBs(request):
|
|
|
|
|
try:
|
2018-08-18 00:39:10 +05:00
|
|
|
userID = request.session['userID']
|
2018-10-08 22:12:05 +05:00
|
|
|
dm = DatabaseManager()
|
|
|
|
|
return dm.listDBs(request, userID)
|
2017-10-24 19:16:36 +05:00
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
|
|
|
|
def changePassword(request):
|
|
|
|
|
try:
|
2018-08-18 00:39:10 +05:00
|
|
|
userID = request.session['userID']
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.preChangePassword(request)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
dm = DatabaseManager()
|
|
|
|
|
coreResult = dm.changePassword(userID, json.loads(request.body))
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
result = pluginManager.postChangePassword(request, coreResult)
|
|
|
|
|
if result != 200:
|
|
|
|
|
return result
|
2017-10-24 19:16:36 +05:00
|
|
|
|
2018-10-08 22:12:05 +05:00
|
|
|
return coreResult
|
|
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
2020-07-16 22:30:29 +05:00
|
|
|
def remoteAccess(request):
|
|
|
|
|
try:
|
|
|
|
|
userID = request.session['userID']
|
|
|
|
|
|
|
|
|
|
dm = DatabaseManager()
|
|
|
|
|
coreResult = dm.remoteAccess(userID, json.loads(request.body))
|
|
|
|
|
|
|
|
|
|
return coreResult
|
|
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
2020-07-17 00:12:09 +05:00
|
|
|
def allowRemoteIP(request):
|
|
|
|
|
try:
|
|
|
|
|
userID = request.session['userID']
|
|
|
|
|
|
|
|
|
|
dm = DatabaseManager()
|
|
|
|
|
coreResult = dm.allowRemoteIP(userID, json.loads(request.body))
|
|
|
|
|
|
|
|
|
|
return coreResult
|
|
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
2019-03-26 16:19:03 +05:00
|
|
|
def phpMyAdmin(request):
|
|
|
|
|
try:
|
|
|
|
|
userID = request.session['userID']
|
|
|
|
|
dm = DatabaseManager()
|
|
|
|
|
return dm.phpMyAdmin(request, userID)
|
|
|
|
|
except KeyError:
|
|
|
|
|
return redirect(loadLoginPage)
|
|
|
|
|
|
2020-08-09 00:27:57 +05:00
|
|
|
def generateAccess(request):
|
2019-03-26 16:19:03 +05:00
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
userID = request.session['userID']
|
|
|
|
|
admin = Administrator.objects.get(id = userID)
|
2020-08-09 00:27:57 +05:00
|
|
|
currentACL = ACLManager.loadedACL(userID)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
2020-08-09 00:27:57 +05:00
|
|
|
try:
|
|
|
|
|
GlobalUserDB.objects.get(username=admin.userName)
|
|
|
|
|
except:
|
|
|
|
|
|
|
|
|
|
## Key generation
|
|
|
|
|
|
|
|
|
|
keySavePath = '/home/cyberpanel/phpmyadmin_%s' % (admin.userName)
|
|
|
|
|
key = Fernet.generate_key()
|
|
|
|
|
|
|
|
|
|
writeToFile = open(keySavePath, 'w')
|
|
|
|
|
writeToFile.write(key.decode())
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
command = 'chown root:root %s' % (keySavePath)
|
|
|
|
|
ProcessUtilities.executioner(command)
|
|
|
|
|
|
|
|
|
|
command = 'chmod 600 %s' % (keySavePath)
|
|
|
|
|
ProcessUtilities.executioner(command)
|
|
|
|
|
|
|
|
|
|
##
|
|
|
|
|
|
|
|
|
|
password = randomPassword.generate_pass()
|
|
|
|
|
f = Fernet(key)
|
|
|
|
|
GlobalUserDB(username=admin, password=f.encrypt(password.encode('utf-8'))).save()
|
|
|
|
|
|
|
|
|
|
sites = ACLManager.findWebsiteObjects(currentACL, userID)
|
|
|
|
|
|
|
|
|
|
createUser = 1
|
|
|
|
|
|
|
|
|
|
for site in sites:
|
|
|
|
|
for db in site.databases_set.all():
|
|
|
|
|
mysqlUtilities.addUserToDB(db.dbName, admin.userName, password, createUser)
|
|
|
|
|
createUser = 0
|
|
|
|
|
|
|
|
|
|
# execPath = "/usr/local/CyberCP/bin/python /usr/local/CyberCP/databases/databaseManager.py"
|
|
|
|
|
# execPath = execPath + " generatePHPMYAdminData --userID " + str(userID)
|
|
|
|
|
#
|
|
|
|
|
# output = ProcessUtilities.outputExecutioner(execPath)
|
|
|
|
|
#
|
|
|
|
|
# if output.find("1,") > -1:
|
|
|
|
|
# request.session['PMA_single_signon_user'] = admin.userName
|
|
|
|
|
# request.session['PMA_single_signon_password'] = output.split(',')[1]
|
|
|
|
|
# data_ret = {'status': 1}
|
|
|
|
|
# json_data = json.dumps(data_ret)
|
|
|
|
|
# return HttpResponse(json_data)
|
|
|
|
|
# else:
|
|
|
|
|
|
|
|
|
|
data_ret = {'status': 1}
|
|
|
|
|
json_data = json.dumps(data_ret)
|
|
|
|
|
return HttpResponse(json_data)
|
2019-03-26 16:19:03 +05:00
|
|
|
|
|
|
|
|
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-03-26 16:19:03 +05:00
|
|
|
data_ret = {'status': 0, 'createDBStatus': 0, 'error_message': str(msg)}
|
|
|
|
|
json_data = json.dumps(data_ret)
|
|
|
|
|
return HttpResponse(json_data)
|