From 0438b47207e8e284cfaf5d10344455044ed338c7 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Sun, 9 Aug 2020 12:45:18 +0500 Subject: [PATCH] complete phpmyadmin --- databases/static/databases/databases.js | 10 ++- databases/templates/databases/phpMyAdmin.html | 3 +- databases/urls.py | 1 + databases/views.py | 69 ++++++++++++++----- install/install.py | 4 ++ plogical/phpmyadminsignin.php | 40 +++++++++++ plogical/test.py | 1 + plogical/upgrade.py | 16 +++++ static/databases/databases.js | 16 +++-- 9 files changed, 131 insertions(+), 29 deletions(-) create mode 100644 plogical/phpmyadminsignin.php diff --git a/databases/static/databases/databases.js b/databases/static/databases/databases.js index b417175e0..510222fca 100755 --- a/databases/static/databases/databases.js +++ b/databases/static/databases/databases.js @@ -568,9 +568,12 @@ app.controller('listDBs', function ($scope, $http) { app.controller('phpMyAdmin', function ($scope, $http, $window) { + $scope.cyberPanelLoading = true; $scope.generateAccess = function() { + $scope.cyberPanelLoading = false; + url = "/dataBases/generateAccess"; var data = {}; @@ -586,15 +589,16 @@ app.controller('phpMyAdmin', function ($scope, $http, $window) { function ListInitialDatas(response) { - + $scope.cyberPanelLoading = true; if (response.data.status === 1) { - $window.location.href = '/phpmyadmin'; + var rUrl = '/phpmyadmin/signin.php?username=' + response.data.username + '&token=' + response.data.token; + $window.location.href = rUrl; } else {} } - function cantLoadInitialDatas(response) {} + function cantLoadInitialDatas(response) {$scope.cyberPanelLoading = true;} } diff --git a/databases/templates/databases/phpMyAdmin.html b/databases/templates/databases/phpMyAdmin.html index 431b87fc1..00a192ae6 100755 --- a/databases/templates/databases/phpMyAdmin.html +++ b/databases/templates/databases/phpMyAdmin.html @@ -24,8 +24,7 @@

{% trans "Auto-login for PHPMYAdmin is now supported. Click the button below to generate auto-access for PHPMYAdmin" %}


- + diff --git a/databases/urls.py b/databases/urls.py index 8ac471f8f..02a514f83 100755 --- a/databases/urls.py +++ b/databases/urls.py @@ -18,4 +18,5 @@ urlpatterns = [ url(r'^allowRemoteIP$', views.allowRemoteIP, name='allowRemoteIP'), url(r'^phpMyAdmin$', views.phpMyAdmin, name='phpMyAdmin'), url(r'^generateAccess$', views.generateAccess, name='generateAccess'), + url(r'^fetchDetailsPHPMYAdmin$', views.fetchDetailsPHPMYAdmin, name='fetchDetailsPHPMYAdmin'), ] \ No newline at end of file diff --git a/databases/views.py b/databases/views.py index a9bf018b7..f5edc01c2 100755 --- a/databases/views.py +++ b/databases/views.py @@ -162,9 +162,12 @@ def generateAccess(request): currentACL = ACLManager.loadedACL(userID) try: - GlobalUserDB.objects.get(username=admin.userName) - except: + gdb = GlobalUserDB.objects.get(username=admin.userName) + token = randomPassword.generate_pass() + gdb.token = token + gdb.save() + except: ## Key generation keySavePath = '/home/cyberpanel/phpmyadmin_%s' % (admin.userName) @@ -183,8 +186,9 @@ def generateAccess(request): ## password = randomPassword.generate_pass() + token = randomPassword.generate_pass() f = Fernet(key) - GlobalUserDB(username=admin, password=f.encrypt(password.encode('utf-8'))).save() + GlobalUserDB(username=admin.userName, password=f.encrypt(password.encode('utf-8')).decode(), token=token).save() sites = ACLManager.findWebsiteObjects(currentACL, userID) @@ -195,24 +199,55 @@ def generateAccess(request): 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} + data_ret = {'status': 1, 'token': token, 'username': admin.userName} json_data = json.dumps(data_ret) return HttpResponse(json_data) + except BaseException as msg: + data_ret = {'status': 0, 'createDBStatus': 0, 'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + +def fetchDetailsPHPMYAdmin(request): + try: + + + userID = request.session['userID'] + admin = Administrator.objects.get(id = userID) + currentACL = ACLManager.loadedACL(userID) + + username = request.GET.get('username') + token = request.GET.get('token') + + if username != admin.userName: + return redirect(loadLoginPage) + + ## Key generation + + gdb = GlobalUserDB.objects.get(username=admin.userName) + + if gdb.token == token: + keySavePath = '/home/cyberpanel/phpmyadmin_%s' % (admin.userName) + key = ProcessUtilities.outputExecutioner('cat %s' % (keySavePath)).strip('\n').encode() + f = Fernet(key) + password = f.decrypt(gdb.password.encode('utf-8')) + + sites = ACLManager.findWebsiteObjects(currentACL, userID) + + createUser = 0 + + for site in sites: + for db in site.databases_set.all(): + mysqlUtilities.addUserToDB(db.dbName, admin.userName, password.decode(), createUser) + createUser = 0 + + returnURL = '/phpmyadmin/signin.php?username=%s&password=%s' % (admin.userName, password.decode()) + return redirect(returnURL) + else: + return redirect(loadLoginPage) + + except BaseException as msg: data_ret = {'status': 0, 'createDBStatus': 0, 'error_message': str(msg)} json_data = json.dumps(data_ret) diff --git a/install/install.py b/install/install.py index 9f284f16b..e5d9e2280 100755 --- a/install/install.py +++ b/install/install.py @@ -702,6 +702,10 @@ class preFlightsChecks: command = "sed -i 's|'localhost'|'%s'|g' %s" % (self.mysqlhost, '/usr/local/CyberCP/public/phpmyadmin/config.inc.php') preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR) + + command = 'cp /usr/local/CyberCP/plogical/phpmyadminsignin.php /usr/local/CyberCP/public/phpmyadmin/phpmyadminsignin.php' + preFlightsChecks.call(command, self.distro, command, command, 1, 0, os.EX_OSERR) + except BaseException as msg: logging.InstallLog.writeToFile('[ERROR] ' + str(msg) + " [download_install_phpmyadmin]") return 0 diff --git a/plogical/phpmyadminsignin.php b/plogical/phpmyadminsignin.php new file mode 100644 index 000000000..880ca075d --- /dev/null +++ b/plogical/phpmyadminsignin.php @@ -0,0 +1,40 @@ +