From c80bc9d9e1e695871cbb4760fb0e7f5d6b427205 Mon Sep 17 00:00:00 2001 From: Usman Nasir Date: Fri, 17 Jul 2020 00:12:09 +0500 Subject: [PATCH] finish allow remote access for db user --- databases/databaseManager.py | 56 +++++++-- databases/static/databases/databases.js | 93 +++++++++++---- .../templates/databases/listDataBases.html | 33 +++++- databases/urls.py | 4 +- databases/views.py | 11 ++ plogical/mysqlUtilities.py | 21 ++++ static/databases/databases.js | 107 ++++++++++++++++++ 7 files changed, 289 insertions(+), 36 deletions(-) diff --git a/databases/databaseManager.py b/databases/databaseManager.py index 0d329a5a0..3ededecfd 100755 --- a/databases/databaseManager.py +++ b/databases/databaseManager.py @@ -12,13 +12,15 @@ 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 +from databases.models import Databases, DBMeta import argparse from loginSystem.models import Administrator import plogical.randomPassword as randomPassword class DatabaseManager: + REMOTE_ACCESS = 'remote_access' + def loadDatabaseHome(self, request = None, userID = None): try: return render(request, 'databases/index.html') @@ -223,7 +225,6 @@ class DatabaseManager: return ACLManager.loadErrorJson('changePasswordStatus', 0) userName = data['dbUserName'] - dbPassword = data['dbPassword'] db = Databases.objects.filter(dbUser=userName) @@ -233,20 +234,57 @@ class DatabaseManager: else: return ACLManager.loadErrorJson() - - res = mysqlUtilities.changePassword(userName, dbPassword) - - if res == 0: - data_ret = {'status': 0, 'changePasswordStatus': 0,'error_message': "Please see CyberPanel main log file."} + try: + meta = DBMeta.objects.get(database=db[0], key=DatabaseManager.REMOTE_ACCESS) + data_ret = {'status': 1, 'dbHost': json.loads(meta.value)['remoteIP']} json_data = json.dumps(data_ret) return HttpResponse(json_data) - data_ret = {'status': 1, 'changePasswordStatus': 1, 'error_message': "None"} + except BaseException as msg: + data_ret = {'status': 1, 'dbHost': 'localhost'} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + except BaseException as msg: + data_ret = {'status': 0,'error_message': str(msg)} + json_data = json.dumps(data_ret) + return HttpResponse(json_data) + + def allowRemoteIP(self, userID = None, data = None): + try: + currentACL = ACLManager.loadedACL(userID) + + if ACLManager.currentContextPermission(currentACL, 'listDatabases') == 0: + return ACLManager.loadErrorJson('changePasswordStatus', 0) + + userName = data['dbUserName'] + remoteIP = data['remoteIP'] + + db = Databases.objects.filter(dbUser=userName) + + admin = Administrator.objects.get(pk=userID) + if ACLManager.checkOwnership(db[0].website.domain, admin, currentACL) == 1: + pass + else: + return ACLManager.loadErrorJson() + + mysqlUtilities.allowRemoteAccess(db[0].dbName, userName, remoteIP) + + metaData = {'remoteIP': remoteIP} + + try: + meta = DBMeta.objects.get(database=db[0], key=DatabaseManager.REMOTE_ACCESS) + meta.value = json.dumps(metaData) + meta.save() + except: + DBMeta(database=db[0], value = json.dumps(metaData), key=DatabaseManager.REMOTE_ACCESS).save() + + data_ret = {'status': 1} json_data = json.dumps(data_ret) return HttpResponse(json_data) except BaseException as msg: - data_ret = {'status': 0, 'changePasswordStatus': 0, 'error_message': str(msg)} + data_ret = {'status': 0,'error_message': str(msg)} json_data = json.dumps(data_ret) return HttpResponse(json_data) diff --git a/databases/static/databases/databases.js b/databases/static/databases/databases.js index c59477dbb..be32a6b45 100755 --- a/databases/static/databases/databases.js +++ b/databases/static/databases/databases.js @@ -457,18 +457,13 @@ app.controller('listDBs', function ($scope, $http) { $scope.remoteAccess = function (userName) { $scope.dbUsername = userName; - alert($scope.dbUsername); - return 0; - $scope.dbLoading = false; - $scope.passwordChanged = true; - url = "/dataBases/changePassword"; + url = "/dataBases/remoteAccess"; var data = { - dbUserName: globalDBUsername, - dbPassword: $scope.dbPassword, + dbUserName: $scope.dbUsername }; var config = { @@ -477,33 +472,89 @@ app.controller('listDBs', function ($scope, $http) { } }; - $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); - function ListInitialDatas(response) { + $scope.dbLoading = true; + if (response.data.status === 1) { - if (response.data.changePasswordStatus == 1) { - $scope.notificationsBox = false; - $scope.passwordChanged = false; - $scope.dbLoading = true; - $scope.domainFeteched = $scope.selectedDomain; + $scope.dbHost = response.data.dbHost; } else { - $scope.notificationsBox = false; - $scope.canNotChangePassword = false; - $scope.dbLoading = true; - $scope.canNotChangePassword = false; - $scope.errorMessage = response.data.error_message; + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + } } function cantLoadInitialDatas(response) { - $scope.notificationsBox = false; - $scope.couldNotConnect = false; + new PNotify({ + title: 'Operation Failed!', + text: 'Could not connect to server, please refresh this page', + type: 'error' + }); + $scope.dbLoading = true; + + } + + }; + + $scope.allowRemoteIP = function () { + + $scope.dbLoading = false; + + url = "/dataBases/allowRemoteIP"; + + var data = { + dbUserName: $scope.dbUsername, + remoteIP: $scope.remoteIP + }; + + var config = { + headers: { + 'X-CSRFToken': getCookie('csrftoken') + } + }; + + $http.post(url, data, config).then(ListInitialDatas, cantLoadInitialDatas); + + function ListInitialDatas(response) { + $scope.dbLoading = true; + + if (response.data.status === 1) { + + $scope.remoteAccess($scope.dbUsername); + + new PNotify({ + title: 'Success', + text: 'Changes applied.', + type: 'success' + }); + + } + else { + new PNotify({ + title: 'Operation Failed!', + text: response.data.error_message, + type: 'error' + }); + + } + + } + + function cantLoadInitialDatas(response) { + new PNotify({ + title: 'Operation Failed!', + text: 'Could not connect to server, please refresh this page', + type: 'error' + }); $scope.dbLoading = true; } diff --git a/databases/templates/databases/listDataBases.html b/databases/templates/databases/listDataBases.html index 66c7e3d12..2f8589839 100755 --- a/databases/templates/databases/listDataBases.html +++ b/databases/templates/databases/listDataBases.html @@ -137,10 +137,33 @@