forms.py 4.8 KB

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