Re: [PATCH] Work with newer Flask-Security.

From: Harshal Dhumal <harshal(dot)dhumal(at)enterprisedb(dot)com>
To: Ashesh Vashi <ashesh(dot)vashi(at)enterprisedb(dot)com>
Cc: pgadmin-hackers(at)lists(dot)postgresql(dot)org, Wouter van Kesteren <woutershep(at)gmail(dot)com>
Subject: Re: [PATCH] Work with newer Flask-Security.
Date: 2017-08-09 14:19:13
Message-ID: CAFiP3vzvThcXms=NC3rNNGoHpPvJJo58H0tSxdpfmX1s4bYAvg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

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(dot)vashi(at)enterprisedb(dot)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 <woutershep(at)gmail(dot)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
>>
>>
>>
>

Attachment Content-Type Size
Flask_security_3_0_0_compatibility.patch text/x-patch 483 bytes
RM2642.patch text/x-patch 3.4 KB

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Dave Cramer 2017-08-09 14:49:41 Re: Can someone tell me what this code does ?
Previous Message Surinder Kumar 2017-08-09 13:21:52 [pgAdmin4][Patch]: Add command under scripts to run webpack bundle in watch mode