Handle saved password binary text for PostgreSQL when used as an external database. #5535
parent
ec56cb9d28
commit
a483734190
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue