mirror of
https://github.com/aljazceru/CTFd.git
synced 2026-02-14 02:34:23 +01:00
Add special casing for affiliation and website fields
This commit is contained in:
40
CTFd/auth.py
40
CTFd/auth.py
@@ -206,6 +206,31 @@ def register():
|
||||
valid_email = validators.validate_email(email_address)
|
||||
team_name_email_check = validators.validate_email(name)
|
||||
|
||||
# Process additional user fields
|
||||
fields = {}
|
||||
for field in UserFields.query.all():
|
||||
fields[field.id] = field
|
||||
|
||||
entries = {}
|
||||
for field_id, field in fields.items():
|
||||
value = request.form.get(f"fields[{field_id}]", "").strip()
|
||||
if field.required is True and (value is None or value == ""):
|
||||
errors.append("Please provide all required fields")
|
||||
break
|
||||
|
||||
# Handle special casing of existing profile fields
|
||||
if field.name.lower() == "affiliation":
|
||||
affiliation = value
|
||||
break
|
||||
elif field.name.lower() == "website":
|
||||
website = value
|
||||
break
|
||||
|
||||
if field.field_type == "boolean":
|
||||
entries[field_id] = bool(value)
|
||||
else:
|
||||
entries[field_id] = value
|
||||
|
||||
if country:
|
||||
try:
|
||||
validators.validate_country_code(country)
|
||||
@@ -252,21 +277,6 @@ def register():
|
||||
if valid_affiliation is False:
|
||||
errors.append("Please provide a shorter affiliation")
|
||||
|
||||
fields = {}
|
||||
for field in UserFields.query.all():
|
||||
fields[field.id] = field
|
||||
|
||||
entries = {}
|
||||
for field_id, field in fields.items():
|
||||
value = request.form.get(f"fields[{field_id}]", "").strip()
|
||||
if field.required is True and (value is None or value == ""):
|
||||
errors.append("Please provide all required fields")
|
||||
break
|
||||
if field.field_type == "boolean":
|
||||
entries[field_id] = bool(value)
|
||||
else:
|
||||
entries[field_id] = value
|
||||
|
||||
if len(errors) > 0:
|
||||
return render_template(
|
||||
"register.html",
|
||||
|
||||
@@ -16,7 +16,9 @@ def RegistrationForm(*args, **kwargs):
|
||||
|
||||
@property
|
||||
def extra(self):
|
||||
return build_custom_user_fields(self, include_entries=False)
|
||||
return build_custom_user_fields(
|
||||
self, include_entries=False, blacklisted_items=()
|
||||
)
|
||||
|
||||
attach_custom_user_fields(_RegistrationForm)
|
||||
|
||||
|
||||
@@ -9,7 +9,11 @@ from CTFd.utils.countries import SELECT_COUNTRIES_LIST
|
||||
|
||||
|
||||
def build_custom_user_fields(
|
||||
form_cls, include_entries=False, fields_kwargs=None, field_entries_kwargs=None
|
||||
form_cls,
|
||||
include_entries=False,
|
||||
fields_kwargs=None,
|
||||
field_entries_kwargs=None,
|
||||
blacklisted_items=("affiliation", "website"),
|
||||
):
|
||||
"""
|
||||
Function used to reinject values back into forms for accessing by themes
|
||||
@@ -29,6 +33,9 @@ def build_custom_user_fields(
|
||||
user_fields[f.field_id] = f.value
|
||||
|
||||
for field in new_fields:
|
||||
if field.name.lower() in blacklisted_items:
|
||||
continue
|
||||
|
||||
form_field = getattr(form_cls, f"fields[{field.id}]")
|
||||
|
||||
# Add the field_type to the field so we know how to render it
|
||||
|
||||
Reference in New Issue
Block a user