|
19 | 19 | KEY_RING_DESKTOP_USER, SSL_MODES, RESTRICTION_TYPE_DATABASES, |
20 | 20 | RESTRICTION_TYPE_SQL) |
21 | 21 | from pgadmin.utils.crypto import encrypt, decrypt |
22 | | -from pgadmin.model import db, Server |
| 22 | +from pgadmin.model import db, Server, SharedServer |
23 | 23 | from flask import current_app |
24 | 24 | from pgadmin.utils.master_password import set_masterpass_check_text |
25 | 25 | from pgadmin.utils.driver import get_driver |
@@ -472,6 +472,31 @@ def reencrpyt_server_passwords(user_id, old_key, new_key): |
472 | 472 | db.session.commit() |
473 | 473 | manager.update_session() |
474 | 474 |
|
| 475 | + # Ensure saved shared server passwords are re-encrypted. |
| 476 | + for server in SharedServer.query.filter_by(user_id=user_id).all(): |
| 477 | + manager = driver.connection_manager(server.id) |
| 478 | + _password_check(server, manager, old_key, new_key) |
| 479 | + |
| 480 | + if server.tunnel_password is not None: |
| 481 | + tunnel_password = decrypt(server.tunnel_password, old_key) |
| 482 | + if isinstance(tunnel_password, bytes): |
| 483 | + tunnel_password = tunnel_password.decode() |
| 484 | + |
| 485 | + tunnel_password = encrypt(tunnel_password, new_key) |
| 486 | + setattr(server, 'tunnel_password', tunnel_password) |
| 487 | + manager.tunnel_password = tunnel_password |
| 488 | + elif manager.tunnel_password is not None: |
| 489 | + tunnel_password = decrypt(manager.tunnel_password, old_key) |
| 490 | + |
| 491 | + if isinstance(tunnel_password, bytes): |
| 492 | + tunnel_password = tunnel_password.decode() |
| 493 | + |
| 494 | + tunnel_password = encrypt(tunnel_password, new_key) |
| 495 | + manager.tunnel_password = tunnel_password |
| 496 | + |
| 497 | + db.session.commit() |
| 498 | + manager.update_session() |
| 499 | + |
475 | 500 |
|
476 | 501 | def remove_saved_passwords(user_id): |
477 | 502 | """ |
|
0 commit comments