You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2018/07/02 11:38:10 UTC
[GitHub] yamoe edited a comment on issue #4518: Add Admin Reset Password
Capability
yamoe edited a comment on issue #4518: Add Admin Reset Password Capability
URL: https://github.com/apache/incubator-superset/issues/4518#issuecomment-401773665
currently available in the menu below.
"Security > List Users > Show record > Reset Password"
OR
customizing if you want to edit on page "Edit record"
- views.py
from werkzeug.datastructures import ImmutableMultiDict
from werkzeug.security import generate_password_hash
from flask_appbuilder.security.views import UserDBModelView
from flask_appbuilder.fieldwidgets import BS3PasswordFieldWidget
from wtforms.validators import EqualTo
from wtforms import PasswordField
from flask_babel import lazy_gettext
class MyUserDBModelView(UserDBModelView):
__class__ = UserDBModelView
edit_form_extra_fields = {'password': PasswordField(lazy_gettext('Password'),
description=lazy_gettext(
'Please use a good password policy, this application does not check this for you'),
#validators=[validators.DataRequired()],
widget=BS3PasswordFieldWidget()),
'conf_password': PasswordField(lazy_gettext('Confirm Password'),
description=lazy_gettext(
'Please rewrite the user\'s password to confirm'),
validators=[EqualTo('password', message=lazy_gettext(
'Passwords must match'))],
widget=BS3PasswordFieldWidget())}
edit_columns = ['first_name', 'last_name', 'username', 'active', 'email', 'roles', 'password', 'conf_password']
stat = type('', (object,), { 'none': 0, 'use': 1, 'notuse': 2 })()
def __init__(self, **kwargs):
super(MyUserDBModelView, self).__init__(**kwargs)
self.edit_form.refresh = MyUserDBModelView.wrap_refresh(self, self.edit_form.refresh)
@staticmethod
def wrap_refresh(self, wfunc):
wfunc = wfunc.__func__
def _w(*args, **kwargs):
pw = None
s = self.stat.none
obj = args[1] if len(args) >= 2 else None
if isinstance(obj, ImmutableMultiDict):
pw = obj.get('password', None)
cpw = obj.get('conf_password', None)
if pw and cpw:
pw = pw.strip()
cpw = cpw.strip()
if pw and cpw and pw == cpw:
s = self.stat.use
pw = generate_password_hash(pw)
else:
s = self.stat.notuse
form = wfunc(*args, **kwargs)
if s == self.stat.use:
form._fields.get('password').process_data(pw)
form._fields.get('conf_password').process_data(pw)
elif s == self.stat.notuse:
form._fields.pop('password')
form._fields.pop('conf_password')
return form
return classmethod(_w)
- security.py
from superset.security import SupersetSecurityManager
from .views import MyUserDBModelView
class MySecurityManager(SupersetSecurityManager):
userdbmodelview = MyUserDBModelView
- config.py
CUSTOM_SECURITY_MANAGER = MySecurityManager
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org