import web from views.forms import register_form from views.utils import get_nav_bar, csrf_protected, password_weakness import models.register import models.user import bcrypt import re # Get html templates render = web.template.render('templates/') class Register: def GET(self): """ Get the registration form :return: A page with the registration form """ session = web.ctx.session nav = get_nav_bar(session) return render.register(nav, register_form, "") @csrf_protected def POST(self): """ Handle input data and register new user in database :return: Main page """ session = web.ctx.session nav = get_nav_bar(session) data = web.input() register = register_form() if not register.validates(): return render.register(nav, register, "All fields must be valid.") # Check if user exists if models.user.get_user_id_by_name(data.username): return render.register(nav, register, "Invalid user, already exists.") # Check password security weakness = password_weakness(data.password, data.username) if weakness is not None: return render.register(nav, register, weakness) password_hash = bcrypt.hashpw(data.password.encode('UTF-8'), bcrypt.gensalt()) models.register.set_user(data.username, password_hash, data.full_name, data.company, data.email, data.street_address, data.city, data.state, data.postal_code, data.country) return render.register(nav, register_form, "User registered!")