diff --git a/web/pgadmin/browser/__init__.py b/web/pgadmin/browser/__init__.py
index 15a500890..3dc05108a 100644
--- a/web/pgadmin/browser/__init__.py
+++ b/web/pgadmin/browser/__init__.py
@@ -746,12 +746,14 @@ def get_nodes():
def form_master_password_response(existing=True, present=False, errmsg=None,
- keyring_name=''):
+ keyring_name='',
+ invalid_master_password_hook=False):
return make_json_response(data={
'present': present,
'reset': existing,
'errmsg': errmsg,
'keyring_name': keyring_name,
+ 'invalid_master_password_hook': invalid_master_password_hook,
'is_error': True if errmsg else False
})
@@ -893,7 +895,8 @@ def set_master_password():
return form_master_password_response(
existing=False,
present=False,
- errmsg=error
+ errmsg=error,
+ invalid_master_password_hook=True
)
# Master password is applicable for Desktop mode and in server mode
@@ -906,13 +909,15 @@ def set_master_password():
if current_user.masterpass_check is not None and \
data.get('submit_password', False) and \
not validate_master_password(data.get('password')):
- errmsg = gettext("Password mismatch error") if \
- config.MASTER_PASSWORD_HOOK else \
- gettext("Incorrect master password")
+ errmsg = '' if config.MASTER_PASSWORD_HOOK \
+ else gettext("Incorrect master password")
+ invalid_master_password_hook = \
+ True if config.MASTER_PASSWORD_HOOK else False
return form_master_password_response(
existing=True,
present=False,
- errmsg=errmsg
+ errmsg=errmsg,
+ invalid_master_password_hook=invalid_master_password_hook
)
# if master password received in request
diff --git a/web/pgadmin/static/js/Dialogs/index.jsx b/web/pgadmin/static/js/Dialogs/index.jsx
index 8e2f712a2..1a8bb3394 100644
--- a/web/pgadmin/static/js/Dialogs/index.jsx
+++ b/web/pgadmin/static/js/Dialogs/index.jsx
@@ -157,12 +157,12 @@ export function checkMasterPassword(data, masterpass_callback_queue, cancel_call
const api = getApiInstance();
api.post(url_for('browser.set_master_password'), data).then((res)=> {
let isKeyring = res.data.data.keyring_name.length > 0;
+
if(!res.data.data.present) {
- if(res.data.data.is_error){
- //show notifier with error
- if(!res.data.data.reset){
+ if (res.data.data.invalid_master_password_hook){
+ if(res.data.data.is_error){
Notify.error(res.data.data.errmsg);
- }else if(res.data.data.errmsg == 'Password mismatch error'){
+ }else{
Notify.confirm(gettext('Reset Master Password'),
gettext('The master password retrieved from the master password hook utility is different from what was previously retrieved.') + '
'
+ gettext('Do you want to reset your master password to match?') + '
'
@@ -179,12 +179,11 @@ export function checkMasterPassword(data, masterpass_callback_queue, cancel_call
return true;
},
function() {/* If user clicks No */ return true;}
- );
- }
- }
- else{
+ );}
+ }else{
showMasterPassword(res.data.data.reset, res.data.data.errmsg, masterpass_callback_queue, cancel_callback, res.data.data.keyring_name);
}
+
} else {
masterPassCallbacks(masterpass_callback_queue);
@@ -199,7 +198,7 @@ export function checkMasterPassword(data, masterpass_callback_queue, cancel_call
}
// This functions is used to show the master password dialog.
-export function showMasterPassword(isPWDPresent, errmsg, masterpass_callback_queue, cancel_callback, keyring_name) {
+export function showMasterPassword(isPWDPresent, errmsg, masterpass_callback_queue, cancel_callback, keyring_name='') {
const api = getApiInstance();
let title = keyring_name.length > 0 ? gettext('Migrate Saved Passwords') : isPWDPresent ? gettext('Unlock Saved Passwords') : gettext('Set Master Password');