83 lines
3.4 KiB
Python
83 lines
3.4 KiB
Python
from flask_wtf import FlaskForm
|
|
from wtforms.fields import StringField, PasswordField, BooleanField, HiddenField, TextAreaField, FileField, IntegerField
|
|
from wtforms.validators import InputRequired, Email, Length, ValidationError, Regexp, NoneOf, Optional
|
|
from .model import User, LoginError, re_username, reserved_name, user_exists
|
|
|
|
PASSWORD_LEN = 64
|
|
EMAIL_LEN = 64
|
|
|
|
class SignupForm(FlaskForm):
|
|
username = StringField('username',
|
|
[InputRequired(),
|
|
Regexp(re_username),
|
|
NoneOf(reserved_name, message='Not available.'),
|
|
Length(min=3, max=64)],
|
|
[lambda name: name and name.replace(' ', '_')])
|
|
email = StringField('e-mail address',
|
|
[InputRequired(), Email(),
|
|
Length(min=5, max=EMAIL_LEN)],
|
|
description="we never share your e-mail address")
|
|
password = StringField('password',
|
|
[InputRequired(), Length(min=4, max=PASSWORD_LEN)])
|
|
|
|
def validate_username(form, field):
|
|
if user_exists(User.username, field.data):
|
|
raise ValidationError('Not available')
|
|
|
|
def validate_email(form, field):
|
|
if user_exists(User.email, field.data):
|
|
raise ValidationError('In use by another account')
|
|
|
|
class LoginForm(FlaskForm):
|
|
user_or_email = StringField('username or e-mail address',
|
|
[InputRequired(), Length(min=3, max=EMAIL_LEN)],
|
|
[lambda name: name and name.replace(' ', '_')])
|
|
password = PasswordField('password',
|
|
[InputRequired(), Length(max=PASSWORD_LEN)])
|
|
remember = BooleanField('stay logged in')
|
|
next = HiddenField('next')
|
|
|
|
def validate(self):
|
|
rv = FlaskForm.validate(self)
|
|
if not rv:
|
|
return False
|
|
|
|
try:
|
|
self.user = User.attempt_login(self.user_or_email.data,
|
|
self.password.data)
|
|
return True
|
|
except LoginError as e:
|
|
self.user_or_email.errors.append(e.msg)
|
|
return False
|
|
|
|
class ForgotPasswordForm(FlaskForm):
|
|
user_or_email = StringField('username or e-mail address',
|
|
[InputRequired(), Length(max=EMAIL_LEN)])
|
|
|
|
class PasswordForm(FlaskForm):
|
|
password = PasswordField('new password',
|
|
[InputRequired(), Length(min=4, max=PASSWORD_LEN)])
|
|
|
|
class AccountSettingsForm(FlaskForm):
|
|
full_name = StringField('full name', [Length(max=64)])
|
|
email = StringField('e-mail address',
|
|
[InputRequired(), Email(),
|
|
Length(min=5, max=EMAIL_LEN)])
|
|
|
|
class ChangePasswordForm(FlaskForm):
|
|
old_password = PasswordField('current password',
|
|
[InputRequired(), Length(max=PASSWORD_LEN)])
|
|
new_password = PasswordField('new password',
|
|
[InputRequired(), Length(max=PASSWORD_LEN)])
|
|
|
|
class SourceDocForm(FlaskForm):
|
|
text = TextAreaField('text', [InputRequired()])
|
|
db_price_per_character = IntegerField('price per character', [Optional()])
|
|
db_document_price = IntegerField('document price', [Optional()])
|
|
|
|
class ItemForm(FlaskForm):
|
|
text = TextAreaField('text', [InputRequired()])
|
|
|
|
class UploadSourceDocForm(FlaskForm):
|
|
sourcedoc_file = FileField('SourceDoc', [Regexp(r'^[^/\\]+\.txt$')])
|