No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

56 líneas
1.7KB

  1. import web
  2. from views.forms import register_form
  3. from views.utils import get_nav_bar, csrf_protected, password_weakness
  4. import models.register
  5. import models.user
  6. import bcrypt
  7. import re
  8. # Get html templates
  9. render = web.template.render('templates/')
  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 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. register = register_form()
  29. if not register.validates():
  30. return render.register(nav, register, "All fields must be valid.")
  31. # Check if user exists
  32. if models.user.get_user_id_by_name(data.username):
  33. return render.register(nav, register, "Invalid user, already exists.")
  34. # Check password security
  35. weakness = password_weakness(data.password, data.username)
  36. if weakness is not None:
  37. return render.register(nav, register, weakness)
  38. password_hash = bcrypt.hashpw(data.password.encode('UTF-8'), bcrypt.gensalt())
  39. models.register.set_user(data.username, password_hash, data.full_name, data.company,
  40. data.email, data.street_address, data.city, data.state,
  41. data.postal_code, data.country)
  42. return render.register(nav, register_form, "User registered!")