forms.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. import logging
  10. from flask_babelplus import lazy_gettext as _
  11. from wtforms import (BooleanField, HiddenField, PasswordField, SelectField,
  12. StringField, SubmitField)
  13. from wtforms.validators import (DataRequired, Email, EqualTo, InputRequired,
  14. ValidationError, regexp)
  15. from flaskbb.user.models import User
  16. from flaskbb.utils.fields import RecaptchaField
  17. from flaskbb.utils.forms import FlaskBBForm
  18. from flaskbb.utils.helpers import time_utcnow
  19. logger = logging.getLogger(__name__)
  20. USERNAME_RE = r'^[\w.+-]+$'
  21. is_valid_username = regexp(
  22. USERNAME_RE, message=_("You can only use letters, numbers or dashes.")
  23. )
  24. class LoginForm(FlaskBBForm):
  25. login = StringField(_("Username or Email address"), validators=[
  26. DataRequired(message=_("Please enter your username or email address."))
  27. ])
  28. password = PasswordField(_("Password"), validators=[
  29. DataRequired(message=_("Please enter your password."))])
  30. remember_me = BooleanField(_("Remember me"), default=False)
  31. submit = SubmitField(_("Login"))
  32. recaptcha = HiddenField(_("Captcha"))
  33. class LoginRecaptchaForm(LoginForm):
  34. recaptcha = RecaptchaField(_("Captcha"))
  35. class RegisterForm(FlaskBBForm):
  36. username = StringField(_("Username"), validators=[
  37. DataRequired(message=_("A valid username is required")),
  38. is_valid_username])
  39. email = StringField(_("Email address"), validators=[
  40. DataRequired(message=_("A valid email address is required.")),
  41. Email(message=_("Invalid email address."))])
  42. password = PasswordField(_('Password'), validators=[
  43. InputRequired(),
  44. EqualTo('confirm_password', message=_('Passwords must match.'))])
  45. confirm_password = PasswordField(_('Confirm password'))
  46. recaptcha = RecaptchaField(_("Captcha"))
  47. language = SelectField(_('Language'))
  48. accept_tos = BooleanField(_("I accept the Terms of Service"), validators=[
  49. DataRequired(message=_("Please accept the TOS."))], default=True)
  50. submit = SubmitField(_("Register"))
  51. def save(self):
  52. user = User(username=self.username.data,
  53. email=self.email.data,
  54. password=self.password.data,
  55. date_joined=time_utcnow(),
  56. primary_group_id=4,
  57. language=self.language.data)
  58. return user.save()
  59. class ReauthForm(FlaskBBForm):
  60. password = PasswordField(_('Password'), validators=[
  61. DataRequired(message=_("Please enter your password."))])
  62. submit = SubmitField(_("Refresh Login"))
  63. class ForgotPasswordForm(FlaskBBForm):
  64. email = StringField(_('Email address'), validators=[
  65. DataRequired(message=_("A valid email address is required.")),
  66. Email()])
  67. recaptcha = RecaptchaField(_("Captcha"))
  68. submit = SubmitField(_("Request Password"))
  69. class ResetPasswordForm(FlaskBBForm):
  70. token = HiddenField('Token')
  71. email = StringField(_('Email address'), validators=[
  72. DataRequired(message=_("A valid email address is required.")),
  73. Email()])
  74. password = PasswordField(_('Password'), validators=[
  75. InputRequired(),
  76. EqualTo('confirm_password', message=_('Passwords must match.'))])
  77. confirm_password = PasswordField(_('Confirm password'))
  78. submit = SubmitField(_("Reset password"))
  79. def validate_email(self, field):
  80. email = User.query.filter_by(email=field.data).first()
  81. if not email:
  82. raise ValidationError(_("Wrong email address."))
  83. class RequestActivationForm(FlaskBBForm):
  84. username = StringField(_("Username"), validators=[
  85. DataRequired(message=_("A valid username is required.")),
  86. is_valid_username])
  87. email = StringField(_("Email address"), validators=[
  88. DataRequired(message=_("A valid email address is required.")),
  89. Email(message=_("Invalid email address."))])
  90. submit = SubmitField(_("Send Confirmation Mail"))
  91. def validate_email(self, field):
  92. self.user = User.query.filter_by(email=field.data).first()
  93. # check if the username matches the one found in the database
  94. if not self.user.username == self.username.data:
  95. raise ValidationError(_("User does not exist."))
  96. if self.user.activated is True:
  97. raise ValidationError(_("User is already active."))
  98. class AccountActivationForm(FlaskBBForm):
  99. token = StringField(_("Email confirmation token"), validators=[
  100. DataRequired(message=_("Please enter the token that we have sent to "
  101. "you."))
  102. ])
  103. submit = SubmitField(_("Confirm Email"))