def register(): form = Register(request.form) # If an HTTP request is made through POST and if the checks are valid, do the following steps if request.method == "POST" and form.validate(): # The register class takes care of the checks, username too short etc username = form.username.data email = form.email.data password = form.password.data password_hash = hashlib.md5( password.encode('utf-8')).hexdigest().upper() client_hash = Utils.getLoginHash(password_hash, config["keys"]["static_key"]) bcrypt_password = bcrypt.hashpw(client_hash, bcrypt.gensalt(12)) username_exists = session.query( session.query(User).filter_by( Username=username).exists()).scalar() email_exists = session.query( session.query(User).filter_by(Email=email).exists()).scalar() if username_exists: flash("This username is already in use.", "danger") return render_template("register.html", form=form) elif email_exists: flash("This email is already in use.", "danger") return render_template("register.html", form=form) elif not config["register"]["allowed_chars"].match(username): flash("This username is not valid.", "danger") return render_template("register.html", form=form) if config["recaptcha"]["recaptcha_enabled"]: if not recaptcha.verify(): flash("Something went wrong with the recaptcha, try again!", "danger") return render_template("register.html", form=form) # We add the user user = User(Username=username, Nickname=username, Password=bcrypt_password, Email=email, Active=1, Color=1) session.add(user) session.commit() # We send a postcard postcard = Postcard(RecipientID=user.ID, Details="", Type=125) session.add(postcard) # We add the default color in his inventory user.Inventory = 1 # We add his igloo igloo = Igloo(PenguinID=user.ID) session.add(igloo) session.commit() # We initiate the session and append our keys Session["user"] = { "id": user.ID, "username": user.Username, "email": user.Email, "rank": config["player_rank"][user.Moderator] } Session["logged_in"] = True flash("You have successfully registered!", "success") return redirect(url_for("dashboard")) return render_template("register.html", form=form)