finished dev version

This commit is contained in:
2026-01-12 14:01:18 +01:00
parent 79c011a217
commit 462f8a688b
8 changed files with 111 additions and 41 deletions

View File

@@ -9,14 +9,31 @@ bp = Blueprint('main', __name__)
def get_confirmed_count():
return Participant.query.filter_by(confirmed=True).count()
def send_verification_email(user_email):
def add_user(name, email, looking_for_team, on_waitlist = False):
new_user = Participant(name=name, email=email, looking_for_team=looking_for_team)
if on_waitlist:
new_user.on_waitlist = on_waitlist
db.session.add(new_user)
db.session.commit()
return new_user
def send_verification_email(user):
s = URLSafeTimedSerializer(current_app.config['SECRET_KEY'])
token = s.dumps(user_email, salt='email-confirm-h4tum-ctf-2025')
token = s.dumps(user.email, salt='email-confirm-h4tum-ctf-2025')
link = url_for('main.verify_email', token=token, _external=True)
logo = url_for('static', filename='h4tum_white.png', _external=True)
msg = Message('Verify your CTF Registration', recipients=[user_email])
msg.html = render_template("email.html", user_email=user_email, link=link, logo_url=logo)
msg = Message('Verify your CTF Registration', recipients=[user.email])
msg.html = render_template("email.html", user_name=user.name, link=link, logo_url=logo)
mail.send(msg)
user.num_emails_sent += 1
db.session.commit()
return True
def send_waitlist_email(user):
msg = Message('h4tum CTF 2026 Registration', recipients=[user.email])
logo = url_for('static', filename='h4tum_white.png', _external=True)
msg.html = render_template("waitlist_email.html", logo_url=logo, user_name=user.name)
mail.send(msg)
@bp.route('/', methods=['GET', 'POST'])
@@ -34,29 +51,35 @@ def index():
if not email.endswith(f"@{tum_domain}"):
flash(f"Error: You must use a @{tum_domain} email address.", "error")
return redirect(url_for('main.index'))
if confirmed_count >= max_spots:
flash("Sorry, the event is full!", "error")
return redirect(url_for('main.index'))
existing_user = Participant.query.filter_by(email=email).first()
if existing_user:
if existing_user.confirmed:
flash("You are already registered and confirmed!", "info")
elif existing_user.on_waitlist:
flash("You are already on the waitlist", "info")
else:
flash("Confirmation email resent. Please check your inbox.", "info")
send_verification_email(email)
if existing_user.num_emails_sent < 5:
flash("Confirmation email resent. Please check your inbox.", "info")
send_verification_email(existing_user)
else:
flash("Email limit reached", "error")
return redirect(url_for('main.index'))
else:
new_user = add_user(name, email, looking_for_team)
if confirmed_count < max_spots:
send_verification_email(new_user)
flash("Registration started! Check your email to confirm your spot.", "success")
else:
new_user.on_waitlist = True
db.session.commit()
send_waitlist_email(new_user)
flash("The event is already full!\nYou have been placed on the waitlist", "info")
return redirect(url_for('main.index'))
new_user = Participant(name=name, email=email, looking_for_team=looking_for_team)
db.session.add(new_user)
db.session.commit()
send_verification_email(email)
flash("Registration started! Check your email to confirm your spot.", "success")
return redirect(url_for('main.index'))
return render_template('index.html', spots_left=spots_left)
return render_template('index.html', spots_left=spots_left, max_spots=max_spots)
@bp.route('/verify/<token>')
def verify_email(token):