Skip to content
Snippets Groups Projects

Registrace

Merged Martin Mareš requested to merge mj/registrace into devel
1 file
+ 13
8
Compare changes
  • Side-by-side
  • Inline
+ 13
8
@@ -245,13 +245,13 @@ class Reg1:
def _gen_captcha(self):
rng = self._init_rng()
self.x = rng.randrange(1, 10)
self.y = rng.randrange(1, 20)
self.y = rng.randrange(1, 10)
app.logger.debug(f'Reg1: Captcha: {self.x}*{self.y}')
def captcha_task(self) -> str:
cisla = ['nula', 'jedna', 'dva', 'tři', 'čtyři', 'pět', 'šest', 'sedm', 'osm', 'devět',
'deset', 'jedenáct', 'dvanáct', 'třináct', 'čtrnáct', 'patnáct', 'šestnáct', 'sedmnáct', 'osmnáct', 'devatenáct']
app.logger.debug(f'Reg1: Captcha: {self.x}*{self.y}')
return f'Napiš číslem, kolik je {cisla[self.x]} krát {cisla[self.y]}.'
return f'Napište číslem, kolik je {cisla[self.x]} krát {cisla[self.y]}.'
def captcha_check_answer(self, answer: str) -> bool:
correct = self.x * self.y
@@ -266,6 +266,7 @@ class Reg1:
sess = db.get_session()
rr = sess.query(db.RegRequest).with_for_update().filter_by(captcha_token=self.seed).one_or_none()
if rr:
self._reset()
self.status = RegStatus.expired
sess.rollback()
app.logger.info('Reg1: Captcha token použit znovu')
@@ -286,22 +287,26 @@ class Reg1:
sess.commit()
return True
def process(self, email: str, captcha: str):
def process(self, email: str, captcha: str) -> bool:
# XXX: Nejdříve zapisujeme registraci do DB, a teprve pak ověřujeme captchu.
# Tímto způsobem je těžší captchu obejít (protože je rate-limitovaná), ale
# zase je snazší páchat DoS útok na celou registraci (protože je rate-limitovaná).
if not self.create_reg_request(email):
return
return False
elif not self.captcha_check_answer(captcha):
if not self.captcha_check_answer(captcha):
self._reset()
self.status = RegStatus.wrong_captcha
return False
elif mo.users.user_by_email(email):
if mo.users.user_by_email(email):
self._reset()
self.status = RegStatus.already_exists
app.logger.info(f'Reg1: Účet s e-mailem {email} už existuje')
return False
return True
class Reg1Form(FlaskForm):
@@ -435,7 +440,7 @@ class Reg2Form(FlaskForm):
submit = wtforms.SubmitField('Vytvořit účet')
def validate_passwd(form, field):
if not mo.users.validate_passwd(field.data):
if not mo.users.validate_password(field.data):
raise wtforms.ValidationError(mo.users.password_help)
def validate_passwd2(form, field):
Loading