Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

58 řádky
1.8KB

  1. import web
  2. from views.forms import register_form
  3. from views.utils import get_nav_bar, csrf_protected, password_weakness, get_render
  4. import models.register
  5. import models.user
  6. import logging
  7. import bcrypt
  8. import re
  9. logger = logging.getLogger(__name__)
  10. class Register:
  11. def GET(self):
  12. """
  13. Get the registration form
  14. :return: A page with the registration form
  15. """
  16. session = web.ctx.session
  17. nav = get_nav_bar(session)
  18. return get_render().register(nav, register_form, "")
  19. @csrf_protected
  20. def POST(self):
  21. """
  22. Handle input data and register new user in database
  23. :return: Main page
  24. """
  25. session = web.ctx.session
  26. nav = get_nav_bar(session)
  27. data = web.input()
  28. render = get_render()
  29. register = register_form()
  30. if not register.validates():
  31. return render.register(nav, register, "All fields must be valid.")
  32. # Check if user exists
  33. if models.user.get_user_id_by_name(data.username):
  34. return render.register(nav, register, "Invalid user, already exists.")
  35. # Check password security
  36. weakness = password_weakness(data.password, data.username)
  37. if weakness is not None:
  38. return render.register(nav, register, weakness)
  39. password_hash = bcrypt.hashpw(data.password.encode('UTF-8'), bcrypt.gensalt())
  40. models.register.set_user(data.username, password_hash, data.full_name, data.company,
  41. data.email, data.street_address, data.city, data.state,
  42. data.postal_code, data.country)
  43. logger.info("User %s registered", data.username)
  44. return render.register(nav, register_form, "User registered!")