ircWebRegistration/flaskapp.py
2022-04-16 19:18:20 +05:30

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)