Example #1
0
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)