From 1a756efe82340218045ff0e481676b349e0a1bf0 Mon Sep 17 00:00:00 2001 From: Nikhil Mohite Date: Wed, 13 Jan 2021 12:18:16 +0530 Subject: [PATCH] Fixed an issue where Non-admin user is unable to view shared server created using service. Fixes #6075 --- docs/en_US/release_notes_4_30.rst | 1 + web/migrations/versions/a39bd015b644_.py | 97 ++++++++++++++++++++++++ web/pgadmin/model/__init__.py | 3 +- 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 web/migrations/versions/a39bd015b644_.py diff --git a/docs/en_US/release_notes_4_30.rst b/docs/en_US/release_notes_4_30.rst index abc229c2a..6c727a840 100644 --- a/docs/en_US/release_notes_4_30.rst +++ b/docs/en_US/release_notes_4_30.rst @@ -33,6 +33,7 @@ Bug fixes | `Issue #6061 `_ - Fixed extra parentheses issue around joins for Views. | `Issue #6065 `_ - Fixed accessibility issues in schema diff module. | `Issue #6069 `_ - Fixed an issue on refreshing files in Query Tool. +| `Issue #6075 `_ - Fixed an issue where Non-admin user is unable to view shared server created using service. | `Issue #6077 `_ - Fixed accessibility issues in various dialogs. | `Issue #6084 `_ - Fixed TypeError exception in schema diff when selected any identical object. | `Issue #6096 `_ - Updated deployment documentation, refer correctly to uWSGI where Gunicorn had been referenced. diff --git a/web/migrations/versions/a39bd015b644_.py b/web/migrations/versions/a39bd015b644_.py new file mode 100644 index 000000000..da887ab2d --- /dev/null +++ b/web/migrations/versions/a39bd015b644_.py @@ -0,0 +1,97 @@ + +"""empty message + +Revision ID: a39bd015b644 +Revises: 81c7ffeffeee +Create Date: 2021-01-12 15:46:49.283021 + +""" +from pgadmin.model import db + + +# revision identifiers, used by Alembic. +revision = 'a39bd015b644' +down_revision = '81c7ffeffeee' +branch_labels = None +depends_on = None + + +def upgrade(): + # Rename older table to save previous data + db.engine.execute("ALTER TABLE sharedserver RENAME TO sharedserver_old") + + # Create new table with removed not null constraints for port column. + db.engine.execute(""" + CREATE TABLE sharedserver ( + id INTEGER NOT NULL, + user_id INTEGER NOT NULL, + server_owner VARCHAR(64), + servergroup_id INTEGER NOT NULL, + name VARCHAR(128) NOT NULL, + host VARCHAR(128), + port INTEGER, + maintenance_db VARCHAR(64), + username VARCHAR(64), + password VARCHAR(64), + role VARCHAR(64), + ssl_mode VARCHAR(16) NOT NULL CHECK(ssl_mode IN + ( 'allow' , 'prefer' , 'require' , 'disable' , + 'verify-ca' , 'verify-full' ) + ), + comment VARCHAR(1024), + discovery_id VARCHAR(128), + hostaddr TEXT(1024), + db_res TEXT, + passfile TEXT, + sslcert TEXT, + sslkey TEXT, + sslrootcert TEXT, + sslcrl TEXT, + sslcompression INTEGER DEFAULT 0, + bgcolor TEXT(10), + fgcolor TEXT(10), + service TEXT, + use_ssh_tunnel INTEGER DEFAULT 0, + tunnel_host TEXT, + tunnel_port TEXT, + tunnel_username TEXT, + tunnel_authentication INTEGER DEFAULT 0, + tunnel_identity_file TEXT, + shared BOOLEAN NOT NULL, + save_password BOOLEAN NOT NULL, + tunnel_password VARCHAR(64), + connect_timeout INTEGER , + PRIMARY KEY(id), + FOREIGN KEY(user_id) REFERENCES user(id), + FOREIGN KEY(servergroup_id) REFERENCES servergroup(id) + ); + """) + + # Copy old data again into table. + db.engine.execute(""" + INSERT INTO sharedserver ( + id, user_id, server_owner, servergroup_id, name, host, port, + maintenance_db, username, password, role, ssl_mode, comment, + discovery_id, hostaddr, db_res, passfile, sslcert, sslkey, + sslrootcert, sslcrl, sslcompression, bgcolor, fgcolor, service, + use_ssh_tunnel, tunnel_host, tunnel_port, tunnel_username, + tunnel_authentication, tunnel_identity_file, shared, save_password, + tunnel_password, connect_timeout + + ) SELECT + id, user_id, server_owner, servergroup_id, name, host, port, + maintenance_db, username, password, role, ssl_mode, comment, + discovery_id, hostaddr, db_res, passfile, sslcert, sslkey, + sslrootcert, sslcrl, sslcompression, bgcolor, fgcolor, service, + use_ssh_tunnel, tunnel_host, tunnel_port, tunnel_username, + tunnel_authentication, tunnel_identity_file, shared, save_password, + tunnel_password, connect_timeout + FROM sharedserver_old""") + + # Drop older table. + db.engine.execute("DROP TABLE sharedserver_old") + + +def downgrade(): + # pgAdmin only upgrades, downgrade not implemented. + pass diff --git a/web/pgadmin/model/__init__.py b/web/pgadmin/model/__init__.py index 34136d634..d1f498181 100644 --- a/web/pgadmin/model/__init__.py +++ b/web/pgadmin/model/__init__.py @@ -379,8 +379,7 @@ class SharedServer(db.Model): hostaddr = db.Column(db.String(128), nullable=True) port = db.Column( db.Integer(), - db.CheckConstraint('port >= 1 AND port <= 65534'), - nullable=False) + 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)