SRNI-2005/ctf
0
1from flask_babel import lazy_gettext as _l2from wtforms import (3 FileField,4 HiddenField,5 IntegerField,6 PasswordField,7 RadioField,8 SelectField,9 StringField,10 TextAreaField,11)12from wtforms.fields.html5 import EmailField13from wtforms.validators import InputRequired14from wtforms.widgets.html5 import NumberInput15 16from CTFd.constants.config import (17 AccountVisibilityTypes,18 ChallengeVisibilityTypes,19 RegistrationVisibilityTypes,20 ScoreVisibilityTypes,21)22from CTFd.constants.themes import DEFAULT_THEME23from CTFd.forms import BaseForm24from CTFd.forms.fields import SubmitField25from CTFd.utils.config import get_themes26 27 28class SetupForm(BaseForm):29 ctf_name = StringField(30 _l("Event Name"), description=_l("The name of your CTF event/workshop")31 )32 ctf_description = TextAreaField(33 _l("Event Description"), description=_l("Description for the CTF")34 )35 user_mode = RadioField(36 _l("User Mode"),37 choices=[("teams", _l("Team Mode")), ("users", _l("User Mode"))],38 default="teams",39 description=_l(40 "Controls whether users join together in teams to play (Team Mode) or play as themselves (User Mode)"41 ),42 validators=[InputRequired()],43 )44 45 name = StringField(46 _l("Admin Username"),47 description=_l("Your username for the administration account"),48 validators=[InputRequired()],49 )50 email = EmailField(51 _l("Admin Email"),52 description=_l("Your email address for the administration account"),53 validators=[InputRequired()],54 )55 password = PasswordField(56 _l("Admin Password"),57 description=_l("Your password for the administration account"),58 validators=[InputRequired()],59 )60 61 ctf_logo = FileField(62 _l("Logo"),63 description=_l(64 "Logo to use for the website instead of a CTF name. Used as the home page button. Optional."65 ),66 )67 ctf_banner = FileField(68 _l("Banner"), description=_l("Banner to use for the homepage. Optional.")69 )70 ctf_small_icon = FileField(71 _l("Small Icon"),72 description=_l(73 "favicon used in user's browsers. Only PNGs accepted. Must be 32x32px. Optional."74 ),75 )76 ctf_theme = SelectField(77 _l("Theme"),78 description=_l("CTFd Theme to use. Can be changed later."),79 choices=list(zip(get_themes(), get_themes())),80 default=DEFAULT_THEME,81 validators=[InputRequired()],82 )83 theme_color = HiddenField(84 _l("Theme Color"),85 description=_l(86 "Color used by theme to control aesthetics. Requires theme support. Optional."87 ),88 )89 90 verify_emails = SelectField(91 _l("Verify Emails"),92 description="Control whether users must confirm their email addresses before participating",93 choices=[("true", "Enabled"), ("false", "Disabled")],94 default="false",95 )96 team_size = IntegerField(97 widget=NumberInput(min=0),98 description="Amount of users per team (Teams mode only) Optional.",99 )100 challenge_visibility = SelectField(101 "Challenge Visibility",102 description="Control whether users must be logged in to see challenges",103 choices=[104 (ChallengeVisibilityTypes.PUBLIC, "Public"),105 (ChallengeVisibilityTypes.PRIVATE, "Private"),106 (ChallengeVisibilityTypes.ADMINS, "Admins Only"),107 ],108 default=ChallengeVisibilityTypes.PRIVATE,109 )110 account_visibility = SelectField(111 "Account Visibility",112 description="Control whether accounts (users & teams) are shown to everyone, only to authenticated users, or only to admins",113 choices=[114 (AccountVisibilityTypes.PUBLIC, "Public"),115 (AccountVisibilityTypes.PRIVATE, "Private"),116 (AccountVisibilityTypes.ADMINS, "Admins Only"),117 ],118 default=AccountVisibilityTypes.PUBLIC,119 )120 score_visibility = SelectField(121 "Score Visibility",122 description="Control whether solves/score are shown to the public, to logged in users, hidden to all non-admins, or only shown to admins",123 choices=[124 (ScoreVisibilityTypes.PUBLIC, "Public"),125 (ScoreVisibilityTypes.PRIVATE, "Private"),126 (ScoreVisibilityTypes.HIDDEN, "Hidden"),127 (ScoreVisibilityTypes.ADMINS, "Admins Only"),128 ],129 default=AccountVisibilityTypes.PUBLIC,130 )131 registration_visibility = SelectField(132 "Registration Visibility",133 description="Control whether registration is enabled for everyone or disabled",134 choices=[135 (RegistrationVisibilityTypes.PUBLIC, "Public"),136 (RegistrationVisibilityTypes.PRIVATE, "Private"),137 (RegistrationVisibilityTypes.MLC, "MajorLeagueCyber Only"),138 ],139 default=RegistrationVisibilityTypes.PUBLIC,140 )141 142 start = StringField(143 _l("Start Time"),144 description=_l("Time when your CTF is scheduled to start. Optional."),145 )146 end = StringField(147 _l("End Time"),148 description=_l("Time when your CTF is scheduled to end. Optional."),149 )150 151 social_shares = SelectField(152 _l("Social Shares"),153 description="Control whether users can share links commemorating their challenge solves",154 choices=[("true", "Enabled"), ("false", "Disabled")],155 default="true",156 )157 submit = SubmitField(_l("Finish"))158 