class UpdateUserForm(BaseUserForm): # Hide the domain_id and domain_name by default domain_id = forms.CharField(label=_("Domain ID"), required=False, widget=forms.HiddenInput()) domain_name = forms.CharField(label=_("Domain Name"), required=False, widget=forms.HiddenInput()) id = forms.CharField(label=_("ID"), widget=forms.HiddenInput) name = forms.CharField(label=_("User Name")) email = forms.EmailField(label=_("Email"), required=False) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), required=False, error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), widget=forms.PasswordInput(render_value=False), required=False) project = forms.ChoiceField(label=_("Primary Project")) def __init__(self, request, *args, **kwargs): super(UpdateUserForm, self).__init__(request, *args, **kwargs) if api.keystone.keystone_can_edit_user() is False: for field in ('name', 'email', 'password', 'confirm_password'): self.fields.pop(field) # For keystone V3, display the two fields in read-only if api.keystone.VERSIONS.active >= 3: readonlyInput = forms.TextInput(attrs={'readonly': 'readonly'}) self.fields["domain_id"].widget = readonlyInput self.fields["domain_name"].widget = readonlyInput # We have to protect the entire "data" dict because it contains the # password and confirm_password strings. @sensitive_variables('data', 'password') def handle(self, request, data): user = data.pop('id') # Throw away the password confirmation, we're done with it. data.pop('confirm_password', None) data.pop('domain_id') data.pop('domain_name') try: if "email" in data: data['email'] = data['email'] or None response = api.keystone.user_update(request, user, **data) messages.success(request, _('User has been updated successfully.')) except Exception: response = exceptions.handle(request, ignore=True) messages.error(request, _('Unable to update the user.')) if isinstance(response, http.HttpResponse): return response else: return True
class SetAccessControlsAction(workflows.Action): keypair = forms.ThemableDynamicChoiceField( label=_("Key Pair"), help_text=_("Key pair to use for " "authentication."), add_item_link=KEYPAIR_IMPORT_URL) admin_pass = forms.RegexField( label=_("Admin Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_admin_pass = forms.CharField( label=_("Confirm Admin Password"), required=False, widget=forms.PasswordInput(render_value=False)) groups = forms.MultipleChoiceField( label=_("Security Groups"), required=False, initial=["default"], widget=forms.ThemableCheckboxSelectMultiple(), help_text=_("Launch instance in these " "security groups.")) class Meta(object): name = _("Access & Security") help_text = _("Control access to your instance via key pairs, " "security groups, and other mechanisms.") def __init__(self, request, *args, **kwargs): super(SetAccessControlsAction, self).__init__(request, *args, **kwargs) if not api.nova.can_set_server_password(): del self.fields['admin_pass'] del self.fields['confirm_admin_pass'] self.fields['keypair'].required = api.nova.requires_keypair() def populate_keypair_choices(self, request, context): keypairs = instance_utils.keypair_field_data(request, True) if len(keypairs) == 2: self.fields['keypair'].initial = keypairs[1][0] return keypairs def populate_groups_choices(self, request, context): try: groups = api.neutron.security_group_list(request) security_group_list = [(sg.id, sg.name) for sg in groups] except Exception: exceptions.handle(request, _('Unable to retrieve list of security groups')) security_group_list = [] return security_group_list def clean(self): '''Check to make sure password fields match.''' cleaned_data = super(SetAccessControlsAction, self).clean() if 'admin_pass' in cleaned_data: if cleaned_data['admin_pass'] != cleaned_data.get( 'confirm_admin_pass', None): raise forms.ValidationError(_('Passwords do not match.')) return cleaned_data
class CreateUserForm(BaseUserForm): name = forms.CharField(label=_("User Name")) email = forms.EmailField(label=_("Email")) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), required=False, widget=forms.PasswordInput(render_value=False)) tenant_id = forms.ChoiceField(label=_("Primary Project")) def handle(self, request, data): try: LOG.info('Creating user with name "%s"' % data['name']) new_user = api.user_create(request, data['name'], data['email'], data['password'], data['tenant_id'], True) messages.success( request, _('User "%s" was successfully created.') % data['name']) try: default_role = api.keystone.get_default_role(request) if default_role: api.add_tenant_user_role(request, data['tenant_id'], new_user.id, default_role.id) except: exceptions.handle(request, _('Unable to add user to primary project.')) return shortcuts.redirect('horizon:syspanel:users:index') except: exceptions.handle(request, _('Unable to create user.')) return shortcuts.redirect('horizon:syspanel:users:index')
class RegForm(forms.Form): """ Form used for logging in a user. Handles authentication with Keystone, choosing a tenant, and fetching a scoped token token for that tenant. Redirects to the URL returned by :meth:`horizon.get_user_home` if successful. Subclass of :class:`~forms.Form`. """ username = forms.CharField(label=_("User Name"), min_length=5, max_length=30, required=True) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) def __init__(self, *args, **kwargs): super(RegForm, self).__init__(*args, **kwargs) def clean(self): password = self.cleaned_data.get('password', '').strip() return self.cleaned_data
class SignupForm(SelfHandlingForm): username = forms.CharField( label=_("Username"), max_length=255, widget=forms.TextInput(attrs={ 'placeholder': _('Username'), 'autofocus': 'autofocus' })) email = forms.EmailField(widget=forms.TextInput( attrs={ 'type': 'email', 'placeholder': _('E-mail address') })) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), widget=forms.PasswordInput(render_value=False)) no_autocomplete = True def clean(self): '''Check to make sure password fields match.''' data = super(SignupForm, self).clean() # basic check for now if 'username' in data: if User.objects.filter(username=data['username'], email=data['email']).exists(): raise validators.ValidationError( _('Username or email exists in database.')) if 'password' in data: if data['password'] != data.get('confirm_password', None): raise validators.ValidationError(_('Passwords do not match.')) else: data.pop('confirm_password') return data def handle(self, request, data): try: user = User.objects.create_user(**data) messages.success( request, _("User account {} was successfuly created.".format(user))) except Exception as e: raise e else: data.pop('email') return LoginForm().handle(request, data) messages.error(request, _("Create Account failed.")) return False
class SetAccessControlsAction(workflows.Action): keypair = forms.DynamicChoiceField( label=_("Keypair"), required=False, help_text=_("Which keypair to use for " "authentication."), widget=fields.SelectWidget(data_attrs=('provider', 'region', 'instanceId'), transform=lambda x: ("%s (%s)(%s)" % (x.name, x.provider, x.region))), add_item_link=KEYPAIR_IMPORT_URL) admin_pass = forms.RegexField( label=_("Admin Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_admin_pass = forms.CharField( label=_("Confirm Admin Password"), required=False, widget=forms.PasswordInput(render_value=False)) groups = forms.MultipleChoiceField(label=_("Security Groups"), required=False, initial=["default"], widget=forms.CheckboxSelectMultiple(), help_text=_("Launch instance in these " "security groups.")) class Meta: name = _("Access & Security") help_text = _("Control access to your instance via keypairs, " "security groups, and other mechanisms.") def populate_keypair_choices(self, request, context): try: keypairs = capi.keypairs(request) keypair_list = [(kp.id, kp) for kp in keypairs] except Exception: keypair_list = [] exceptions.handle(request, _('Unable to retrieve keypairs.')) if keypair_list: keypair_list.insert(0, ("", _("Select a keypair"))) else: keypair_list = (("", _("No keypairs available.")), ) return keypair_list def populate_groups_choices(self, request, context): try: groups = capi.securitygroups(request) if groups: security_group_list = [(sg.id, sg.name) for sg in groups] else: security_group_list = [] except Exception: exceptions.handle(request, _('Unable to retrieve list of security groups')) security_group_list = [] return security_group_list
class PasswordForm(forms.SelfHandlingForm): current_password = forms.CharField( label=_("Current password"), strip=False, widget=forms.PasswordInput(render_value=False)) new_password = forms.RegexField( label=_("New password"), strip=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm new password"), strip=False, widget=forms.PasswordInput(render_value=False)) no_autocomplete = True def clean(self): '''Check to make sure password fields match.''' data = super(PasswordForm, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(_('Passwords do not match.')) if data.get('confirm_password', None) == \ data.get('current_password', None): raise ValidationError(_('Old password and new password ' 'must be different')) return data # We have to protect the entire "data" dict because it contains the # oldpassword and newpassword strings. @sensitive_variables('data') def handle(self, request, data): user_is_editable = api.keystone.keystone_can_edit_user() user_id = request.user.id user = api.keystone.user_get(self.request, user_id, admin=False) options = getattr(user, "options", {}) lock_password = options.get("lock_password", False) if lock_password: messages.error(request, _('Password is locked.')) return False if user_is_editable: try: api.keystone.user_update_own_password(request, data['current_password'], data['new_password']) response = http.HttpResponseRedirect(settings.LOGOUT_URL) msg = _("Password changed. Please log in again to continue.") utils.add_logout_reason(request, response, msg) return response except Exception: exceptions.handle(request, _('Unable to change password.')) return False else: messages.error(request, _('Changing password is not supported.')) return False
class RebuildInstanceForm(forms.SelfHandlingForm): instance_id = forms.CharField(widget=forms.HiddenInput()) image = forms.ChoiceField(label=_("Select Image"), widget=fields.SelectWidget( attrs={'class': 'image-selector'}, data_attrs=('size', 'display-name'), transform=_image_choice_title)) password = forms.RegexField( label=_("Rebuild Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Rebuild Password"), required=False, widget=forms.PasswordInput(render_value=False)) def __init__(self, request, *args, **kwargs): super(RebuildInstanceForm, self).__init__(request, *args, **kwargs) instance_id = kwargs.get('initial', {}).get('instance_id') self.fields['instance_id'].initial = instance_id images = utils.get_available_images(request, request.user.tenant_id) choices = [(image.id, image.name) for image in images] if choices: choices.insert(0, ("", _("Select Image"))) else: choices.insert(0, ("", _("No images available."))) self.fields['image'].choices = choices def clean(self): cleaned_data = super(RebuildInstanceForm, self).clean() if 'password' in cleaned_data: passwd = cleaned_data.get('password') confirm = cleaned_data.get('confirm_password') if passwd is not None and confirm is not None: if passwd != confirm: raise forms.ValidationError(_("Passwords do not match.")) return cleaned_data # We have to protect the entire "data" dict because it contains the # password and confirm_password strings. @sensitive_variables('data', 'password') def handle(self, request, data): instance = data.get('instance_id') image = data.get('image') password = data.get('password') or None try: api.nova.server_rebuild(request, instance, image, password) messages.success(request, _('Rebuilding instance %s.') % instance) except Exception: redirect = reverse('horizon:project:instances:index') exceptions.handle(request, _("Unable to rebuild instance."), redirect=redirect) return True
class PasswordForm(forms.SelfHandlingForm): current_password = forms.CharField( label=_("Current password"), widget=forms.PasswordInput(render_value=False)) new_password = forms.RegexField( label=_("New password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm new password"), widget=forms.PasswordInput(render_value=False)) no_autocomplete = True def clean(self): '''Check to make sure password fields match.''' data = super(PasswordForm, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(_('Passwords do not match.')) return data # We have to protect the entire "data" dict because it contains the # oldpassword and newpassword strings. @sensitive_variables('data') def handle(self, request, data): user_is_editable = api.keystone.keystone_can_edit_user() if user_is_editable: try: api.keystone.user_update_own_password(request, data['current_password'], data['new_password']) response = http.HttpResponseRedirect(settings.LOGOUT_URL) msg = _("Password changed. Please log in again to continue.") utils.add_logout_reason(request, response, msg) api.nova.systemlogs_create(request, request.user.username, record_action.CHANGEPASSWORD) return response except Exception: msg = _('Unable to change password.') exceptions.handle(request, msg) api.nova.systemlogs_create(request, request.user.username, record_action.CHANGEPASSWORD, result=False, detail=msg) return False else: messages.error(request, _('Changing password is not supported.')) api.nova.systemlogs_create(request, request.user.username, record_action.CHANGEPASSWORD, result=False, detail=msg) return False
class CreateCloudAction(workflows.Action): cloudtype = forms.ChoiceField(label=_("Platform"), required=True, widget=fields.SelectWidget( data_attrs=( 'name', 'type', ), transform=lambda x: ("%s " % (x.name)))) cloudlist = forms.ChoiceField(label=_("Cloud Type"), required=True, widget=fields.SelectWidget( data_attrs=( 'name', 'type', ), transform=lambda x: ("%s " % (x.type)))) cloudname = forms.CharField(label=_("Cloud Name"), max_length=80) cloud_id = forms.CharField(required=False, widget=forms.HiddenInput()) publickey = forms.CharField(label=_("Public Key"), max_length=None) secretkey = forms.RegexField( label=_("Secret Key"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) endpoint = forms.CharField(max_length=80, label=_("Endpoint(IP with HTTP)")) class Meta: name = _("ADD Cloud") def __init__(self, *args, **kwargs): super(CreateCloudAction, self).__init__(*args, **kwargs) try: region_list = get_regions_wo_connection() cloud_id = args[-1]["cloud_id"] cloud_obj = clouds.objects(id=cloud_id).first() self.fields['publickey'].label = _(cloud_obj.credential_fields[0]) self.fields["secretkey"].label = _(cloud_obj.credential_fields[1]) if cloud_obj.name == "Amazon": self.fields["endpoint"] = forms.ChoiceField( label=_("Default Region"), choices=region_list, help_text=_("Select default region")) self.fields["endpoint"].label = _( cloud_obj.credential_fields[2]) else: self.fields["endpoint"].label = _( cloud_obj.credential_fields[2]) except Exception, e: messages.error(self.request, _(e.message)) LOG.error(e.message)
class CreateUserAction(workflows.Action): username = forms.CharField(max_length=80, label=_("User Name"), validators=[RegexValidator(r'^[\w]*$', message='Username must be alphanumeric without spaces', code='Invalid Username')] ) roles = forms.MultipleChoiceField(label=_("Roles"), required=False, initial=["default"], widget=forms.CheckboxSelectMultiple(), help_text=_("Create user with these " "roles.")) password = forms.RegexField( label=_("Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), required=False, widget=forms.PasswordInput(render_value=False)) email = forms.EmailField(label=_("Email ID"), required=True) def populate_roles_choices(self, request, context): roles = [] success = [] try: if request.user.roles: for role in request.user.roles: if (role.name == "Tenant Admin") & (role.roletype == "Tenant Admin"): success.append("Tenant Admin") else: success.append("Member") if "Tenant Admin" in success: rolelist = roledetail.objects(tenantid=request.user.tenantid.id) roles = [(role.id, role.name) for role in rolelist] else: rolelist = roledetail.objects(tenantid=request.user.tenantid.id) for role in rolelist: if (role.name == "Tenant Admin") & (role.roletype == "Tenant Admin"): pass else: roles.append((role.id, role.name)) else: roles = [] except Exception, e: messages.error(request,_(e.message)) LOG.error(e.message) roles = [] return roles
class ResetPasswordAction(workflows.Action): instance_id = forms.CharField(label=_("Instance ID"), widget=forms.HiddenInput(), required=False) is_allow_inject_passwd = forms.CharField(widget=forms.HiddenInput(), required=False) image_name = forms.CharField(widget=forms.HiddenInput(), required=False) validate_code = forms.CharField(max_length=64, label=_("Please Input Validate Code"), required=False) username = forms.CharField(max_length=64, label=_("User Name"), required=False) is_sync_set_root = forms.BooleanField(label=_("Sync set root/Administrator password"), initial=True, required=False) password = forms.RegexField( label=_("Password"), required=False, widget=forms.PasswordInput(render_value=False, attrs={'placeholder': _('begin letter,8-64 bits,with number,letter and symbol')}), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), required=False, widget=forms.PasswordInput(render_value=False)) is_reboot = forms.BooleanField(label=_("Reboot after reset password successfully"), initial=True, required=False) def __init__(self, request, context, *args, **kwargs): super(ResetPasswordAction, self).__init__(request, context, *args, **kwargs) self.fields["username"].initial = 'syscloud' is_allow_inject_passwd = context.get('is_allow_inject_passwd') if not is_allow_inject_passwd: del self.fields['username'] del self.fields['is_sync_set_root'] del self.fields['password'] del self.fields['confirm_password'] del self.fields['is_reboot'] class Meta(object): name = _("Reset Password") slug = 'reset_password' help_text_template = ("instances/instances/" "_reset_password.html") def clean(self): cleaned_data = super(ResetPasswordAction, self).clean() return cleaned_data '''
class ExpiredPasswordForm(horizon_forms.SelfHandlingForm): action = reverse_lazy('fiware_auth_expired_password') template = 'auth/password/_expired.html' description = 'Change your password' current_password = forms.CharField( label=('Current password'), widget=forms.PasswordInput(render_value=False)) new_password = forms.RegexField( label=('New password'), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=('Confirm new password'), widget=forms.PasswordInput(render_value=False)) no_autocomplete = True def clean(self): '''Check to make sure password fields match.''' data = super(horizon_forms.Form, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(('Passwords do not match.')) self.user_is_editable = api.keystone.keystone_can_edit_user() if self.user_is_editable: try: fiware_api.keystone.user_update_own_password( self.request, data['current_password'], data['new_password']) except Exception: raise ValidationError(( 'Unable to change password. Make sure your current password is correct.' )) return data # We have to protect the entire 'data' dict because it contains the # oldpassword and newpassword strings. @sensitive_variables('data') def handle(self, request, data): if not self.user_is_editable: messages.error(self.request, ('Changing password is not supported.')) return False response = http.HttpResponseRedirect(settings.LOGOUT_URL) msg = ('Password changed correctly!. Please log in again to continue.') LOG.info(msg) utils.add_logout_reason(request, response, msg) response.set_cookie('logout_reason_level', 'success', max_age=10) return response
class CreateUserForm(BaseUserForm): name = forms.CharField(label=_("User Name")) email = forms.EmailField(label=_("Email")) secretkey = forms.CharField(label=_("Secret Key"), required=False) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), required=False, widget=forms.PasswordInput(render_value=False)) tenant_id = forms.DynamicChoiceField(label=_("Primary Project"), add_item_link=ADD_PROJECT_URL) role_id = forms.ChoiceField(label=_("Role")) def __init__(self, *args, **kwargs): roles = kwargs.pop('roles') super(CreateUserForm, self).__init__(*args, **kwargs) role_choices = [(role.id, role.name) for role in roles] self.fields['role_id'].choices = role_choices # We have to protect the entire "data" dict because it contains the # password and confirm_password strings. @sensitive_variables('data') def handle(self, request, data): try: LOG.info('Creating user with name "%s"' % data['name']) new_user = api.keystone.user_create_with_otp(request, data['name'], data['email'], data['secretkey'], data['password'], data['tenant_id'], True) messages.success(request, _('User "%s" was successfully created.') % data['name']) if data['role_id']: try: api.keystone.add_tenant_user_role(request, data['tenant_id'], new_user.id, data['role_id']) except: exceptions.handle(request, _('Unable to add user' 'to primary project.')) return new_user except: exceptions.handle(request, _('Unable to create user.'))
class CreateUserForm(BaseUserForm): failure_url = 'horizon:vsm:usermgmt:index' name = forms.CharField(label=_("User name"), max_length=255, min_length=1, error_messages={ 'required': _('This field is required.'), 'invalid': _("Please enter a vaild User Name") }, validators=[ validate_user_name, ]) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=password_validate_regrex, required=False, max_length=255, min_length=8, error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.RegexField( label=_("Confirm Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), required=False, error_messages={'invalid': validators.password_validator_msg()}) # email = forms.CharField(label=_("Email"), # max_length=255, # min_length=1, # required=False, # error_messages={ # 'required': _('This field is required.'), # 'invalid': _('Please enter an email address.'), # },) def handle(self, request, data): pass
class PasswordForm(forms.SelfHandlingForm): current_password = forms.CharField( label=_("Current password"), widget=forms.PasswordInput(render_value=False)) new_password = forms.RegexField( label=_("New password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm new password"), widget=forms.PasswordInput(render_value=False)) def clean(self): '''Check to make sure password fields match.''' data = super(forms.Form, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(_('Passwords do not match.')) return data # We have to protect the entire "data" dict because it contains the # oldpassword and newpassword strings. @sensitive_variables('data') def handle(self, request, data): user_is_editable = api.keystone.keystone_can_edit_user() if user_is_editable: try: api.keystone.user_update_own_password(request, data['current_password'], data['new_password']) # response = http.HttpResponseRedirect(settings.LOGOUT_URL) response = http.HttpResponseRedirect('/horizon/auth/login') userid = request.user.id print "this is setting userid : '%s'" % userid print "this is setting data['new_password'] : '******'" % data[ 'new_password'] update_user_password(userid, data['new_password']) msg = _("Password changed. Please log in again to continue.") utils.add_logout_reason(request, response, msg) return response except Exception: exceptions.handle(request, _('Unable to change password.')) return False else: messages.error(request, _('Changing password is not supported.')) return False return True
class EditUserForm(forms.SelfHandlingForm): instance_id = forms.CharField(widget=forms.HiddenInput()) user_name = forms.CharField( label=_("Name"), widget=forms.TextInput(attrs={'readonly': 'readonly'})) user_host = forms.CharField( label=_("Host"), required=False, widget=forms.TextInput(attrs={'readonly': 'readonly'})) new_name = forms.CharField(label=_("New Name"), required=False) new_password = forms.RegexField( label=_("New Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) new_host = forms.CharField(label=_("New Host"), required=False) validation_error_message = _('A new name or new password or ' 'new host must be specified.') def handle(self, request, data): instance = data.get('instance_id') try: api.trove.user_update_attributes(request, instance, data['user_name'], host=data['user_host'], new_name=data['new_name'], new_password=data['new_password'], new_host=data['new_host']) messages.success(request, _('Updated user "%s".') % data['user_name']) except Exception as e: redirect = reverse("horizon:project:databases:detail", args=(instance, )) exceptions.handle(request, _('Unable to update user. %s') % six.text_type(e), redirect=redirect) return True def clean(self): cleaned_data = super(EditUserForm, self).clean() if (not (cleaned_data['new_name'] or cleaned_data['new_password'] or cleaned_data['new_host'])): raise ValidationError(self.validation_error_message) return cleaned_data
class PasswordForm(forms.SelfHandlingForm): action = reverse_lazy('horizon:settings:multisettings:password') description = 'Change your password' template = 'settings/multisettings/_collapse_form.html' current_password = forms.CharField( label=('Current password'), widget=forms.PasswordInput(render_value=False)) new_password = forms.RegexField( label=('New password'), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=('Confirm new password'), widget=forms.PasswordInput(render_value=False)) no_autocomplete = True def clean(self): '''Check to make sure password fields match.''' data = super(forms.Form, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(('Passwords do not match.')) return data # We have to protect the entire 'data' dict because it contains the # oldpassword and newpassword strings. @sensitive_variables('data') def handle(self, request, data): user_is_editable = api.keystone.keystone_can_edit_user() if user_is_editable: try: api.keystone.user_update_own_password(request, data['current_password'], data['new_password']) response = http.HttpResponseRedirect(settings.LOGOUT_URL) msg = ('Password changed. Please log in again to continue.') LOG.info(msg) utils.add_logout_reason(request, response, msg) return response except Exception: exceptions.handle(request, ('Unable to change password.')) return False else: messages.error(request, ('Changing password is not supported.')) return False
class PasswordResetAction(workflows.Action): id= forms.CharField(widget=forms.HiddenInput(), required=False) username = forms.CharField(required=False, label=_("User Name"), widget=forms.TextInput( attrs={'readonly': 'readonly'})) new_password = forms.RegexField( label=_("New Password"), required=True, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) class Meta: name = _("Reset Password")
class PasswordMixin(forms.SelfHandlingForm): password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), widget=forms.PasswordInput(render_value=False)) no_autocomplete = True def clean(self): '''Check to make sure password fields match.''' data = super(forms.Form, self).clean() if 'password' in data and 'confirm_password' in data: if data['password'] != data['confirm_password']: raise ValidationError(_('Passwords do not match.')) return data
class CreateUserForm(forms.SelfHandlingForm): instance_id = forms.CharField(widget=forms.HiddenInput()) name = forms.CharField(label=_("Name")) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) host = forms.CharField(label=_("Host"), required=False, help_text=_("Optional host of user.")) databases = forms.CharField( label=_('Initial Databases'), required=False, help_text=_('Optional comma separated list of databases user has ' 'access to.')) def handle(self, request, data): instance = data.get('instance_id') try: api.trove.user_create(request, instance, data['name'], data['password'], host=data['host'], databases=self._get_databases(data)) messages.success(request, _('Created user "%s".') % data['name']) except Exception as e: redirect = reverse("horizon:project:databases:detail", args=(instance, )) exceptions.handle(request, _('Unable to create user. %s') % six.text_type(e), redirect=redirect) return True def _get_databases(self, data): databases = [] db_value = data['databases'] if db_value and db_value != u'': dbs = data['databases'] databases = [{'name': d.strip()} for d in dbs.split(',')] return databases
class PasswordForm(forms.SelfHandlingForm): new_password = forms.RegexField( label=_("New password"), max_length=PWD_LEN, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm new password"), max_length=PWD_LEN, widget=forms.PasswordInput(render_value=False)) def clean(self): data = super(forms.Form, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(_('Passwords do not match.')) return data @sensitive_variables('data') def handle(self, request, data): user_is_editable = api.keystone.keystone_can_edit_user() if not user_is_editable: messages.error(request, _('Activating password is not supported.')) return False try: #api.keystone.user_update_own_password(request, None, data['new_password']) api.keystone.user_update_password(request, request.user.id, data['new_password'], False) if get_manager(request): return http.HttpResponseRedirect(reverse_lazy('login')) else: response = http.HttpResponseRedirect(reverse_lazy('logout')) msg = _("Password changed. Please log in again to continue.") utils.add_logout_reason(request, response, msg) return response except Exception: exceptions.handle(request, _('Unable to activate password.')) return False
class CreateUserForm(BaseUserForm): username = forms.CharField(label=_("User Name")) email = forms.EmailField(label=_("Email")) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), required=False, widget=forms.PasswordInput(render_value=False)) company = forms.CharField(label=_("Company Name"), required=False) real_name = forms.CharField(label=_("Real Name"), required=False) ID_Card = forms.CharField(label=_("ID Card"), required=False) mobile = forms.CharField(label=_("Mobile"), required=False) qq = forms.CharField(label=_("QQ"), required=False) def __init__(self, *args, **kwargs): super(CreateUserForm, self).__init__(*args, **kwargs) @sensitive_variables('data') def handle(self, request, data): try: LOG.info('Creating user with username "%s"' % data['username']) new_user = bill_users( username=data['username'], email=data['email'], password=data['password'], company=data['company'], real_name=data['real_name'], ID_Card=data['ID_Card'], mobile=data['mobile'], qq=data['qq'], ) messages.success( request, _('User "%s" was successfully created.') % data['username']) new_user.save() return new_user except: exceptions.handle(request, _('Unable to create user.'))
class PasswordEditAction(workflows.Action): id= forms.CharField(widget=forms.HiddenInput(), required=False) oldpassword= forms.CharField(widget=forms.HiddenInput(), required=False) email = forms.EmailField(required=True,max_length=100, label=_("Email")) new_password = forms.RegexField( label=_("New Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) old_password = forms.CharField( label=_("Old Password"), required=False, widget=forms.PasswordInput(render_value=False)) class Meta: name = _("Change Password")
class PasswordForm(forms.SelfHandlingForm): current_password = forms.CharField( label=_("Current password"), widget=forms.PasswordInput(render_value=False)) new_password = forms.RegexField( label=_("New password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm new password"), widget=forms.PasswordInput(render_value=False)) def clean(self): '''Check to make sure password fields match.''' data = super(forms.Form, self).clean() if 'new_password' in data: if data['new_password'] != data.get('confirm_password', None): raise ValidationError(_('Passwords do not match.')) return data # We have to protect the entire "data" dict because it contains the # oldpassword and newpassword strings. @sensitive_variables('data') def handle(self, request, data): user_is_editable = api.keystone.keystone_can_edit_user() if user_is_editable: try: api.keystone.user_update_own_password(request, data['current_password'], data['new_password']) messages.success(request, _('Password changed.')) except: exceptions.handle(request, _('Unable to change password.')) return False else: messages.error(request, _('Changing password is not supported.')) return False return True
class RegForm(forms.Form): """ Form used for logging in a user. Handles authentication with Keystone, choosing a tenant, and fetching a scoped token token for that tenant. Redirects to the URL returned by :meth:`horizon.get_user_home` if successful. Subclass of :class:`~forms.Form`. """ username = forms.CharField(label=_("User Name"), min_length=5, max_length=30, required=True) email = forms.EmailField(label=_("E-mail")) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) #error_messages={'required': _('Confirm Password must be same with password.')} confirm_password = forms.CharField( label=_("Confirm Password"), required=False, widget=forms.PasswordInput(render_value=False)) def __init__(self, *args, **kwargs): super(RegForm, self).__init__(*args, **kwargs) def clean(self): password = self.cleaned_data.get('password', '').strip() confirm_password = self.cleaned_data.get('confirm_password', '').strip() if len(password) < 6 or len( password) > 18 or password != confirm_password: self._errors["password"] = ErrorList( [_('Password must be between 8 and 18 characters.')]) self._errors["confirm_password"] = ErrorList( [_('Confirm Password must be same with password.')]) del self.cleaned_data["confirm_password"] return self.cleaned_data
class InstallServersForm(BaseServerForm): failure_url = 'horizon:vsm:storageservermgmt:index' serverIp = forms.CharField(label=_("Server IP"), max_length=255, min_length=1, error_messages={ 'required': _('This field is required.'), 'invalid': _("Please enter a vaild Server IP") }, validators=[ validate_user_name, ]) sshUserName = forms.CharField( label=_("SSH UserName"), max_length=255, min_length=8, error_messages={'invalid': validators.password_validator_msg()}) def handle(self, request, data): pass
class UpdateUserForm(BaseUserForm): id = forms.CharField(label=_("ID"), widget=forms.HiddenInput) name = forms.CharField(label=_("User Name")) email = forms.EmailField(label=_("Email")) password = forms.RegexField( label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), required=False, error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label=_("Confirm Password"), widget=forms.PasswordInput(render_value=False), required=False) project = forms.ChoiceField(label=_("Primary Project")) def __init__(self, request, *args, **kwargs): super(UpdateUserForm, self).__init__(request, *args, **kwargs) if api.keystone.keystone_can_edit_user() is False: for field in ('name', 'email', 'password', 'confirm_password'): self.fields.pop(field) # We have to protect the entire "data" dict because it contains the # password and confirm_password strings. @sensitive_variables('data', 'password') def handle(self, request, data): user = data.pop('id') # Throw away the password confirmation, we're done with it. data.pop('confirm_password', None) try: api.keystone.user_update(request, user, **data) messages.success(request, _('User has been updated successfully.')) except: exceptions.handle(request, ignore=True) messages.error(request, _('Unable to update the user.')) return True
class SetAccessControlsAction(workflows.Action): keypair = forms.DynamicChoiceField(label=_("Key Pair"), required=False, help_text=_("Key pair to use for " "authentication."), add_item_link=KEYPAIR_IMPORT_URL) admin_pass = forms.RegexField( label=_("Admin Password"), required=False, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()}) confirm_admin_pass = forms.CharField( label=_("Confirm Admin Password"), required=False, widget=forms.PasswordInput(render_value=False)) class Meta(object): name = _("Access & Security") help_text = _("Control access to your instance via key pairs " "and other mechanisms.") def __init__(self, request, *args, **kwargs): super(SetAccessControlsAction, self).__init__(request, *args, **kwargs) self.fields['keypair'].choices = instance_utils.keypair_field_data( request, True) if not api.nova.can_set_server_password(): del self.fields['admin_pass'] del self.fields['confirm_admin_pass'] def clean(self): '''Check to make sure password fields match.''' cleaned_data = super(SetAccessControlsAction, self).clean() if 'admin_pass' in cleaned_data: if cleaned_data['admin_pass'] != cleaned_data.get( 'confirm_admin_pass', None): raise forms.ValidationError(_('Passwords do not match.')) return cleaned_data
class UpdateUserForm(BaseUserForm): id = forms.CharField(label="ID", widget=forms.HiddenInput) password = forms.RegexField( label="Password", widget=forms.PasswordInput(render_value=False), regex=password_validate_regrex, required=False, error_messages={'invalid': validators.password_validator_msg()}) confirm_password = forms.CharField( label="Confirm Password", widget=forms.PasswordInput(render_value=False), required=False) def __init__(self, request, *args, **kwargs): super(UpdateUserForm, self).__init__(request, *args, **kwargs) if api.keystone.keystone_can_edit_user() is False: for field in ('name', 'password', 'confirm_password'): self.fields.pop(field) def handle(self, request, data): pass
def __init__(self, request, *args, **kwargs): super(RegistrForm, self).__init__(request, *args, **kwargs) self.registr_err = None initial = kwargs['initial'] if 'initial' in kwargs else dict() ################################################################################# # Account section ################################################################################# username_attrs = {'readonly': 'readonly'} if 'username' in initial else {} self.fields['username'] = forms.CharField( label=_('User name'), max_length=OS_LNAME_LEN, widget=forms.TextInput(attrs=username_attrs) ) self.fields['federated'] = forms.CharField( max_length=OS_LNAME_LEN, widget=forms.HiddenInput ) gname_attrs = {'readonly': 'readonly'} if 'givenname' in initial else {} self.fields['givenname'] = forms.CharField( label=_('First name'), max_length=OS_LNAME_LEN, widget=forms.TextInput(attrs=gname_attrs) ) sname_attrs = {'readonly': 'readonly'} if 'sn' in initial else {} self.fields['sn'] = forms.CharField( label=_('Last name'), max_length=OS_LNAME_LEN, widget=forms.TextInput(attrs=sname_attrs) ) if initial['needpwd']: self.fields['pwd'] = forms.RegexField( label=_("Password"), max_length=PWD_LEN, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()} ) self.fields['repwd'] = forms.CharField( label=_("Confirm Password"), max_length=PWD_LEN, widget=forms.PasswordInput(render_value=False) ) mail_attrs = {'readonly': 'readonly'} if 'email' in initial else {} self.fields['email'] = forms.EmailField( label=_('Email Address'), max_length=EMAIL_LEN, widget=forms.TextInput(attrs=mail_attrs) ) ################################################################################# # Projects section ################################################################################# org_table = settings.HORIZON_CONFIG.get('organization', {}) dept_list = org_table.get(initial.get('organization', ''), None) if 'selprj' in initial: self.fields['prjaction'] = forms.CharField( label=_('Project action'), widget=forms.HiddenInput ) self.fields['selprj'] = forms.CharField( label=_('Available projects'), widget=forms.HiddenInput ) else: p_choices = [ ('selprj', _('Select existing projects')), ('newprj', _('Create new project')) ] prjguest_name = settings.HORIZON_CONFIG.get('guest_project', "") avail_prjs = list() for prj_entry in Project.objects.exclude(status=PRJ_PRIVATE): if prj_entry.projectname == prjguest_name: p_choices.append(('guestprj', _('Use guest project'))) elif prj_entry.projectid: avail_prjs.append((prj_entry.projectname, prj_entry.projectname)) self.fields['prjaction'] = forms.ChoiceField( label=_('Project action'), choices = p_choices, widget=forms.Select(attrs={ 'class': 'switchable', 'data-slug': 'actsource' }) ) self.fields['newprj'] = forms.CharField( label=_('Project name'), max_length=OS_SNAME_LEN, required=True, widget=forms.TextInput(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Project name') }) ) self.fields['prjdescr'] = forms.CharField( label=_("Project description"), required=True, widget=forms.widgets.Textarea(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Project description') }) ) self.fields['prjpriv'] = forms.BooleanField( label=_("Private project"), required=False, initial=False, widget=forms.widgets.CheckboxInput(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Private project') }) ) if dept_list: self.fields['contactper'] = forms.CharField( widget=forms.HiddenInput, initial='unknown' ) else: self.fields['contactper'] = forms.CharField( label=_('Contact person'), required=False, widget=forms.TextInput(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Contact person') }) ) self.fields['selprj'] = forms.MultipleChoiceField( label=_('Available projects'), required=False, choices=avail_prjs, widget=forms.SelectMultiple(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-selprj': _('Select existing project') }), ) ################################################################################# # Other Fields ################################################################################# if 'organization' in initial: self.fields['organization'] = forms.CharField(required=True, widget=forms.HiddenInput) if dept_list: self.fields['org_unit'] = forms.ChoiceField( label=_('Organization Unit'), required=True, choices=[ x[:2] for x in dept_list ] ) else: # # Workaround: hex string is required by the selector index # all_orgs = [ (x.encode('hex'), x) for x in org_table.keys() ] all_orgs.append(('other', _('Other organization'))) self.fields['encoded_org'] = forms.ChoiceField( label=_('Organization'), required=True, choices=all_orgs, widget=forms.Select(attrs={ 'class': 'switchable', 'data-slug': 'orgwidget' }) ) self.fields['custom_org'] = forms.CharField( label=_('Enter organization'), required=False, widget=forms.widgets.TextInput(attrs={ 'class': 'switched', 'data-switch-on': 'orgwidget', 'data-orgwidget-other': _('Enter organization') }) ) for org_id, ou_list in org_table.items(): enc_org_id = org_id.encode('hex') if not ou_list: continue self.fields['org_unit_%s' % enc_org_id] = forms.ChoiceField( label=_('Organization Unit'), required=True, choices=[ x[:2] for x in ou_list ], widget=forms.Select(attrs={ 'class': 'switched', 'data-switch-on': 'orgwidget', 'data-orgwidget-%s' % enc_org_id: _('Organization Unit') }) ) # In case use regex: '^\s*\+*[0-9]+[0-9\s.]+\s*$' if 'phone_regex' in settings.HORIZON_CONFIG: self.fields['phone'] = forms.RegexField( label=_('Phone number'), required=True, regex=settings.HORIZON_CONFIG['phone_regex'], error_messages={'invalid': _("Wrong phone format")} ) else: self.fields['phone'] = forms.CharField( widget=forms.HiddenInput, initial='00000000' ) self.fields['notes'] = forms.CharField( label=_('Notes'), required=False, widget=forms.widgets.Textarea() ) self.fields['aupok'] = forms.CharField( widget=forms.HiddenInput, initial='reject' )
def __init__(self, request, *args, **kwargs): super(RegistrForm, self).__init__(request, *args, **kwargs) self.registr_err = None initial = kwargs['initial'] if 'initial' in kwargs else dict() self.fields['username'] = forms.CharField( label=_('User name'), max_length=OS_LNAME_LEN, widget=forms.HiddenInput if 'username' in initial else forms.TextInput ) self.fields['federated'] = forms.CharField( max_length=OS_LNAME_LEN, widget=forms.HiddenInput ) self.fields['givenname'] = forms.CharField( label=_('First name'), max_length=OS_LNAME_LEN, widget=forms.HiddenInput if 'givenname' in initial else forms.TextInput ) self.fields['sn'] = forms.CharField( label=_('Last name'), max_length=OS_LNAME_LEN, widget=forms.HiddenInput if 'sn' in initial else forms.TextInput ) if initial['needpwd']: self.fields['pwd'] = forms.RegexField( label=_("Password"), max_length=PWD_LEN, widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), error_messages={'invalid': validators.password_validator_msg()} ) self.fields['repwd'] = forms.CharField( label=_("Confirm Password"), max_length=PWD_LEN, widget=forms.PasswordInput(render_value=False) ) self.fields['email'] = forms.EmailField( label=_('Email Address'), max_length=EMAIL_LEN, widget=forms.HiddenInput if 'email' in initial else forms.TextInput ) self.fields['prjaction'] = forms.ChoiceField( label=_('Project action'), #choices = <see later> widget=forms.Select(attrs={ 'class': 'switchable', 'data-slug': 'actsource' }) ) self.fields['newprj'] = forms.CharField( label=_('Personal project'), max_length=OS_SNAME_LEN, required=False, widget=forms.TextInput(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Project name') }) ) self.fields['prjdescr'] = forms.CharField( label=_("Project description"), required=False, widget=forms.widgets.Textarea(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Project description') }) ) self.fields['prjpriv'] = forms.BooleanField( label=_("Private project"), required=False, initial=False, widget=forms.widgets.CheckboxInput(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-newprj': _('Private project') }) ) self.fields['selprj'] = forms.MultipleChoiceField( label=_('Available projects'), required=False, widget=forms.SelectMultiple(attrs={ 'class': 'switched', 'data-switch-on': 'actsource', 'data-actsource-selprj': _('Select existing project') }), ) self.fields['organization'] = forms.CharField( label=_('Organization'), required=True, widget=forms.HiddenInput if 'organization' in initial else forms.TextInput ) phone_regex = settings.HORIZON_CONFIG.get('phone_regex', '^\s*\+*[0-9]+[0-9\s.]+\s*$') self.fields['phone'] = forms.RegexField( label=_('Phone number'), required=True, regex=phone_regex, error_messages={'invalid': _("Wrong phone format")} ) self.fields['contactper'] = forms.CharField( label=_('Contact person'), required=False ) self.fields['notes'] = forms.CharField( label=_('Notes'), required=False, widget=forms.widgets.Textarea() ) self.fields['aupok'] = forms.CharField( widget=forms.HiddenInput, initial='reject' ) import_guest_project() missing_guest = True avail_prjs = list() for prj_entry in Project.objects.exclude(status=PRJ_PRIVATE): if prj_entry.status == PRJ_GUEST: missing_guest = False elif prj_entry.projectid: avail_prjs.append((prj_entry.projectname, prj_entry.projectname)) self.fields['selprj'].choices = avail_prjs if missing_guest: p_choices = [ ('selprj', _('Select existing projects')), ('newprj', _('Create new project')) ] else: p_choices = [ ('selprj', _('Select existing projects')), ('newprj', _('Create new project')), ('guestprj', _('Use guest project')) ] self.fields['prjaction'].choices = p_choices