1) Don't ask for SSH Tunnel or Database server password if it is already saved.

2) Modified the generic error message from SSH Tunnel library.
pull/9209/head
Akshay Joshi 2025-10-06 16:52:36 +05:30
parent 999462816b
commit 27f0125c24
3 changed files with 29 additions and 21 deletions

View File

@ -1432,8 +1432,9 @@ class ServerNode(PGChildNodeView):
""" """
prompt_tunnel_password = True prompt_tunnel_password = True
# In case of identity file check the value of tunnel_prompt_password. # In case of identity file check the value of tunnel_prompt_password.
if server.tunnel_identity_file is not None and \ if server.tunnel_password is not None or \
server.tunnel_prompt_password != 1: (server.tunnel_identity_file is not None and
server.tunnel_prompt_password != 1):
prompt_tunnel_password = False prompt_tunnel_password = False
return prompt_tunnel_password return prompt_tunnel_password
@ -1595,7 +1596,7 @@ class ServerNode(PGChildNodeView):
) )
except Exception as e: except Exception as e:
return self.get_response_for_password( return self.get_response_for_password(
server, 401, True, prompt_tunnel_password, server, 401, not server.save_password, prompt_tunnel_password,
getattr(e, 'message', str(e))) getattr(e, 'message', str(e)))
if not status: if not status:
@ -1607,7 +1608,8 @@ class ServerNode(PGChildNodeView):
return internal_server_error(errmsg) return internal_server_error(errmsg)
return self.get_response_for_password( return self.get_response_for_password(
server, 401, True, prompt_tunnel_password, errmsg) server, 401, not server.save_password,
prompt_tunnel_password, errmsg)
else: else:
if save_password and config.ALLOW_SAVE_PASSWORD: if save_password and config.ALLOW_SAVE_PASSWORD:
try: try:

View File

@ -109,21 +109,23 @@ export default function ConnectServerContent({closeModal, data, onOK, setHeight,
<DefaultButton data-test="close" startIcon={<CloseIcon />} onClick={()=>{ <DefaultButton data-test="close" startIcon={<CloseIcon />} onClick={()=>{
closeModal(); closeModal();
}} >{gettext('Cancel')}</DefaultButton> }} >{gettext('Cancel')}</DefaultButton>
<PrimaryButton ref={okBtnRef} data-test="save" startIcon={<CheckRoundedIcon />} onClick={()=>{ {(data.prompt_password || data.prompt_tunnel_password) && <>
let postFormData = new FormData(); <PrimaryButton ref={okBtnRef} data-test="save" startIcon={<CheckRoundedIcon />} onClick={()=>{
if(data.prompt_tunnel_password) { let postFormData = new FormData();
postFormData.append('tunnel_password', formData.tunnel_password); if(data.prompt_tunnel_password) {
formData.save_tunnel_password && postFormData.append('tunnel_password', formData.tunnel_password);
postFormData.append('save_tunnel_password', formData.save_tunnel_password); formData.save_tunnel_password &&
} postFormData.append('save_tunnel_password', formData.save_tunnel_password);
if(data.prompt_password) { }
postFormData.append('password', formData.password); if(data.prompt_password) {
formData.save_password && postFormData.append('password', formData.password);
postFormData.append('save_password', formData.save_password); formData.save_password &&
} postFormData.append('save_password', formData.save_password);
onOK?.(postFormData); }
closeModal(); onOK?.(postFormData);
}} >{gettext('OK')}</PrimaryButton> closeModal();
}} >{gettext('OK')}</PrimaryButton>
</>}
</ModalFooter> </ModalFooter>
</ModalContent> </ModalContent>
); );

View File

@ -612,8 +612,12 @@ WHERE db.oid = {0}""".format(did))
self.tunnel_created = True self.tunnel_created = True
except BaseSSHTunnelForwarderError as e: except BaseSSHTunnelForwarderError as e:
current_app.logger.exception(e) current_app.logger.exception(e)
return False, gettext("Failed to create the SSH tunnel.\n" return False, gettext(
"Error: {0}").format(str(e)) "Failed to create the SSH tunnel. Possible causes:\n"
"1. Enter the correct tunnel password (Clear saved password "
"if it has changed).\n 2. If using an identity file that "
"requires a password, enable “Prompt for Password?” in the "
"server dialog. \n 3. Verify the host address.")
# Update the port to communicate locally # Update the port to communicate locally
self.local_bind_port = self.tunnel_object.local_bind_port self.local_bind_port = self.tunnel_object.local_bind_port