async def signup(request: Request, userPayload: UserCreate): if request.state.user_queries.get_user_by_email(userPayload.emailAddress): raise HTTPException( status_code=409, detail=f"Account under {userPayload.emailAddress} already exists", ) user = UserModel( firstName=userPayload.firstName, lastName=userPayload.lastName, emailAddress=userPayload.emailAddress.lower(), password=encrypt_password(userPayload.password), userRole="USER", isVerified=False, ) new_account = request.state.user_queries.create_user(user) if request.state.config.SENDGRID_API_KEY: verify_reset = request.state.reset_queries.create_reset(user.id) if request.state.config.API_ENV != "TESTING": email.send_confirmation_email(user, verify_reset) try: email.send_confirmation_email(user, verify_reset) except Exception as e: request.state.reset_queries.invalidate_resets_for_user(user.id) log.error(e) new_account.jwt = new_account.gen_token() return LoggedInUser.from_orm(new_account)
def dashboard(): if request.method == "GET": team_solves = ChallengeSolve.select(ChallengeSolve, Challenge).join(Challenge).where(ChallengeSolve.team == g.team) team_adjustments = ScoreAdjustment.select().where(ScoreAdjustment.team == g.team) team_score = sum([i.challenge.points for i in team_solves] + [i.value for i in team_adjustments]) first_login = False if g.team.first_login: first_login = True g.team.first_login = False g.team.save() return render_template("dashboard.html", team_solves=team_solves, team_adjustments=team_adjustments, team_score=team_score, first_login=first_login) elif request.method == "POST": if g.redis.get("ul{}".format(session["team_id"])): flash("You're changing your information too fast!") return redirect(url_for('dashboard')) team_name = request.form["team_name"].strip() team_email = request.form["team_email"].strip() affiliation = request.form["affiliation"].strip() team_elig = "team_eligibility" in request.form if len(team_name) > 50 or not team_name: flash("You must have a team name!") return redirect(url_for('dashboard')) if not (team_email and "." in team_email and "@" in team_email): flash("You must have a valid team email!") return redirect(url_for('dashboard')) if not affiliation or len(affiliation) > 100: affiliation = "No affiliation" email_changed = (team_email != g.team.email) g.team.name = team_name g.team.email = team_email g.team.affiliation = affiliation if not g.team.eligibility_locked: g.team.eligible = team_elig g.redis.set("ul{}".format(session["team_id"]), str(datetime.now()), 120) if email_changed: if not email.is_valid_email(team_email): flash("You're lying") return redirect(url_for('dashboard')) g.team.email_confirmation_key = misc.generate_confirmation_key() g.team.email_confirmed = False email.send_confirmation_email(team_email, g.team.email_confirmation_key, g.team.key) flash("Changes saved. Please check your email for a new confirmation key.") else: flash("Changes saved.") g.team.save() return redirect(url_for('dashboard'))
def register(): if not config.registration: if "admin" in session and session["admin"]: pass else: return "Registration is currently disabled. Email [email protected] to create an account." if request.method == "GET": return render_template("register.html") elif request.method == "POST": error, message = captcha.verify_captcha() if error: flash(message) return render_template("register.html") team_name = request.form["team_name"].strip() team_email = request.form["team_email"].strip() team_elig = "team_eligibility" in request.form affiliation = request.form["affiliation"].strip() if len(team_name) > 50 or not team_name: flash("You must have a team name!") return render_template("register.html") if not (team_email and "." in team_email and "@" in team_email): flash("You must have a valid team email!") return render_template("register.html") if not affiliation or len(affiliation) > 100: affiliation = "No affiliation" if not email.is_valid_email(team_email): flash("You're lying") return render_template("register.html") team_key = misc.generate_team_key() confirmation_key = misc.generate_confirmation_key() team = Team.create(name=team_name, email=team_email, eligible=team_elig, affiliation=affiliation, key=team_key, email_confirmation_key=confirmation_key) TeamAccess.create(team=team, ip=misc.get_ip(), time=datetime.now()) email.send_confirmation_email(team_email, confirmation_key, team_key) session["team_id"] = team.id flash("Team created.") return redirect(url_for('dashboard'))
def dashboard(): if request.method == "GET": team_solves = ChallengeSolve.select( ChallengeSolve, Challenge).join(Challenge).where(ChallengeSolve.team == g.team) team_adjustments = ScoreAdjustment.select().where( ScoreAdjustment.team == g.team) team_score = sum([i.challenge.points for i in team_solves] + [i.value for i in team_adjustments]) first_login = False if g.team.first_login: first_login = True g.team.first_login = False g.team.save() return render_template("dashboard.html", team_solves=team_solves, team_adjustments=team_adjustments, team_score=team_score, first_login=first_login) elif request.method == "POST": if g.redis.get("ul{}".format(session["team_id"])): flash("You're changing your information too fast!") return redirect(url_for('dashboard')) team_name = request.form["team_name"].strip() team_email = request.form["team_email"].strip() affiliation = request.form["affiliation"].strip() team_elig = "team_eligibility" in request.form if len(team_name) > 50 or not team_name: flash("You must have a team name!") return redirect(url_for('dashboard')) if not (team_email and "." in team_email and "@" in team_email): flash("You must have a valid team email!") return redirect(url_for('dashboard')) if not affiliation or len(affiliation) > 100: affiliation = "No affiliation" email_changed = (team_email != g.team.email) g.team.name = team_name g.team.email = team_email g.team.affiliation = affiliation if not g.team.eligibility_locked: g.team.eligible = team_elig g.redis.set("ul{}".format(session["team_id"]), str(datetime.now()), 120) if email_changed: if not email.is_valid_email(team_email): flash("You're lying") return redirect(url_for('dashboard')) g.team.email_confirmation_key = misc.generate_confirmation_key() g.team.email_confirmed = False email.send_confirmation_email(team_email, g.team.email_confirmation_key, g.team.key) flash( "Changes saved. Please check your email for a new confirmation key." ) else: flash("Changes saved.") g.team.save() return redirect(url_for('dashboard'))