49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
from flask import Flask, render_template, url_for, request, redirect, flash
|
|
from forms import RegistrationForm
|
|
from irc_register import ircregister
|
|
import os
|
|
|
|
app = Flask(__name__)
|
|
|
|
# to prevent CSRF attacks
|
|
# KEEP SECRET
|
|
app.config["SECRET_KEY"] = os.getenv("FLASK_CSRF_SECRET_KEY")
|
|
webchat_url = os.getenv("WEBCHAT_URL")
|
|
home_url = os.getenv("HOME_URL")
|
|
|
|
# getting the remote ip of user can be highly specific to your environment
|
|
# https://stackoverflow.com/questions/3759981/get-ip-address-of-visitors-using-flask-for-python
|
|
|
|
user_ip = request.environ.get("HTTP_X_REAL_IP", request.remote_addr)
|
|
|
|
@app.route("/register", methods=["GET", "POST"])
|
|
def register():
|
|
form = RegistrationForm()
|
|
if request.method == "POST":
|
|
userip = user_ip
|
|
username = request.form.get("username")
|
|
password = request.form.get("password")
|
|
|
|
response = ircregister(userip, username, password)
|
|
if response == "disconnected":
|
|
flash("Server Unavailable")
|
|
elif response == "WebIRC bad password":
|
|
flash("Bad Config. Please contact server administrators")
|
|
elif response == "ERR_ERRONEUSNICKNAME": # shouldn't happen if sanitized in the form
|
|
flash("Illegal Character in Username. Please choose a different one one.")
|
|
elif response == "ERR_NICKNAMEINUSE":
|
|
flash("Username already taken. Please choose a different one!")
|
|
elif response == "CAP_REFUSED":
|
|
flash("This IRCd doesn't support the draft/account-registration capability")
|
|
return redirect(webchat_url)
|
|
elif response == "SUCCESS":
|
|
return redirect(webchat_url)
|
|
else:
|
|
return redirect(home_url)
|
|
elif request.method == "GET":
|
|
return render_template('register.xhtml', title='Register', form=form)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True) |