From 6b95d6ac75449a1c2f9877a48bc4003ad1ac5dfc Mon Sep 17 00:00:00 2001 From: Harshal Dhumal Date: Tue, 14 Jun 2016 17:23:25 +0100 Subject: [PATCH] Added connect now option in server create dialog. Fixes #1313 --- .../browser/server_groups/servers/__init__.py | 44 +++++++++++++++++-- .../servers/templates/servers/servers.js | 14 +++++- web/pgadmin/static/css/overrides.css | 5 +++ 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 931287fb8..a658b2928 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -577,14 +577,50 @@ class ServerNode(PGChildNodeView): db.session.add(server) db.session.commit() + connected = False + icon = "icon-server-not-connected" + user = None + + if 'connect_now' in data and data['connect_now']: + if 'password' not in data or data["password"] == '': + db.session.delete(server) + db.session.commit() + raise Exception("No password provided.") + + password = data['password'] + password = encrypt(password, current_user.password) + + from pgadmin.utils.driver import get_driver + manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(server.id) + conn = manager.connection() + + status, errmsg = conn.connect( + password=password, + server_types=ServerType.types() + ) + + if not status: + db.session.delete(server) + db.session.commit() + return make_json_response( + status=401, + success=0, + errormsg=gettext("Unable to connect to server.") + ) + else: + user = manager.user_info + connected = True + icon = "icon-pg" + return jsonify( node=self.blueprint.generate_browser_node( - "%d" % (server.id), server.servergroup_id, + "%d" % server.id, server.servergroup_id, server.name, - "icon-server-not-connected", + icon, True, self.node_type, - connected=False, + user=user, + connected=connected, server_type='pg' # Default server type ) ) @@ -594,7 +630,7 @@ class ServerNode(PGChildNodeView): return make_json_response( status=410, success=0, - errormsg=e.message + errormsg=str(e) ) def sql(self, gid, sid): diff --git a/web/pgadmin/browser/server_groups/servers/templates/servers/servers.js b/web/pgadmin/browser/server_groups/servers/templates/servers/servers.js index d1c1cd324..1428e7c61 100644 --- a/web/pgadmin/browser/server_groups/servers/templates/servers/servers.js +++ b/web/pgadmin/browser/server_groups/servers/templates/servers/servers.js @@ -586,7 +586,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { port: 5432, db: 'postgres', username: '{{ username }}', - role: null + role: null, + connect_now: true, + password: undefined }, // Default values! initialize: function(attrs, args) { @@ -622,6 +624,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { },{ id: 'version', label:'{{ _('Version') }}', type: 'text', group: null, mode: ['properties'], visible: 'isConnected' + },{ + id: 'connect_now', controlLabel:'{{ _('Connect now?') }}', type: 'checkbox', + group: null, mode: ['create'] },{ id: 'comment', label:'{{ _('Comments') }}', type: 'multiline', group: null, mode: ['properties', 'edit', 'create'] @@ -637,6 +642,12 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { },{ id: 'username', label:'{{ _('User Name') }}', type: 'text', group: "{{ 'Connection' }}", mode: ['properties', 'edit', 'create'], disabled: 'isConnected' + },{ + id: 'password', label:'{{ _('Password') }}', type: 'password', + group: "{{ 'Connection' }}", control: 'input', mode: ['create'], deps: ['connect_now'], + visible: function(m) { + return m.get('connect_now') && m.isNew(); + } },{ id: 'role', label:'{{ _('Role') }}', type: 'text', group: "{{ 'Connection' }}", mode: ['properties', 'edit', 'create'], disabled: 'isConnected' @@ -676,6 +687,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { self.errorModel.unset('id'); } check_for_empty('name', '{{ _('Name must be specified.') }}'); + check_for_empty( 'host', '{{ _('Hostname or address must be specified.') }}' ); diff --git a/web/pgadmin/static/css/overrides.css b/web/pgadmin/static/css/overrides.css index 41ffde0ff..e46d6d0a1 100755 --- a/web/pgadmin/static/css/overrides.css +++ b/web/pgadmin/static/css/overrides.css @@ -1344,3 +1344,8 @@ height: calc(100% - 35px); .pg-panel-statistics-container > table > thead > tr > th:last-child { border-right: 0px; } + +.pgadmin-controls input[type="checkbox"]{ + margin-left: 0 !important; + margin-top: 10px !important; +} \ No newline at end of file