Example #1
0
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')
Example #4
0
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
Example #5
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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
Example #9
0
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

    '''
Example #13
0
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
Example #14
0
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.'))
Example #15
0
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
Example #17
0
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
Example #18
0
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")
Example #20
0
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
Example #21
0
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
Example #22
0
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
Example #23
0
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")
Example #25
0
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
Example #26
0
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
Example #27
0
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
Example #28
0
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
Example #30
0
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'
        )
Example #32
0
    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