mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Handle saved password binary text for PostgreSQL when used as an external database. #5535
This commit is contained in:
@@ -20,6 +20,7 @@ things:
|
||||
|
||||
from flask_security import UserMixin, RoleMixin
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
import sqlalchemy.types as types
|
||||
import uuid
|
||||
|
||||
##########################################################################
|
||||
@@ -50,6 +51,25 @@ roles_users = db.Table(
|
||||
)
|
||||
|
||||
|
||||
class PgAdminDbBinaryString(types.TypeDecorator):
|
||||
"""
|
||||
To make binary string storing compatible with both
|
||||
SQLite and PostgreSQL, convert the bin data to hex
|
||||
to store and convert hex back to binary to get
|
||||
"""
|
||||
cache_ok = True
|
||||
impl = types.String
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
return value.hex()
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
try:
|
||||
return bytes.fromhex(value)
|
||||
except Exception as _:
|
||||
return value
|
||||
|
||||
|
||||
class Version(db.Model):
|
||||
"""Version numbers for reference/upgrade purposes"""
|
||||
__tablename__ = 'version'
|
||||
@@ -135,7 +155,7 @@ class Server(db.Model):
|
||||
nullable=False)
|
||||
maintenance_db = db.Column(db.String(64), nullable=True)
|
||||
username = db.Column(db.String(64), nullable=False)
|
||||
password = db.Column(db.String(64), nullable=True)
|
||||
password = db.Column(PgAdminDbBinaryString())
|
||||
save_password = db.Column(
|
||||
db.Integer(),
|
||||
db.CheckConstraint('save_password >= 0 AND save_password <= 1'),
|
||||
@@ -191,7 +211,7 @@ class Server(db.Model):
|
||||
nullable=False
|
||||
)
|
||||
tunnel_identity_file = db.Column(db.String(64), nullable=True)
|
||||
tunnel_password = db.Column(db.String(64), nullable=True)
|
||||
tunnel_password = db.Column(PgAdminDbBinaryString())
|
||||
shared = db.Column(db.Boolean(), nullable=False)
|
||||
kerberos_conn = db.Column(db.Boolean(), nullable=False, default=0)
|
||||
cloud_status = db.Column(db.Integer(), nullable=False, default=0)
|
||||
@@ -405,7 +425,7 @@ class SharedServer(db.Model):
|
||||
nullable=True)
|
||||
maintenance_db = db.Column(db.String(64), nullable=True)
|
||||
username = db.Column(db.String(64), nullable=False)
|
||||
password = db.Column(db.String(64), nullable=True)
|
||||
password = db.Column(PgAdminDbBinaryString())
|
||||
save_password = db.Column(
|
||||
db.Integer(),
|
||||
db.CheckConstraint('save_password >= 0 AND save_password <= 1'),
|
||||
@@ -459,7 +479,7 @@ class SharedServer(db.Model):
|
||||
nullable=False
|
||||
)
|
||||
tunnel_identity_file = db.Column(db.String(64), nullable=True)
|
||||
tunnel_password = db.Column(db.String(64), nullable=True)
|
||||
tunnel_password = db.Column(PgAdminDbBinaryString())
|
||||
shared = db.Column(db.Boolean(), nullable=False)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user