def settings(): settings_form = SettingsForm() read_only(settings_form.public_key) if settings_form.validate_on_submit(): pairs = dict() for field in settings_form: if field.short_name in ["csrf_token", "public_key", "submit"]: continue data = field.data if type(data) == bool: data = int(data) pairs[field.short_name] = data Config.set_many(pairs) cache.delete_memoized(get_ctf_name) cache.delete_memoized(get_allow_registrations) cache.delete_memoized(get_require_email_verification) flash("Settings saved!", "success") return redirect(url_for("admin.settings")) else: keys = [] for field in settings_form: if field.short_name == "csrf_token": continue if field.short_name == "public_key": private_key, public_key = Config.get_ssh_keys() field.data = public_key else: keys.append(field.short_name) pairs = Config.get_many(keys) for field in settings_form: if field.short_name in ["csrf_token", "public_key"]: continue data = pairs.get(field.short_name) if field.short_name in [ "allow_registrations", "require_email_verification" ]: field.data = int(data) elif field.short_name in ["start_time", "end_time"] and data: field.data = datetime.strptime(data, "%Y-%m-%d %H:%M:%S") else: field.data = data return render_template("admin/settings.j2", settings_form=settings_form)
def setup(): if setup_complete(): return abort(404) if Config.get("setup_verification") is None: # generate setup verification token generate_verification_token() setup_form = SetupForm() setup_form.admin_user.data = "root" if setup_form.validate_on_submit(): form_fields = ["ctf_name", "team_size", "admin_email"] to_update = dict() for field in setup_form: if field.short_name in form_fields: to_update[field.short_name] = field.data admin_user = register_user("Administrator", setup_form.admin_email.data, "root", setup_form.password.data, 0, admin=True, send_email=False) login_user(admin_user, remember=True) to_update.update(admin_uid=admin_user.id) to_update.update(allow_registrations=0) to_update.update(require_email_verification=0) to_update.update(setup_complete=1) now = datetime.now() to_update.update( start_time=(now + timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S")) to_update.update( end_time=(now + timedelta(hours=5)).strftime("%Y-%m-%d %H:%M:%S")) Config.set_many(to_update) cache.delete_memoized(get_ctf_name) cache.delete_memoized(setup_complete) return redirect(url_for("base.index")) return render_template("base/setup.j2", setup_form=setup_form)