From 35a0eba910468e6e2f6e64452c5a86e910f0ca93 Mon Sep 17 00:00:00 2001 From: Jonathan Styles Date: Mon, 19 Aug 2024 16:29:38 -0400 Subject: [PATCH] Update db schema and require surname --- app/forms/2.json | 231 +++++++++-------- app/forms/edit.json | 237 +++++++++--------- app/forms/ethics_form.json | 4 +- app/forms/ethics_form_midway.json | 170 ++++++------- app/forms/non_ucf.json | 187 +++++++------- .../versions/4875f19211ae_add_ucf_student.py | 31 +++ app/models/user.py | 1 + app/templates/profile.html | 6 +- app/util/forms.py | 2 + 9 files changed, 467 insertions(+), 402 deletions(-) create mode 100644 app/migrations/versions/4875f19211ae_add_ucf_student.py diff --git a/app/forms/2.json b/app/forms/2.json index bd0e040..1f5116a 100644 --- a/app/forms/2.json +++ b/app/forms/2.json @@ -1,113 +1,122 @@ [ - { - "label": "About You", - "input": "h1", - "elements": [ - { - "label": "We need to know who you are and to see if you are a Knight.", - "input": "p" - }, - { - "label": "First Name", - "caption": "Your (preferred) first name.", - "input": "text", - "key": "first_name", - "required": true - }, - { - "label": "Surname", - "caption": "The rest of your name, including middle name if you have one, and your last name.", - "input": "text", - "key": "surname" - }, - { - "label": "Preferred Email", - "caption": "We’ll use this to reach out to you if we need to.", - "input": "email", - "key": "email", - "required": true - }, - { - "label": "NID", - "caption": "This is the UCF identifier with two letters and six numbers. It's in your school email!", - "input": "nid", - "key": "nid", - "required": true - }, - { - "label": "Are You Returning?", - "caption": "If so, welcome back! If not, welcome to Hack@UCF!", - "input": "radio", - "options": ["Yes", "No"], - "key": "is_returning", - "required": true - }, - { - "label": "Minecraft username", - "caption": "If you have a Minecraft account, put your username here to join our members-only Minecraft server.", - "input": "text", - "key": "minecraft", - "required": false - } - ] - }, - { - "label": "The following are used to get an idea of our demographics:", - "input": "h2", - "elements": [ - { - "label": "Gender", - "input": "radio", - "options": ["Male", "Female", "Other / Prefer Not To Answer"], - "key": "gender", - "required": true - }, - { - "label": "Major", - "input": "dropdown", - "other": true, - "options": [ - "Computer Science", - "Information Technology", - "Computer Engineering", - "Electrical Engineering", - "Digital Forensics", - "Cybersecurity and Privacy" - ], - "key": "major", - "required": true - }, - { - "label": "Class Standing", - "caption": "(by credit hours)", - "input": "dropdown", - "other": true, - "options": [ - "Freshman (0-29 credits)", - "Sophomore (30-59 credits)", - "Junior (60-89 credits)", - "Senior (> 90 credits)", - "Post-Bacc (secondary Bachelors)", - "Master’s", - "PhD" - ], - "key": "class_standing", - "required": true - }, - { - "label": "Shirt Size", - "caption": "Members get a free Hack@UCF t-shirt thanks to our sponsors!", - "input": "radio", - "options": ["S", "M", "L", "XL", "2XL", "3XL"], - "key": "shirt_size", - "required": true - }, - { - "input": "navigation", - "next": "/join/3", - "prev": "/", - "prev_label": "Cancel" - } - ] - } + { + "label": "About You", + "input": "h1", + "elements": [ + { + "label": "We need to know who you are and to see if you are a Knight.", + "input": "p" + }, + { + "label": "First Name", + "caption": "Your (preferred) first name.", + "input": "text", + "key": "first_name", + "required": true + }, + { + "label": "Surname", + "caption": "The rest of your name, including middle name if you have one, and your last name.", + "input": "text", + "key": "surname", + "required": true + }, + { + "label": "Preferred Email", + "caption": "We’ll use this to reach out to you if we need to.", + "input": "email", + "key": "email", + "required": true + }, + { + "label": "Are you a UCF student?", + "caption": "If you are not a student fill out this form instead here.", + "input": "radio", + "options": ["Yes", "No"], + "key": "ucf_student", + "required": true + }, + { + "label": "NID", + "caption": "This is the UCF identifier with two letters and six numbers. It's in your school email!", + "input": "nid", + "key": "nid", + "required": true + }, + { + "label": "Are You Returning?", + "caption": "If so, welcome back! If not, welcome to Hack@UCF!", + "input": "radio", + "options": ["Yes", "No"], + "key": "is_returning", + "required": true + }, + { + "label": "Minecraft username", + "caption": "If you have a Minecraft account, put your username here to join our members-only Minecraft server.", + "input": "text", + "key": "minecraft", + "required": false + } + ] + }, + { + "label": "The following are used to get an idea of our demographics:", + "input": "h2", + "elements": [ + { + "label": "Gender", + "input": "radio", + "options": ["Male", "Female", "Other / Prefer Not To Answer"], + "key": "gender", + "required": true + }, + { + "label": "Major", + "input": "dropdown", + "other": true, + "options": [ + "Computer Science", + "Information Technology", + "Computer Engineering", + "Electrical Engineering", + "Digital Forensics", + "Cybersecurity and Privacy" + ], + "key": "major", + "required": true + }, + { + "label": "Class Standing", + "caption": "(by credit hours)", + "input": "dropdown", + "other": true, + "options": [ + "Freshman (0-29 credits)", + "Sophomore (30-59 credits)", + "Junior (60-89 credits)", + "Senior (> 90 credits)", + "Post-Bacc (secondary Bachelors)", + "Master’s", + "PhD" + ], + "key": "class_standing", + "required": true + }, + { + "label": "Shirt Size", + "caption": "Members get a free Hack@UCF t-shirt thanks to our sponsors!", + "input": "radio", + "options": ["S", "M", "L", "XL", "2XL", "3XL"], + "key": "shirt_size", + "required": true + }, + { + "input": "navigation", + "next": "/join/3", + "prev": "/", + "prev_label": "Cancel" + } + ] + } ] diff --git a/app/forms/edit.json b/app/forms/edit.json index a5101ce..bcc55ba 100644 --- a/app/forms/edit.json +++ b/app/forms/edit.json @@ -1,116 +1,125 @@ [ - { - "label": "Your Personal Information", - "input": "h1", - "elements": [ - { - "label": "First Name", - "caption": "Your (preferred) first name.", - "input": "text", - "key": "first_name", - "required": true - }, - { - "label": "Surname", - "caption": "The rest of your name, including middle name if you have one.", - "input": "text", - "key": "surname" - }, - { - "label": "Preferred Email", - "caption": "We’ll use this to reach out to you if we need to.", - "input": "email", - "key": "email", - "required": true - }, - { - "label": "NID", - "caption": "This is the UCF identifier with two letters and six numbers. It's in your school email!", - "input": "nid", - "key": "nid", - "required": true - }, - { - "label": "Are You Returning?", - "caption": "If so, welcome back! If not, welcome to Hack@UCF!", - "input": "radio", - "options": ["Yes", "No"], - "key": "is_returning", - "required": true - }, - { - "label": "Minecraft username", - "caption": "If you have a Minecraft account, put your username here to join our members-only Minecraft server.", - "input": "text", - "key": "minecraft", - "required": false - } - ] - }, - { - "label": "Demography", - "input": "h2", - "elements": [ - { - "label": "Gender", - "input": "radio", - "options": ["Male", "Female", "Other / Prefer Not To Answer"], - "key": "gender", - "required": true - }, - { - "label": "Major", - "input": "dropdown", - "other": true, - "options": [ - "Computer Science", - "Information Technology", - "Computer Engineering", - "Electrical Engineering", - "Digital Forensics", - "Cybersecurity and Privacy" - ], - "key": "major", - "required": true - }, - { - "label": "Class Standing", - "caption": "(by credit hours)", - "input": "dropdown", - "other": true, - "options": [ - "Freshman (0-29 credits)", - "Sophomore (30-59 credits)", - "Junior (60-89 credits)", - "Senior (> 90 credits)", - "Post-Bacc (secondary Bachelors)", - "Master’s", - "PhD" - ], - "key": "class_standing", - "required": true - }, - { - "label": "Shirt Size", - "caption": "Members get a free Hack@UCF t-shirt thanks to our sponsors!", - "input": "radio", - "options": ["S", "M", "L", "XL", "2XL", "3XL"], - "key": "shirt_size", - "required": true - }, - { - "label": "Cybersecurity Experience", - "caption": "How much do you know about computer security?", - "input": "slider", - "novice_label": "whats a computer?", - "expert_label": "I plead the 5th", - "key": "experience" - }, - { - "input": "navigation", - "next": "/profile/", - "next_label": "Save" - } - ] - } + { + "label": "Your Personal Information", + "input": "h1", + "elements": [ + { + "label": "First Name", + "caption": "Your (preferred) first name.", + "input": "text", + "key": "first_name", + "required": true + }, + { + "label": "Surname", + "caption": "The rest of your name, including middle name if you have one.", + "input": "text", + "key": "surname", + "required": true + }, + { + "label": "Preferred Email", + "caption": "We’ll use this to reach out to you if we need to.", + "input": "email", + "key": "email", + "required": true + }, + { + "label": "NID", + "caption": "This is the UCF identifier with two letters and six numbers. It's in your school email!", + "input": "nid", + "key": "nid", + "required": true + }, + { + "label": "Are you a UCF student?", + "caption": "Are you currently enrolled at UCF?", + "input": "radio", + "options": ["Yes", "No"], + "key": "ucf_student", + "required": true + }, + { + "label": "Are You Returning?", + "caption": "If so, welcome back! If not, welcome to Hack@UCF!", + "input": "radio", + "options": ["Yes", "No"], + "key": "is_returning", + "required": true + }, + { + "label": "Minecraft username", + "caption": "If you have a Minecraft account, put your username here to join our members-only Minecraft server.", + "input": "text", + "key": "minecraft", + "required": false + } + ] + }, + { + "label": "Demography", + "input": "h2", + "elements": [ + { + "label": "Gender", + "input": "radio", + "options": ["Male", "Female", "Other / Prefer Not To Answer"], + "key": "gender", + "required": true + }, + { + "label": "Major", + "input": "dropdown", + "other": true, + "options": [ + "Computer Science", + "Information Technology", + "Computer Engineering", + "Electrical Engineering", + "Digital Forensics", + "Cybersecurity and Privacy" + ], + "key": "major", + "required": true + }, + { + "label": "Class Standing", + "caption": "(by credit hours)", + "input": "dropdown", + "other": true, + "options": [ + "Freshman (0-29 credits)", + "Sophomore (30-59 credits)", + "Junior (60-89 credits)", + "Senior (> 90 credits)", + "Post-Bacc (secondary Bachelors)", + "Master’s", + "PhD" + ], + "key": "class_standing", + "required": true + }, + { + "label": "Shirt Size", + "caption": "Members get a free Hack@UCF t-shirt thanks to our sponsors!", + "input": "radio", + "options": ["S", "M", "L", "XL", "2XL", "3XL"], + "key": "shirt_size", + "required": true + }, + { + "label": "Cybersecurity Experience", + "caption": "How much do you know about computer security?", + "input": "slider", + "novice_label": "whats a computer?", + "expert_label": "I plead the 5th", + "key": "experience" + }, + { + "input": "navigation", + "next": "/profile/", + "next_label": "Save" + } + ] + } ] diff --git a/app/forms/ethics_form.json b/app/forms/ethics_form.json index 5a8e39d..df5fcfe 100644 --- a/app/forms/ethics_form.json +++ b/app/forms/ethics_form.json @@ -12,7 +12,7 @@ "input": "p" }, { - "label": "Specifically, I promise NOT to do the following:", + "label": "Specifically, I agree to the following terms:", "input": "h3" }, @@ -69,7 +69,7 @@ "caption": "I have read and agree to the Hack@UCF Cloud Acceptable Use Policy located at here ", "input": "radio", "required": true, - "options": ["I promise not to do this."], + "options": ["I have read the terms and agree to them."], "key": "ethics_form.cloud_aup" }, { diff --git a/app/forms/ethics_form_midway.json b/app/forms/ethics_form_midway.json index d27cc4f..f37b78d 100644 --- a/app/forms/ethics_form_midway.json +++ b/app/forms/ethics_form_midway.json @@ -1,90 +1,90 @@ [ - { - "label": "Ethics Form", - "input": "h2", - "elements": [ - { - "label": "All participants of Hack@UCF (both members and non-members attending meetings) must agree to the tenats of the Ethics Form", - "input": "p" - }, - { - "label": "I am joining this organization to enhance my computer security skills and acquire knowledge. I vow to use my skills and knowledge for non-criminal enterprises in keeping with UCF policy.", - "input": "p" - }, - { - "label": "Specifically, I promise NOT to do the following:", - "input": "h3" - }, + { + "label": "Ethics Form", + "input": "h2", + "elements": [ + { + "label": "All participants of Hack@UCF (both members and non-members attending meetings) must agree to the tenats of the Ethics Form", + "input": "p" + }, + { + "label": "I am joining this organization to enhance my computer security skills and acquire knowledge. I vow to use my skills and knowledge for non-criminal enterprises in keeping with UCF policy.", + "input": "p" + }, + { + "label": "Specifically, I promise NOT to do the following:", + "input": "h3" + }, - { - "caption": "Use UCF resources and/or facilities to gain or attempt to gain unauthorized access to remote computers or networks.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.hack_others" - }, - { - "caption": "Deliberately perform an act which will seriously impact the operation of computers, peripherals, or networks that I do not own (including UCF's). This includes, but is not limited to, tampering with components of a network or otherwise blocking communication lines (Denial of Service attacks), or interfering with the operational readiness of a computer without permission.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.hack_ucf" - }, - { - "caption": "Generate excessive traffic on the UCF network in so much that it interferes with another user's ability to utilize the network.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.interrupt_ucf" - }, - { - "caption": "Attempt to masquerade as another UCF user, hide my identity, or attempt to monitor UCF network traffic.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.manip_traffic" - }, - { - "caption": "Use any IP address on the UCF network except that which has been automatically assigned to me via DHCP.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.bypass_dhcp" - }, - { - "caption": "Stream, download, upload, or transmit via other means, any materials that you are not legally licensed to or have specific permission to duplicate and/or share under protection of Copyright.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.pirate" - }, - { - "caption": "Run a server (FTP, HTTP, IRC, etc) on the UCF open-use network.", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.host_at_ucf" - }, - { - "caption": "I have read and agree to the Hack@UCF Cloud Acceptable Use Policy located at here ", - "input": "radio", - "required": true, - "options": ["I promise not to do this."], - "key": "ethics_form.cloud_aup" - }, + { + "caption": "Use UCF resources and/or facilities to gain or attempt to gain unauthorized access to remote computers or networks.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.hack_others" + }, + { + "caption": "Deliberately perform an act which will seriously impact the operation of computers, peripherals, or networks that I do not own (including UCF's). This includes, but is not limited to, tampering with components of a network or otherwise blocking communication lines (Denial of Service attacks), or interfering with the operational readiness of a computer without permission.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.hack_ucf" + }, + { + "caption": "Generate excessive traffic on the UCF network in so much that it interferes with another user's ability to utilize the network.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.interrupt_ucf" + }, + { + "caption": "Attempt to masquerade as another UCF user, hide my identity, or attempt to monitor UCF network traffic.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.manip_traffic" + }, + { + "caption": "Use any IP address on the UCF network except that which has been automatically assigned to me via DHCP.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.bypass_dhcp" + }, + { + "caption": "Stream, download, upload, or transmit via other means, any materials that you are not legally licensed to or have specific permission to duplicate and/or share under protection of Copyright.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.pirate" + }, + { + "caption": "Run a server (FTP, HTTP, IRC, etc) on the UCF open-use network.", + "input": "radio", + "required": true, + "options": ["I promise not to do this."], + "key": "ethics_form.host_at_ucf" + }, + { + "caption": "I have read and agree to the Hack@UCF Cloud Acceptable Use Policy located at here ", + "input": "radio", + "required": true, + "options": ["I have read the terms and agree to them."], + "key": "ethics_form.cloud_aup" + }, - { - "input": "signature", - "key": "ethics_form.signtime" - }, + { + "input": "signature", + "key": "ethics_form.signtime" + }, - { - "input": "navigation", - "next": "/pay", - "prev": "/join/3", - "prev_label": "Back", - "next_label": "Sign and Continue" - } - ] - } + { + "input": "navigation", + "next": "/pay", + "prev": "/join/3", + "prev_label": "Back", + "next_label": "Sign and Continue" + } + ] + } ] diff --git a/app/forms/non_ucf.json b/app/forms/non_ucf.json index 94e45e5..bae0958 100644 --- a/app/forms/non_ucf.json +++ b/app/forms/non_ucf.json @@ -1,91 +1,100 @@ [ - { - "label": "Non-UCF Student Membership", - "input": "h1", - "elements": [ - { - "label": "Hack@UCF does allow limited membership to non-UCF students and alumni in order to fulfill our mission. However, some benefits may be limited, including the right to vote and hold an executive office position.", - "input": "p" - } - ] - }, - { - "label": "About You", - "input": "h1", - "elements": [ - { - "label": "We need to know who you are.", - "input": "p" - }, - { - "label": "First Name", - "caption": "Your (preferred) first name.", - "input": "text", - "key": "first_name", - "required": true - }, - { - "label": "Surname", - "caption": "The rest of your name, including middle name if you have one, and your last name.", - "input": "text", - "key": "surname" - }, - { - "label": "Preferred Email", - "caption": "We’ll use this to reach out to you if we need to.", - "input": "email", - "key": "email", - "required": true - }, - { - "label": "Home School", - "caption": "What school are you from? If you are not in school right now, put down your alma mater.", - "input": "text", - "key": "class_standing", - "required": true - }, - { - "label": "Are You Returning?", - "caption": "If so, welcome back! If not, welcome to Hack@UCF!", - "input": "radio", - "options": ["Yes", "No"], - "key": "is_returning", - "required": true - }, - { - "label": "Minecraft username", - "caption": "If you have a Minecraft account, put your username here to join our members-only Minecraft server.", - "input": "text", - "key": "minecraft", - "required": false - } - ] - }, - { - "label": "The following are used to get an idea of our demographics:", - "input": "h2", - "elements": [ - { - "label": "Gender", - "input": "radio", - "options": ["Male", "Female", "Other / Prefer Not To Answer"], - "key": "gender", - "required": true - }, - { - "label": "Shirt Size", - "caption": "Members get a free Hack@UCF t-shirt thanks to our sponsors!", - "input": "radio", - "options": ["S", "M", "L", "XL", "2XL", "3XL"], - "key": "shirt_size", - "required": true - }, - { - "input": "navigation", - "next": "/join/3", - "prev": "/", - "prev_label": "Cancel" - } - ] - } + { + "label": "Non-UCF Student Membership", + "input": "h1", + "elements": [ + { + "label": "Hack@UCF does allow limited membership to non-UCF students and alumni in order to fulfill our mission. However, some benefits may be limited, including the right to vote and hold an executive office position.", + "input": "p" + } + ] + }, + { + "label": "About You", + "input": "h1", + "elements": [ + { + "label": "We need to know who you are.", + "input": "p" + }, + { + "label": "First Name", + "caption": "Your (preferred) first name.", + "input": "text", + "key": "first_name", + "required": true + }, + { + "label": "Surname", + "caption": "The rest of your name, including middle name if you have one, and your last name.", + "input": "text", + "key": "surname", + "required": true + }, + { + "label": "Are you a UCF student?", + "caption": "If the answer is no, you are in the right place.", + "input": "radio", + "options": ["Yes", "No"], + "key": "ucf_student", + "required": true + }, + { + "label": "Preferred Email", + "caption": "We’ll use this to reach out to you if we need to.", + "input": "email", + "key": "email", + "required": true + }, + { + "label": "Home School", + "caption": "What school are you from? If you are not in school right now, put down your alma mater.", + "input": "text", + "key": "class_standing", + "required": true + }, + { + "label": "Are You Returning?", + "caption": "If so, welcome back! If not, welcome to Hack@UCF!", + "input": "radio", + "options": ["Yes", "No"], + "key": "is_returning", + "required": true + }, + { + "label": "Minecraft username", + "caption": "If you have a Minecraft account, put your username here to join our members-only Minecraft server.", + "input": "text", + "key": "minecraft", + "required": false + } + ] + }, + { + "label": "The following are used to get an idea of our demographics:", + "input": "h2", + "elements": [ + { + "label": "Gender", + "input": "radio", + "options": ["Male", "Female", "Other / Prefer Not To Answer"], + "key": "gender", + "required": true + }, + { + "label": "Shirt Size", + "caption": "Members get a free Hack@UCF t-shirt thanks to our sponsors!", + "input": "radio", + "options": ["S", "M", "L", "XL", "2XL", "3XL"], + "key": "shirt_size", + "required": true + }, + { + "input": "navigation", + "next": "/join/3", + "prev": "/", + "prev_label": "Cancel" + } + ] + } ] diff --git a/app/migrations/versions/4875f19211ae_add_ucf_student.py b/app/migrations/versions/4875f19211ae_add_ucf_student.py new file mode 100644 index 0000000..b391208 --- /dev/null +++ b/app/migrations/versions/4875f19211ae_add_ucf_student.py @@ -0,0 +1,31 @@ +"""Add UCF student + +Revision ID: 4875f19211ae +Revises: 2b1a94ac1009 +Create Date: 2024-08-19 15:51:06.850670 + +""" + +from typing import Sequence, Union + +import sqlalchemy as sa +import sqlmodel +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "4875f19211ae" +down_revision: Union[str, None] = "2b1a94ac1009" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column("usermodel", sa.Column("ucf_student", sa.Boolean(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("usermodel", "ucf_student") + # ### end Alembic commands ### diff --git a/app/models/user.py b/app/models/user.py index 7a6d154..63546d6 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -44,6 +44,7 @@ class UserModel(SQLModel, table=True): nid: Optional[str] = Field(unique=True, default=None) ops_email: Optional[str] = None infra_email: Optional[str] = None + ucf_student: Optional[bool] = True minecraft: Optional[str] = "" github: Optional[str] = "" first_name: Optional[str] = "" diff --git a/app/templates/profile.html b/app/templates/profile.html index a8b14f8..d07d716 100644 --- a/app/templates/profile.html +++ b/app/templates/profile.html @@ -63,19 +63,23 @@

Preferred Email

NID

{{ user_data.get('nid', 'Unknown') }}
+ {% if user_data.get('ucf_id', False) %}

UCF ID

{{ user_data.get('ucf_id') if user_data.get('ucf_id', False) else 'Not Collected' }}
+ {% endif %}

Minecraft Username

{{ user_data.get('minecraft', 'Not Collected') }}
- + {% if user_data.get('github', False) %}

GitHub Username

{{ user_data.get('github', 'Not Collected') }}
+ {% endif %} +

Membership Status

diff --git a/app/util/forms.py b/app/util/forms.py index b4767f6..b65ab9c 100644 --- a/app/util/forms.py +++ b/app/util/forms.py @@ -43,6 +43,8 @@ def fuzzy_parse_value(value): return False if "i promise not" in value_test: return True + if "i have read the terms and agree to them" in value_test: + return True # Convert other types as needed