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