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_security import UserMixin, RoleMixin
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
import sqlalchemy.types as types
|
||||||
import uuid
|
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):
|
class Version(db.Model):
|
||||||
"""Version numbers for reference/upgrade purposes"""
|
"""Version numbers for reference/upgrade purposes"""
|
||||||
__tablename__ = 'version'
|
__tablename__ = 'version'
|
||||||
|
@ -135,7 +155,7 @@ class Server(db.Model):
|
||||||
nullable=False)
|
nullable=False)
|
||||||
maintenance_db = db.Column(db.String(64), nullable=True)
|
maintenance_db = db.Column(db.String(64), nullable=True)
|
||||||
username = db.Column(db.String(64), nullable=False)
|
username = db.Column(db.String(64), nullable=False)
|
||||||
password = db.Column(db.String(64), nullable=True)
|
password = db.Column(PgAdminDbBinaryString())
|
||||||
save_password = db.Column(
|
save_password = db.Column(
|
||||||
db.Integer(),
|
db.Integer(),
|
||||||
db.CheckConstraint('save_password >= 0 AND save_password <= 1'),
|
db.CheckConstraint('save_password >= 0 AND save_password <= 1'),
|
||||||
|
@ -191,7 +211,7 @@ class Server(db.Model):
|
||||||
nullable=False
|
nullable=False
|
||||||
)
|
)
|
||||||
tunnel_identity_file = db.Column(db.String(64), nullable=True)
|
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)
|
shared = db.Column(db.Boolean(), nullable=False)
|
||||||
kerberos_conn = db.Column(db.Boolean(), nullable=False, default=0)
|
kerberos_conn = db.Column(db.Boolean(), nullable=False, default=0)
|
||||||
cloud_status = db.Column(db.Integer(), nullable=False, default=0)
|
cloud_status = db.Column(db.Integer(), nullable=False, default=0)
|
||||||
|
@ -405,7 +425,7 @@ class SharedServer(db.Model):
|
||||||
nullable=True)
|
nullable=True)
|
||||||
maintenance_db = db.Column(db.String(64), nullable=True)
|
maintenance_db = db.Column(db.String(64), nullable=True)
|
||||||
username = db.Column(db.String(64), nullable=False)
|
username = db.Column(db.String(64), nullable=False)
|
||||||
password = db.Column(db.String(64), nullable=True)
|
password = db.Column(PgAdminDbBinaryString())
|
||||||
save_password = db.Column(
|
save_password = db.Column(
|
||||||
db.Integer(),
|
db.Integer(),
|
||||||
db.CheckConstraint('save_password >= 0 AND save_password <= 1'),
|
db.CheckConstraint('save_password >= 0 AND save_password <= 1'),
|
||||||
|
@ -459,7 +479,7 @@ class SharedServer(db.Model):
|
||||||
nullable=False
|
nullable=False
|
||||||
)
|
)
|
||||||
tunnel_identity_file = db.Column(db.String(64), nullable=True)
|
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)
|
shared = db.Column(db.Boolean(), nullable=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue