forms.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # -*- coding: utf-8 -*-
  2. """
  3. flaskbb.auth.forms
  4. ~~~~~~~~~~~~~~~~~~~~
  5. It provides the forms that are needed for the auth views.
  6. :copyright: (c) 2014 by the FlaskBB Team.
  7. :license: BSD, see LICENSE for more details.
  8. """
  9. from datetime import datetime
  10. from flask.ext.wtf import Form, RecaptchaField
  11. from wtforms import StringField, PasswordField, BooleanField, HiddenField
  12. from wtforms.validators import (DataRequired, Email, EqualTo, regexp,
  13. ValidationError)
  14. from flaskbb.user.models import User
  15. USERNAME_RE = r'^[\w.+-]+$'
  16. is_username = regexp(USERNAME_RE,
  17. message=("You can only use letters, numbers or dashes"))
  18. class LoginForm(Form):
  19. login = StringField("Username or E-Mail", validators=[
  20. DataRequired(message="You must provide an email adress or username")])
  21. password = PasswordField("Password", validators=[
  22. DataRequired(message="Password required")])
  23. remember_me = BooleanField("Remember Me", default=False)
  24. class RegisterForm(Form):
  25. username = StringField("Username", validators=[
  26. DataRequired(message="Username required"),
  27. is_username])
  28. email = StringField("E-Mail", validators=[
  29. DataRequired(message="Email adress required"),
  30. Email(message="This email is invalid")])
  31. password = PasswordField("Password", validators=[
  32. DataRequired(message="Password required")])
  33. confirm_password = PasswordField("Confirm Password", validators=[
  34. DataRequired(message="Confirm Password required"),
  35. EqualTo("password", message="Passwords do not match")])
  36. accept_tos = BooleanField("Accept Terms of Service", default=True)
  37. def validate_username(self, field):
  38. user = User.query.filter_by(username=field.data).first()
  39. if user:
  40. raise ValidationError("This username is taken")
  41. def validate_email(self, field):
  42. email = User.query.filter_by(email=field.data).first()
  43. if email:
  44. raise ValidationError("This email is taken")
  45. def save(self):
  46. user = User(username=self.username.data,
  47. email=self.email.data,
  48. password=self.password.data,
  49. date_joined=datetime.utcnow(),
  50. primary_group_id=4)
  51. return user.save()
  52. class RegisterRecaptchaForm(RegisterForm):
  53. recaptcha = RecaptchaField("Captcha")
  54. class ReauthForm(Form):
  55. password = PasswordField('Password', valdidators=[
  56. DataRequired()])
  57. class ForgotPasswordForm(Form):
  58. email = StringField('Email', validators=[
  59. DataRequired(message="Email reguired"),
  60. Email()])
  61. class ResetPasswordForm(Form):
  62. token = HiddenField('Token')
  63. email = StringField('Email', validators=[
  64. DataRequired(),
  65. Email()])
  66. password = PasswordField('Password', validators=[
  67. DataRequired()])
  68. confirm_password = PasswordField('Confirm password', validators=[
  69. DataRequired(),
  70. EqualTo('password', message='Passwords must match')])
  71. def validate_email(self, field):
  72. email = User.query.filter_by(email=field.data).first()
  73. if not email:
  74. raise ValidationError("Wrong E-Mail.")