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