# ~*~ coding: utf-8 ~*~ from django import forms from django.contrib.auth.forms import AuthenticationForm from django.utils.translation import gettext_lazy as _ from captcha.fields import CaptchaField from .models import User, UserGroup from .hands import AssetPermission class UserLoginForm(AuthenticationForm): username = forms.CharField(label=_('Username'), max_length=100) password = forms.CharField( label=_('Password'), widget=forms.PasswordInput, max_length=100, strip=False) captcha = CaptchaField() class UserCreateForm(forms.ModelForm): class Meta: model = User fields = [ 'username', 'name', 'email', 'groups', 'wechat', 'phone', 'enable_otp', 'role', 'date_expired', 'comment', ] help_texts = { 'username': '* required', 'email': '* required', } widgets = { 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join user groups')}), } class UserUpdateForm(forms.ModelForm): class Meta: model = User fields = [ 'name', 'email', 'groups', 'wechat', 'phone', 'enable_otp', 'role', 'date_expired', 'comment', ] help_texts = { 'username': '* required', 'email': '* required', 'groups': '* required' } widgets = { 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join user groups')}), } class UserGroupForm(forms.ModelForm): class Meta: model = UserGroup fields = [ 'name', 'comment', ] help_texts = { 'name': '* required' } class UserInfoForm(forms.Form): name = forms.CharField(max_length=20, label=_('name')) avatar = forms.ImageField(label=_('avatar'), required=False) wechat = forms.CharField(max_length=30, label=_('wechat'), required=False) phone = forms.CharField(max_length=20, label=_('phone'), required=False) enable_otp = forms.BooleanField(required=False, label=_('enable otp')) class UserKeyForm(forms.Form): public_key = forms.CharField( label=_('ssh public key'), max_length=5000, widget=forms.Textarea(attrs={'placeholder': _('ssh-rsa AAAA...')}), help_text=_('Paste your id_ras.pub here.')) def clean_public_key(self): from sshpubkeys import SSHKey from sshpubkeys.exceptions import InvalidKeyException public_key = self.cleaned_data['public_key'] ssh = SSHKey(public_key) try: ssh.parse() except InvalidKeyException as e: print e raise forms.ValidationError(_('Not a valid ssh public key')) except NotImplementedError as e: print e raise forms.ValidationError(_('Not a valid ssh public key')) return public_key class UserPrivateAssetPermissionForm(forms.ModelForm): def save(self, commit=True): self.instance = super(UserPrivateAssetPermissionForm, self).save(commit=commit) self.instance.private_for = 'U' self.instance.users = [self.user] self.instance.save() return self.instance class Meta: model = AssetPermission fields = [ 'assets', 'asset_groups', 'system_users', 'private_for', 'name', ] widgets = { 'assets': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select assets')}), 'asset_groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select asset groups')}), 'system_users': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select system users')}), }