Hi,

I tested this change with Flask-Security 3.0.0 and 1.7.5 (we ship pgAdmin4
with 1.7.5) and with 2.7 and 3.0+.
This is working as expected.

Apart from this I also found some other issues with User management.
I have created RM2641 <https://redmine.postgresql.org/issues/2641> for
these issue and also attached patch from same.


Thanks


-- 
*Harshal Dhumal*
*Sr. Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

On Mon, Aug 7, 2017 at 7:08 PM, Ashesh Vashi <ashesh.va...@enterprisedb.com>
wrote:

> Harshal,
>
> Please take a look at it.
>
> --
>
> Thanks & Regards,
>
> Ashesh Vashi
> EnterpriseDB INDIA: Enterprise PostgreSQL Company
> <http://www.enterprisedb.com>
>
>
> *http://www.linkedin.com/in/asheshvashi*
> <http://www.linkedin.com/in/asheshvashi>
>
> On Mon, Aug 7, 2017 at 6:46 PM, Wouter van Kesteren <wouters...@gmail.com>
> wrote:
>
>> I installed it on my system and i got the following error:
>>
>> Traceback (most recent call last):
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1997, in __call__
>>     return self.wsgi_app(environ, start_response)
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1985, in wsgi_app
>>     response = self.handle_exception(e)
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1540, in handle_exception
>>     reraise(exc_type, exc_value, tb)
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/_compat.py",
>> line 33, in reraise
>>     raise value
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1982, in wsgi_app
>>     response = self.full_dispatch_request()
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1614, in full_dispatch_request
>>     rv = self.handle_user_exception(e)
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1517, in handle_user_exception
>>     reraise(exc_type, exc_value, tb)
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/_compat.py",
>> line 33, in reraise
>>     raise value
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1610, in full_dispatch_request
>>     rv = self.preprocess_request()
>>   File "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask/app.py",
>> line 1831, in preprocess_request
>>     rv = func()
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_principal.py",
>> line 477, in _on_before_request
>>     identity = loader()
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_security/core.py",
>> line 245, in _identity_loader
>>     if not isinstance(current_user._get_current_object(),
>> AnonymousUserMixin):
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/werkzeug/local.py",
>> line 306, in _get_current_object
>>     return self.__local()
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_login/utils.py",
>> line 26, in <lambda>
>>     current_user = LocalProxy(lambda: _get_user())
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_login/utils.py",
>> line 302, in _get_user
>>     current_app.login_manager._load_user()
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_login/login_manager.py",
>> line 316, in _load_user
>>     return self.reload_user()
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_login/login_manager.py",
>> line 278, in reload_user
>>     user = self.user_callback(user_id)
>>   File 
>> "/usr/x86_64-pc-linux-gnu/lib/python3.4/site-packages/flask_security/core.py",
>> line 221, in _user_loader
>>     return _security.datastore.find_user(id=user_id)
>> AttributeError: 'NoneType' object has no attribute 'find_user'
>>
>> My system has Flask-Security 3.0.0 which contains a patch to
>> Security.init_app
>>
>> -        if not self.datastore:
>> -            self.datastore = datastore
>> -        datastore = self.datastore
>> +        self.app = app
>> +        self.datastore = datastore
>>
>> https://github.com/mattupstate/flask-security/commit/3701b91
>> d4d3e41036872a3f35db51e44e0681109
>>
>> To get the old behavior we need to pass the datastore along again else
>> it gets overruled by the default None.
>> ---
>>  web/pgadmin/__init__.py | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py
>> index cd18b1f8..f4f7e385 100644
>> --- a/web/pgadmin/__init__.py
>> +++ b/web/pgadmin/__init__.py
>> @@ -308,7 +308,7 @@ def create_app(app_name=None):
>>      app.config.update(dict(SECRET_KEY=config.SECRET_KEY))
>>      app.config.update(dict(SECURITY_PASSWORD_SALT=config.SECURI
>> TY_PASSWORD_SALT))
>>
>> -    security.init_app(app)
>> +    security.init_app(app, user_datastore)
>>
>>      app.session_interface = create_session_interface(app)
>>
>> --
>> 2.13.3
>>
>>
>>
>
diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py
index cd18b1f..f4f7e38 100644
--- a/web/pgadmin/__init__.py
+++ b/web/pgadmin/__init__.py
@@ -308,7 +308,7 @@ def create_app(app_name=None):
     app.config.update(dict(SECRET_KEY=config.SECRET_KEY))
     app.config.update(dict(SECURITY_PASSWORD_SALT=config.SECURITY_PASSWORD_SALT))
 
-    security.init_app(app)
+    security.init_app(app, user_datastore)
 
     app.session_interface = create_session_interface(app)
 
diff --git a/web/pgadmin/tools/user_management/static/js/user_management.js b/web/pgadmin/tools/user_management/static/js/user_management.js
index fffe7e2..bc88371 100644
--- a/web/pgadmin/tools/user_management/static/js/user_management.js
+++ b/web/pgadmin/tools/user_management/static/js/user_management.js
@@ -96,7 +96,7 @@ define([
                 if(m instanceof Backbone.Collection) {
                   return true;
                 }
-                if (m.get("id") == userInfo['user_id']){
+                if (m.get("id") == userInfo['id']){
                     return false;
                 } else {
                     return true;
@@ -110,7 +110,7 @@ define([
                 if(m instanceof Backbone.Collection) {
                   return true;
                 }
-                if (m.get("id") == userInfo['user_id']){
+                if (m.get("id") == userInfo['id']){
                     return false;
                 } else {
                     return true;
@@ -283,7 +283,7 @@ define([
               self = this;
               e.preventDefault();
 
-              if (self.model.get("id") == userInfo['user_id']) {
+              if (self.model.get("id") == userInfo['id']) {
                 alertify.alert(
                   gettext('Cannot delete user.'),
                   gettext('Cannot delete currently logged in user.'),
@@ -394,6 +394,15 @@ define([
                   footerTpl = _.template([
                     '<div class="pg-prop-footer">',
                       '<div class="pg-prop-status-bar" style="visibility:hidden">',
+                        '<div class="media error-in-footer bg-red-1 border-red-2 font-red-3 text-14">',
+                          '<div class="media-body media-middle">',
+                            '<div class="alert-icon error-icon">',
+                              '<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>',
+                            '</div>',
+                            '<div class="alert-text">',
+                            '</div>',
+                          '</div>',
+                        '</div>',
                       '</div>',
                     '</div>'].join("\n")),
                   $footer = $(footerTpl()),
@@ -430,7 +439,8 @@ define([
                       self.on('pgadmin-session:model:invalid', function(msg, m, c) {
                         self.invalidUsers[m.cid] = msg;
                         m.trigger('pgadmin:user:invalid', m);
-                        $statusBar.html(msg).css("visibility", "visible");
+                        $statusBar.find('.alert-text').html(msg);
+                        $statusBar.css("visibility", "visible");
                       });
                       self.on('pgadmin-session:model:valid', function(m, c) {
                         delete self.invalidUsers[m.cid];
@@ -459,9 +469,11 @@ define([
                       }
 
                       if(msg){
-                        $statusBar.html(msg).css("visibility", "visible");
+                        $statusBar.find('.alert-text').html(msg);
+                        $statusBar.css("visibility", "visible");
                       } else {
-                        $statusBar.empty().css("visibility", "hidden");
+                        $statusBar.find('.alert-text').empty();
+                        $statusBar.css("visibility", "hidden");
                       }
                     },
                     saveUser: function(m) {

Reply via email to