diff --git a/docs/en_US/images/server_advanced.png b/docs/en_US/images/server_advanced.png new file mode 100644 index 0000000000000000000000000000000000000000..3f365fc10149694ab322a3e4c67eaa787f6a6b5f GIT binary patch literal 75902 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
  • +(%w?XLDBtw!XKSSL(a0F`R3A5 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 Y>DxRxONx5>l8N!TXl!9r4fVM9AL(lzjsO4v literal 0 HcmV?d00001 diff --git a/docs/en_US/server_dialog.rst b/docs/en_US/server_dialog.rst index 7a0c3859..5c8ae667 100644 --- a/docs/en_US/server_dialog.rst +++ b/docs/en_US/server_dialog.rst @@ -38,3 +38,10 @@ Use the fields in the *Connection* tab to configure a connection: * Click the *Cancel* button to exit without saving work. * Click the *Reset* button to restore configuration parameters. +Click the *Advanced* tab to continue. + +.. image:: images/server_advanced.png + +Use the fields in the *Advanced* tab to configure a connection: + +* Specify the IP address of the server host. \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index cc00a8d6..7fcf6772 100644 --- a/requirements.txt +++ b/requirements.txt @@ -41,3 +41,4 @@ sqlparse==0.1.19 Werkzeug==0.9.6 WTForms==2.0.2 backports.csv==1.0.4; python_version <= '2.7' +ipaddress==1.0.18 diff --git a/web/migrations/versions/3c1e4b6eda55_.py b/web/migrations/versions/3c1e4b6eda55_.py new file mode 100644 index 00000000..308e9ebe --- /dev/null +++ b/web/migrations/versions/3c1e4b6eda55_.py @@ -0,0 +1,35 @@ + +"""empty message + +Revision ID: 3c1e4b6eda55 +Revises: 09d53fca90c7 +Create Date: 2017-06-13 17:05:30.671859 + +""" +import base64 + +import sys +from alembic import op +from pgadmin.model import db, Server +import config +import os +from pgadmin.setup import get_version + + +# revision identifiers, used by Alembic. +revision = '3c1e4b6eda55' +down_revision = '09d53fca90c7' +branch_labels = None +depends_on = None + + +def upgrade(): + verison = get_version() + + db.engine.execute( + 'ALTER TABLE server ADD COLUMN hostaddr TEXT(1024)' + ) + + +def downgrade(): + pass diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index d88363a6..6f1d612c 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -25,7 +25,7 @@ import config from config import PG_DEFAULT_DRIVER from pgadmin.model import db, Server, ServerGroup, User from pgadmin.utils.driver import get_driver - +import ipaddress def has_any(data, keys): """ @@ -353,6 +353,7 @@ class ServerNode(PGChildNodeView): config_param_map = { 'name': 'name', 'host': 'host', + 'hostaddr': 'hostaddr', 'port': 'port', 'db': 'maintenance_db', 'username': 'username', @@ -378,13 +379,25 @@ class ServerNode(PGChildNodeView): request.data, encoding='utf-8' ) + if 'hostaddr' in data and data['hostaddr'] != '': + try: + ipaddress.ip_address(data['hostaddr']) + except ValueError as e: + return make_json_response( + success=0, + status=400, + errormsg=gettext('Host address not valid') + ) + + + manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection() connected = conn.connected() if connected: for arg in ( - 'host', 'port', 'db', 'username', 'sslmode', 'role' + 'host', 'hostaddr', 'port', 'db', 'username', 'sslmode', 'role' ): if arg in data: return forbidden( @@ -398,6 +411,7 @@ class ServerNode(PGChildNodeView): setattr(server, config_param_map[arg], data[arg]) idx += 1 + if idx == 0: return make_json_response( success=0, @@ -501,6 +515,7 @@ class ServerNode(PGChildNodeView): 'id': server.id, 'name': server.name, 'host': server.host, + 'hostaddr': server.hostaddr, 'port': server.port, 'db': server.maintenance_db, 'username': server.username, @@ -531,6 +546,7 @@ class ServerNode(PGChildNodeView): request.data, encoding='utf-8' ) + for arg in required_args: if arg not in data: return make_json_response( @@ -541,6 +557,16 @@ class ServerNode(PGChildNodeView): ) ) + if 'hostaddr' in data and data['hostaddr'] != '': + try: + ipaddress.ip_address(data['hostaddr']) + except ValueError as e: + return make_json_response( + success=0, + status=400, + errormsg=gettext('Host address not valid') + ) + server = None try: @@ -549,6 +575,7 @@ class ServerNode(PGChildNodeView): servergroup_id=data[u'gid'] if u'gid' in data else gid, name=data[u'name'], host=data[u'host'], + hostaddr=data[u'hostaddr'] if u'hostaddr' in data else None, port=data[u'port'], maintenance_db=data[u'db'], username=data[u'username'], diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js index 52d60f54..10ea266e 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/server.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js @@ -602,6 +602,7 @@ define('pgadmin.node.server', [ name: '', sslmode: 'prefer', host: '', + hostaddr: '', port: 5432, db: 'postgres', username: current_user.name, @@ -651,6 +652,9 @@ define('pgadmin.node.server', [ id: 'host', label: gettext('Host name/address'), type: 'text', group: gettext('Connection'), mode: ['properties', 'edit', 'create'], disabled: 'isConnected' },{ + id: 'hostaddr', label: gettext('Host address'), type: 'text', group: gettext('Advanced'), + mode: ['properties', 'edit', 'create'], disabled: 'isConnected' + },{ id: 'port', label: gettext('Port'), type: 'int', group: gettext('Connection'), mode: ['properties', 'edit', 'create'], disabled: 'isConnected', min: 1024, max: 65535 },{ @@ -697,26 +701,69 @@ define('pgadmin.node.server', [ var check_for_empty = function(id, msg) { var v = self.get(id); if ( - _.isUndefined(v) || String(v).replace(/^\s+|\s+$/g, '') == '' + _.isUndefined(v) || v === null || String(v).replace(/^\s+|\s+$/g, '') == '' ) { err[id] = msg; errmsg = errmsg || msg; + return true; + } else { + self.errorModel.unset(id); + return false; + } + } + var check_for_valid_ipv6 = function(val){ + // Regular expression for validating IPv6 address formats + var exps = ['^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|', + '(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|', + '2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|', + '(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|', + ':((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|', + '(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|', + '2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|', + '(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|', + '[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|', + '((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|', + '(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|', + '1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|', + '((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$']; + + var exp = new RegExp(exps.join('')); + return exp.test(val.trim()); + } + var check_for_valid_ip = function(id, msg) { + var v4exps = "^\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\s*$"; + var v4exp = new RegExp(v4exps); + var v = self.get(id); + if ( + v && !(v4exp.test(v.trim())) + ) { + if(!check_for_valid_ipv6(v)){ + err[id] = msg; + errmsg = msg; + } } else { self.errorModel.unset(id); } } if (!self.isNew() && 'id' in self.sessAttrs) { - err['id'] = gettext('The ID cannot be changed.');; + err['id'] = gettext('The ID cannot be changed.'); errmsg = err['id']; } else { self.errorModel.unset('id'); } check_for_empty('name', gettext('Name must be specified.')); - check_for_empty( - 'host', gettext('Hostname or address must be specified.') - ); + if (check_for_empty( + 'host', gettext('Either Host name or Host address must be specified.') + ) && check_for_empty('hostaddr', gettext('Either Host name or Host address must be specified.'))){ + errmsg = errmsg || gettext('Either Host name or Host address must be specified'); + } else { + errmsg = undefined; + delete err['host']; + delete err['hostaddr']; + } + check_for_empty( 'db', gettext('Maintenance database must be specified.') ); @@ -724,6 +771,9 @@ define('pgadmin.node.server', [ 'username', gettext('Username must be specified.') ); check_for_empty('port', gettext('Port must be specified.')); + check_for_valid_ip( + 'hostaddr', gettext('Host address must be valid IPv4 or IPv6 address.') + ); this.errorModel.set(err); if (_.size(err)) { diff --git a/web/pgadmin/model/__init__.py b/web/pgadmin/model/__init__.py index f7db5674..3dcc0a21 100644 --- a/web/pgadmin/model/__init__.py +++ b/web/pgadmin/model/__init__.py @@ -20,7 +20,6 @@ things: from flask_security import UserMixin, RoleMixin from flask_sqlalchemy import SQLAlchemy - ########################################################################## # # The schema version is used to track when upgrades are needed to the @@ -108,6 +107,7 @@ class Server(db.Model): ) name = db.Column(db.String(128), nullable=False) host = db.Column(db.String(128), nullable=False) + hostaddr = db.Column(db.String(128), nullable=True) port = db.Column( db.Integer(), db.CheckConstraint('port >= 1024 AND port <= 65534'), @@ -128,6 +128,8 @@ class Server(db.Model): backref=db.backref('server', cascade="all, delete-orphan"), lazy='joined') + + class ModulePreference(db.Model): """Define a preferences table for any modules.""" __tablename__ = 'module_preference' diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index 876b887b..16342d46 100644 --- a/web/pgadmin/utils/driver/psycopg2/__init__.py +++ b/web/pgadmin/utils/driver/psycopg2/__init__.py @@ -316,6 +316,7 @@ class Connection(BaseConnection): pg_conn = psycopg2.connect( host=mgr.host, + hostaddr=mgr.hostaddr, port=mgr.port, database=database, user=user, @@ -1106,6 +1107,7 @@ Failed to execute query (execute_void) for the server #{server_id} - {conn_id} try: pg_conn = psycopg2.connect( host=mgr.host, + hostaddr=mgr.hostaddr, port=mgr.port, database=self.db, user=mgr.user, @@ -1373,6 +1375,7 @@ Failed to reset the connection to the server due to following error: try: pg_conn = psycopg2.connect( host=self.manager.host, + hostaddr=self.manager.hostaddr, port=self.manager.port, database=self.db, user=self.manager.user, @@ -1519,6 +1522,7 @@ class ServerManager(object): self.sid = server.id self.host = server.host + self.hostaddr = server.hostaddr self.port = server.port self.db = server.maintenance_db self.did = None