from django import forms from django.utils.translation import gettext_lazy as _ from django.core.exceptions import ValidationError from pingcap_sso.models import User from pingcap_sso.models import PingCAPLarkStaff class NewStaffForm(forms.Form): username = forms.CharField(required=True) lark_staff_id = forms.CharField(required=True) def __init__(self, *args, **kwargs): self.user = None self.lark_staff = None return super(NewStaffForm, self).__init__(*args, **kwargs) def clean_username(self): username = self.cleaned_data.get('username') if username: try: self.user = User.objects.get(username=username) except User.DoesNotExist: raise ValidationError(_('user not found')) if self.user.is_staff: raise ValidationError(_('the user is already an administrator')) email = self.user.email if not (email and email.split('@')[-1] == 'pingcap.cn' and self.user.email_verified): raise ValidationError(_('user must bind a pingcap.cn email')) return username def clean_lark_staff_id(self): lark_staff_id = self.cleaned_data.get('lark_staff_id') if lark_staff_id: try: self.lark_staff = PingCAPLarkStaff.objects.get(lark_user_id=lark_staff_id) except PingCAPLarkStaff.DoesNotExist: raise ValidationError(_('lark staff not found')) if self.lark_staff.user: raise ValidationError(_( 'the lark staff is already an administrator, username: %s' ) % (self.lark_staff.user)) return lark_staff_id