La version 5 de Planète Casio. Regroupe le forum, les programmes, les tutoriel, les sprites et tous les autres outils développés par nos soins.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

validators.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from flask_login import current_user
  2. from wtforms.validators import ValidationError
  3. from app.models.users import Member
  4. from app.utils.valid_name import valid_name
  5. from app.utils.unicode_names import normalize
  6. from config import V5Config
  7. def name_valid(form, name):
  8. valid = valid_name(name.data)
  9. default = "Nom d'utilisateur invalide (erreur interne)"
  10. msg = {
  11. "too-short":
  12. "Le nom d'utilisateur doit faire au moins "
  13. f"{V5Config.USER_NAME_MINLEN} caractères.",
  14. "too-long":
  15. "Le nom d'utilisateur doit faire au plus "
  16. f"{V5Config.USER_NAME_MAXLEN} caractères.",
  17. "cant-normalize":
  18. "Ce nom d'utilisateur contient des caractères interdits. Les "
  19. "caractères autorisés sont les lettres, lettres accentuées, "
  20. 'chiffres ainsi que "-" (tiret), "." (point), "~" (tilde) et '
  21. '"_" (underscore).',
  22. "no-letter":
  23. "Le nom d'utilisateur doit contenir au moins une lettre.",
  24. "forbidden":
  25. "Ce nom d'utilisateur est interdit."
  26. }
  27. if valid is not True:
  28. err = ' '.join(msg.get(code, default) for code in valid)
  29. raise ValidationError(err)
  30. def name_available(form, name):
  31. # If the name is invalid, name_valid() will return a meaningful message
  32. try:
  33. norm = normalize(name.data)
  34. except ValueError:
  35. return
  36. member = Member.query.filter_by(norm=norm).first()
  37. if member is not None:
  38. raise ValidationError("Ce nom d'utilisateur est indisponible.")
  39. def email(form, email):
  40. member = Member.query.filter_by(email=email.data).first()
  41. if member is not None:
  42. raise ValidationError('Adresse email déjà utilisée.')
  43. def password(form, password):
  44. MIN_CHARS = 10
  45. # To avoid errors in forms where password is optionnal
  46. if len(password.data) != 0:
  47. errors = []
  48. if len(password.data) < MIN_CHARS:
  49. errors.append(f'Le mot de passe doit faire au moins {MIN_CHARS} caractères.')
  50. checks = {
  51. 'lower': False,
  52. 'upper': False,
  53. 'numeric': False,
  54. 'other': False
  55. }
  56. for c in password.data:
  57. if c in "abcdefghijklmnopqrstuvwxyz":
  58. checks['lower'] = True
  59. elif c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
  60. checks['upper'] = True
  61. elif c in "0123456789":
  62. checks['numeric'] = True
  63. else:
  64. checks['other'] = True
  65. if not checks['lower']:
  66. errors.append('Le mot de passe doit contenir au moins une minuscule.')
  67. if not checks['upper']:
  68. errors.append('Le mot de passe doit contenir au moins une majuscule.')
  69. if not checks['numeric']:
  70. errors.append('Le mot de passe doit contenir au moins une chiffre.')
  71. if not checks['other']:
  72. errors.append('Le mot de passe doit contenir au moins un caractère spécial.')
  73. if errors != []:
  74. raise ValidationError(' '.join(errors))
  75. def avatar(form, avatar):
  76. pass
  77. def old_password(form, field):
  78. if field.data:
  79. if not form.old_password.data:
  80. raise ValidationError('Votre ancien mot de passe est requis pour cette modification.')
  81. if not current_user.check_password(form.old_password.data):
  82. raise ValidationError('Mot de passe actuel erroné.')
  83. def id_exists(object):
  84. """Check if an id exists in a table"""
  85. def _id_exists(form, id):
  86. try:
  87. id = int(id.data)
  88. except ValueError:
  89. raise ValidationError('L\'id n\'est pas un entier valide')
  90. r = object.query.filter_by(id=id)
  91. if not r:
  92. raise ValidationError('L\'id n\'existe pas dans la BDD')
  93. return _id_exists
  94. def css(form, css):
  95. """Check if input is valid and sane CSS"""
  96. pass