class LoginForm(RedirectForm): username_or_email = SlField('Username/Email', [ sl_validators.Required(), sl_validators.UsernameOrEmail(), login_check.UsernameOrEmailExists ]) password = SlPasswordField( 'Password', [sl_validators.Required(), login_check.PasswordValid])
class ForumThreadForm(FlaskForm): title = SlField('Thread Title', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(3) ]) body = SlTextAreaField('Thread Body', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(2) ])
class ItemUploadForm(FlaskForm): name = SlField('Item Name', [sl_validators.Required(), sl_validators.NotBlank()]) canon_name = SlField('Canon Name', [sl_validators.CanonName(), sl_validators.NotBlank()]) image = SlFileField('Image File', []) category_id = SelectField('Category', coerce=int) description = SlTextAreaField( 'Description', [sl_validators.Required(), sl_validators.NotBlank()])
class ForumCategoryForm(FlaskForm): title = SlField('Category Title', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(3) ]) canon_name = SlField('Canon Name', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(3), sl_validators.CanonName() ]) order = SlIntegerField('Sort Order')
class RecoveryForm(FlaskForm): username_or_email = SlField('Username/Email', [ sl_validators.Required(), sl_validators.UsernameOrEmail(), login_check.UsernameOrEmailExists ]) recaptcha = RecaptchaField( validators=[Recaptcha(message='Please check the CAPTCHA.')])
class PasswordForm(FlaskForm): password_check = UserCheck() old_password = SlPasswordField('Old Password', [ sl_validators.Required(), password_check.PasswordValid]) new_password = SlPasswordField('New Password', [ sl_validators.Required(), sl_validators.Min(app.config['MIN_PASSWORD_LENGTH']), sl_validators.Max(app.config['MAX_PASSWORD_LENGTH']) ]) confirm_password = SlPasswordField('Confirm Password', [ sl_validators.EqualTo('new_password', message='Passwords must match.') ]) def setUser(self, user): self.password_check.user = user
class ConversationForm(FlaskForm): recipient = SlField('Recipient Name', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(app.config['MIN_USERNAME_LENGTH']), sl_validators.Max(app.config['MAX_USERNAME_LENGTH']), sl_validators.Username(), recipient_check.UsernameExists ]) title = SlField('Message Title', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(2) ]) text = SlTextAreaField('Message Text', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(2) ])
class PasswordResetForm(FlaskForm): password = SlPasswordField('New Password', [ sl_validators.Required(), sl_validators.Min(app.config['MIN_PASSWORD_LENGTH']), sl_validators.Max(app.config['MAX_PASSWORD_LENGTH']) ]) confirm_password = SlPasswordField( 'Confirm Password', [sl_validators.EqualTo('password', message='Passwords must match.')])
class PetEditForm(FlaskForm): name = SlField('Name', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Max(app.config['MAX_PET_NAME_LENGTH']) ]) description = SlTextAreaField('Description') pronouns = SlField('Pronouns', [sl_validators.Max(app.config['MAX_PET_NAME_LENGTH'])])
class EmailForm(FlaskForm): password_check = UserCheck() IsNot = sl_validators.IsNot('', message='The email you entered is the same as your old email.') email = SlField('Email Address', [ sl_validators.Required(), sl_validators.Email(), IsNot, sl_validators.EmailUnique()]) password = SlPasswordField('Password', [ sl_validators.Required(), password_check.PasswordValid]) def setUser(self, user): self.password_check.user = user self.IsNot.pattern = user.email
class ForumBoardForm(FlaskForm): title = SlField('Board Title', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(3) ]) canon_name = SlField('Canon Name', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(3), sl_validators.CanonName() ]) description = SlTextAreaField('Board Description', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(2) ]) category_id = SelectField('Category', coerce=int) order = SlIntegerField('Sort Order') moderators_only = SlBooleanField('Restrict this board to moderators')
class BankTransferForm(FlaskForm): recipient = SlField('Recipient Name', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(app.config['MIN_USERNAME_LENGTH']), sl_validators.Max(app.config['MAX_USERNAME_LENGTH']), sl_validators.Username(), recipient_check.UsernameExists ]) cloud_coins = SlIntegerField( 'Cloud Coins', [validators.Optional(), sl_validators.NotNegative()]) star_shards = SlIntegerField( 'Star Shards', [validators.Optional(), sl_validators.NotNegative()])
class UsernameForm(FlaskForm): IsNot = sl_validators.IsNot('', message='The username you entered is the same as your current username.') UsernameUnique = sl_validators.UsernameUnique() username = SlField('New Username', [ sl_validators.Required(), sl_validators.Min(app.config['MIN_USERNAME_LENGTH']), sl_validators.Max(app.config['MAX_USERNAME_LENGTH']), sl_validators.Username(), IsNot, UsernameUnique]) def setUser(self, user): self.IsNot.pattern = user.name self.UsernameUnique.whitelist = user.usernames
class RegisterForm(FlaskForm): username = SlField('Username', [ sl_validators.Required(), sl_validators.Min(app.config['MIN_USERNAME_LENGTH']), sl_validators.Max(app.config['MAX_USERNAME_LENGTH']), sl_validators.Username(), sl_validators.UsernameUnique() ]) email = SlField('Email Address', [ sl_validators.Required(), sl_validators.Email(), sl_validators.EmailUnique() ]) password = SlPasswordField('Password', [ sl_validators.Required(), sl_validators.Min(app.config['MIN_PASSWORD_LENGTH']), sl_validators.Max(app.config['MAX_PASSWORD_LENGTH']) ]) confirm_password = SlPasswordField('Confirm Password', [ sl_validators.Required(), sl_validators.EqualTo('password', message='Passwords must match.') ]) invite_code = SlField( 'Invite Code', [sl_validators.Required(), register_check.InviteCodeValid]) at_least_13 = SlBooleanField( 'I certify that I am at least 13 years old.', [ sl_validators.Required( message='You must be at least 13 to join Saylua.') ]) accept_tos = SlBooleanField( 'I agree to the <a href="/terms/" target="_blank" rel="noopener">Terms of Service</a>', [ sl_validators.Required( message='You must agree to the Terms of Service!') ]) recaptcha = RecaptchaField( validators=[Recaptcha(message='Please check the CAPTCHA.')])
class ForumPostForm(FlaskForm): body = SlTextAreaField('Post Content', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(2) ])
class BanForm(FlaskForm): days = SlIntegerField('Days Banned', [validators.Optional()]) is_permanent = SlBooleanField('Ban this user permanently?') reason = SlField('Ban Reason', [sl_validators.Required()])
class ConversationReplyForm(FlaskForm): text = SlTextAreaField('Reply', [ sl_validators.Required(), sl_validators.NotBlank(), sl_validators.Min(2) ])