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) {