Hi,

Please find the attached patch for RM #1801: Properly handle databases with
datallowconn == false.

Issue: While connecting the database, allowconn parameter was not in
consideration.  Also, the database properties query call was on the
selected database which was not correct.

Fix: Put the check of  allowconn, while connecting the database in JS file.
Also, the database properties query call set to the maintenance database.

Thanks,
Khushboo
diff --git a/web/pgadmin/browser/collection.py b/web/pgadmin/browser/collection.py
index e4a83a2..391ccf9 100644
--- a/web/pgadmin/browser/collection.py
+++ b/web/pgadmin/browser/collection.py
@@ -66,7 +66,7 @@ class CollectionNodeModule(PgAdminModule, PGChildModule):
             "id": "%s/%s" % (self.node_type, node_id),
             "label": label,
             "icon": self.node_icon if not icon else icon,
-            "inode": self.node_inode,
+            "inode": self.node_inode if 'inode' not in kwargs else kwargs['inode'],
             "_type": self.node_type,
             "_id": node_id,
             "_pid": parent_id,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
index ed08ef6..5c5374a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
@@ -214,7 +214,8 @@ class DatabaseView(PGChildNodeView):
                     allowConn=row['datallowconn'],
                     canCreate=row['cancreate'],
                     canDisconn=canDisConn,
-                    canDrop = canDrop
+                    canDrop=canDrop,
+                    inode=True if row['datallowconn'] else False
                 )
             )
 
@@ -276,11 +277,13 @@ class DatabaseView(PGChildNodeView):
 
     @check_precondition(action="properties")
     def properties(self, gid, sid, did):
+        conn = self.manager.connection()
+
         SQL = render_template(
             "/".join([self.template_path, 'properties.sql']),
-            did=did, conn=self.conn, last_system_oid=0
+            did=did, conn=conn, last_system_oid=0
         )
-        status, res = self.conn.execute_dict(SQL)
+        status, res = conn.execute_dict(SQL)
 
         if len(res['rows']) == 0:
             return gone(
@@ -292,9 +295,9 @@ class DatabaseView(PGChildNodeView):
 
         SQL = render_template(
             "/".join([self.template_path, 'acl.sql']),
-            did=did, conn=self.conn
+            did=did, conn=conn
         )
-        status, dataclres = self.conn.execute_dict(SQL)
+        status, dataclres = conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=res)
 
@@ -302,9 +305,9 @@ class DatabaseView(PGChildNodeView):
 
         SQL = render_template(
             "/".join([self.template_path, 'defacl.sql']),
-            did=did, conn=self.conn
+            did=did, conn=conn
         )
-        status, defaclres = self.conn.execute_dict(SQL)
+        status, defaclres = conn.execute_dict(SQL)
         if not status:
             return internal_server_error(errormsg=res)
 
@@ -314,10 +317,10 @@ class DatabaseView(PGChildNodeView):
         # Fetching variable for database
         SQL = render_template(
             "/".join([self.template_path, 'get_variables.sql']),
-            did=did, conn=self.conn
+            did=did, conn=conn
         )
 
-        status, res1 = self.conn.execute_dict(SQL)
+        status, res1 = conn.execute_dict(SQL)
 
         if not status:
             return internal_server_error(errormsg=res1)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js
index 47fc273..9c82be5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js
@@ -102,6 +102,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
           }
 
           if (i && d) {
+            if (!d.allowConn) return false;
             if (_.isUndefined(d.is_connecting) || !d.is_connecting) {
               d.is_connecting = true;
 
@@ -229,7 +230,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
           }
 
           pgBrowser.tree.addIcon(item, {icon: data.icon});
-          if (!data.connected) {
+          if (!data.connected && data.allowConn) {
             connect_to_database(this, data, pgBrowser.tree, item, true);
             return false;
           }
@@ -242,13 +243,23 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
           }
 
           pgBrowser.tree.addIcon(item, {icon: data.icon});
-          if (!data.connected) {
+          if (!data.connected && data.allowConn) {
             connect_to_database(this, data, pgBrowser.tree, item, false);
             return false;
           }
 
           return pgBrowser.Node.callbacks.selected.apply(this, arguments);
         },
+
+        refresh: function(cmd, i) {
+          var self = this,
+              t = pgBrowser.tree,
+              item = i || t.selected(),
+              d = t.itemData(item);
+
+          if (!d.allowConn) return;
+          pgBrowser.Node.callbacks.refresh.apply(this, arguments);
+        }
       },
       model: pgBrowser.Node.Model.extend({
         defaults: {
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to