Add some more progress

This commit is contained in:
Kevin Chung
2020-08-15 01:57:36 -04:00
parent bf8095ed60
commit f88d9dd340
5 changed files with 69 additions and 12 deletions

View File

@@ -252,6 +252,19 @@ def register():
if valid_affiliation is False:
errors.append("Please provide a shorter affiliation")
from CTFd.models import Fields
fields = {}
for field in Fields.query.all():
fields[field.id] = field
entries = {}
for field_id, field in fields.items():
value = request.form.get(f"field-{field_id}", "").strip()
if field.required is True and (value is None or value == ""):
errors.append("Please enter in all required fields")
entries[field_id] = value
if len(errors) > 0:
return render_template(
"register.html",
@@ -275,6 +288,12 @@ def register():
db.session.commit()
db.session.flush()
from CTFd.models import FieldEntries
for field_id, value in entries.items():
entry = FieldEntries(field_id=field_id, value=value, user_id=user.id)
db.session.add(entry)
db.session.commit()
login_user(user)
if config.can_send_mail() and get_config(

View File

@@ -19,13 +19,13 @@ def RegistrationForm(*args, **kwargs):
fields = []
new_fields = Fields.query.all()
for field in new_fields:
entry = (field.name, getattr(self, field.name))
entry = (field.name, getattr(self, f"field-{field.id}"))
fields.append(entry)
return fields
new_fields = Fields.query.all()
for field in new_fields:
setattr(_RegistrationForm, field.name, StringField(field.name))
setattr(_RegistrationForm, f"field-{field.id}", StringField(field.name))
return _RegistrationForm(*args, **kwargs)

View File

@@ -4,17 +4,34 @@ from wtforms.fields.html5 import DateField, URLField
from CTFd.forms import BaseForm
from CTFd.forms.fields import SubmitField
from CTFd.utils.countries import SELECT_COUNTRIES_LIST
from CTFd.models import Fields
class SettingsForm(BaseForm):
name = StringField("User Name")
email = StringField("Email")
password = PasswordField("Password")
confirm = PasswordField("Current Password")
affiliation = StringField("Affiliation")
website = URLField("Website")
country = SelectField("Country", choices=SELECT_COUNTRIES_LIST)
submit = SubmitField("Submit")
def SettingsForm(*args, **kwargs):
class _SettingsForm(BaseForm):
name = StringField("User Name")
email = StringField("Email")
password = PasswordField("Password")
confirm = PasswordField("Current Password")
affiliation = StringField("Affiliation")
website = URLField("Website")
country = SelectField("Country", choices=SELECT_COUNTRIES_LIST)
submit = SubmitField("Submit")
@property
def extra(self):
fields = []
new_fields = Fields.query.all()
for field in new_fields:
entry = (field.name, getattr(self, f"field-{field.id}"))
fields.append(entry)
return fields
new_fields = Fields.query.all()
for field in new_fields:
setattr(_SettingsForm, f"field-{field.id}", StringField(field.name))
return _SettingsForm(*args, **kwargs)
class TokensForm(BaseForm):

View File

@@ -813,3 +813,14 @@ class Fields(db.Model):
class UserFields(Comments):
__mapper_args__ = {"polymorphic_identity": "user"}
class FieldEntries(db.Model):
__tablename__ = "field_entries"
id = db.Column(db.Integer, primary_key=True)
value = db.Column(db.Text)
field_id = db.Column(db.Integer, db.ForeignKey("fields.id", ondelete="CASCADE"))
user_id = db.Column(db.Integer, db.ForeignKey("users.id", ondelete="CASCADE"))
user = db.relationship("Users", foreign_keys="FieldEntries.user_id")
field = db.relationship("Fields", foreign_keys="FieldEntries.field_id")

View File

@@ -60,6 +60,16 @@
{{ form.country(class="form-control custom-select", value=country) }}
</div>
<hr>
{% for k, v in form.extra %}
<div class="form-group">
<b>{{ v.label }}</b>
{{ v(class="form-control") }}
</div>
{% endfor %}
<div id="results" class="form-group">
</div>