Add special casing for affiliation and website fields

This commit is contained in:
Kevin Chung
2020-08-19 00:09:51 -04:00
parent 607fa37b98
commit f7de0c71a5
3 changed files with 36 additions and 17 deletions

View File

@@ -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",

View File

@@ -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)

View File

@@ -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