def __init__(self, *args, **kwargs): if "allow_blank" in kwargs: del kwargs["allow_blank"] if "slider_view_endpoint" in kwargs: self.slider_view_endpoint = kwargs["slider_view_endpoint"] del kwargs["slider_view_endpoint"] TextField.__init__(self, *args, **kwargs)
def entry_form(self): ''' create an entry form for manager use ''' if not hasattr(self, 'form'): class_name = 'ContentEntryForm' class_parents = (Form,) attributes = {} form = type(class_name, (Form,), {}) title_field = TextField('Title', [Required('Title is required')]) title_field.bind(form, 'content_entry_title') setattr(form, 'content_entry_title', title_field) slug_field = TextField('Slug', [Required('Slug is required')]) slug_field.bind(form, 'content_entry_slug') setattr(form, 'content_entry_slug', slug_field) tag_field = TextField('Tags') tag_field.bind(form, 'content_entry_tag') setattr(form, 'content_entry_tag', tag_field) status_field = SelectField('Status', choices=self.status_options) status_field.bind(form, 'content_entry_status') setattr(form, 'content_entry_status', status_field) save_field = SubmitField('Save') save_field.bind(form, 'content_entry_save') setattr(form, 'content_entry_save', save_field) delete_field = SubmitField('Delete') delete_field.bind(form, 'content_entry_delete') setattr(form, 'content_entry_delete', delete_field) field_groups = [] for group in self.field_groups: if group.fields: field_group = {'uuid': group.uuid, 'name': group.name, 'fields': []} for field in group.fields: form_field = field.field(field.name) form_field.bind(form, field.name) setattr(form, field.name, form_field) field_group['fields'].append(field.name) field_groups.append(field_group) attributes['_field_groups'] = field_groups self.form = form self.form._field_groups = field_groups return self.form
def __init__(self, *args, **kwargs): try: self.private_key = current_app.config['WTF_HONEY_POT_PRIVATE_KEY'] except KeyError: raise RuntimeError("No WTF_HONEY_POT_PRIVATE_KEY config set") self.timeout = current_app.config.get('WTF_HONEY_POT_TIMEOUT', 300) self.unbound_field = TextField(self.random()) self.entrie_count = randint(1, 5) super(HoneyPotField, self).__init__(*args, **kwargs)
class HoneyPotField(Field): """ The HoneyPotField """ widget = widgets.HoneyPotWidget() def __init__(self, *args, **kwargs): try: self.private_key = current_app.config['WTF_HONEY_POT_PRIVATE_KEY'] except KeyError: raise RuntimeError("No WTF_HONEY_POT_PRIVATE_KEY config set") self.timeout = current_app.config.get('WTF_HONEY_POT_TIMEOUT', 300) self.unbound_field = TextField(self.random()) self.entrie_count = randint(1, 5) super(HoneyPotField, self).__init__(*args, **kwargs) def random(self): return ''.join(choice(string.ascii_lowercase + string.digits) for _ in range(randint(5,12))) @property def short_name(self): return self.random() @short_name.setter def short_name(self, value): pass @property def style(self): return choice(RANDOM_STYLES) def process(self, formdata, data=_unset_value): self.entries = [] if formdata: indices = sorted(set(self._extract_indices(HONEY_POT_PREFIX, formdata))) for name in indices: try: obj_data = formdata[name] except StopIteration: obj_data = u'' self._add_entry(formdata, obj_data, name=name) else: self.reset_honeypot(formdata) def validate(self, form, extra_validators=tuple()): success = True try: control_field = self._get_control_field() except ValueError: return False if not self.data or not control_field.data: success = False for entrie in self.entries: if entrie.data and not entrie.name.startswith(self.get_control_prefix()): success = False # No need to continue the trap is caught break current_time = int(control_field.name[9:]) success = success and self.validate_time(current_time) success = success and control_field.data == self.hash_entries(current_time) # If the honey_pot caught a bot or a bear resetting the trap if not success: self.reset_honeypot(None) return success def hash_entries(self, current_time): names = [str(current_time), self.private_key] for entrie in self.entries: if not entrie.name.startswith(self.get_control_prefix()): names.append(entrie.name) name_values = u''.join(sorted(names)) return unicode(sha256(name_values).hexdigest()) def validate_time(self, epoch): now = datetime.now() try: then = datetime.fromtimestamp(epoch) except Exception: return False else: window = timedelta(seconds=self.timeout) if (then + window) < now: return False return True def reset_honeypot(self, formdata): self.entries = [] while len(self.entries) < self.entrie_count: self._add_entry(formdata, None) # Adding control form element self._add_control_field(formdata) @classmethod def get_control_prefix(self): return '{0}_{1}_'.format(HONEY_POT_PREFIX, 'check') def _get_epoch(self): """ Function to help unittest """ return datetime.now().strftime('%s') def _add_control_field(self, formdata): """ Create control field to validate honeypot """ current_time = self._get_epoch() value = self.hash_entries(current_time) self._add_entry(formdata=formdata, data=value, name="{0}{1}".format(self.get_control_prefix(), current_time)) def _get_control_field(self): control_fields = [entrie for entrie in self.entries if entrie.name.startswith(self.get_control_prefix())] if len(control_fields) != 1: raise ValueError('Must one control_field') return control_fields[0] def _extract_indices(self, prefix, formdata): """ Yield all the names given the honey pot prefix. This will yeild all the fields example hp_vazzg or hp_2gpkdef3ch """ for k in formdata: if k.startswith(prefix): yield k def _add_entry(self, formdata=None, data=_unset_value, name=None, identifier=None): name = name if name else 'hp_' + self.random() identifier = identifier if identifier else self.random() field = self.unbound_field.bind(form=None, name=name, id=identifier) field.process(formdata, data) self.entries.append(field) return field def __iter__(self): return iter(self.entries) def __len__(self): return len(self.entries) def __getitem__(self, index): return self.entries[index] @property def data(self): return [f.data for f in self.entries]
class EmailForm(Form): email = TextField('Email Address', validators=[ Email(message="Please enter a valid email address"), InputRequired(message="You can't leave this empty") ])
class CubeForm(Form): name = TextField(validators=[Required()]) connection = SelectField(validators=[Required()], choices=ObjGenerate('connection', 'slug', 'name')) sql = TextAreaField(validators=[Required()], widget=TextSQL())
class SearchForm(Form): search = TextField('', [validators.Required("(Required)")])
class ProfileForm(Form): first_name = TextField('First Name', validators=[Required()]) last_name = TextField('Last Name', validators=[Required()]) # evil, don't do this image = TextField('Image', validators=[Required(), Email()])
class UserNewForm(Form): """ 新建 User 的表单 """ username = TextField(_("user.username"), description=u'用户名', validators=[ required(message=_("username is required")), length(min=2, max=20, message=_("Length range: 2 - 20")) ]) nickname = TextField(_("user.nickname"), description=u'昵称', validators=[ required(message=_("nickname is required")), length(min=2, max=20, message=_("Length range: 2 - 20")) ]) password = PasswordField(_("user.password"), description=u'密码', validators=[ required(message=_("password is required")), length(min=6, max=20, message=_("Length range: 6 - 20")) ]) email = TextField(_("user.email"), description=u'邮箱', validators=[ email(message=_("email is not a valid email")), required(message=_("email is required")), length(min=6, max=50, message=_("Length range: 6 - 50")) ]) homepage = TextField(_("user.homepage"), description=u'个人主页', validators=[ url(message=_("homepage is not a valid URL")), length(min=11, max=50, message=_("Length range: 11 - 50")) ]) avatar = TextField(_("user.avatar"), description=u'头像', validators=[ url(message=_("avatar is not a valid URL")), length(min=11, max=50, message=_("Length range: 11 - 50")) ]) gender = SelectField(_("user.gender"), description=u'性别:0-保密、1-男、2-女', choices=[('0', u'保密'), ('1', u'男'), ('2', u'女')], validators=[ required(message=_("gender is required")), ]) role = SelectField(_("user.role"), description=u'用户角色', choices=[('0', u'受限的'), ('10', u'普通会员'), ('11', u'热心会员'), ('12', u'支柱会员'), ('13', u'资深会员'), ('100', u'合作伙伴'), ('1000', u'编辑'), ('2000', u'版主、仲裁者'), ('10000', u'管理员'), ('10100', u'高级管理员')], validators=[ required(message=_("role is required")), ]) rank = TextField(_("user.rank"), description=u'用户头衔', validators=[ required(message=_("rank is required")), ]) bio = TextField(_("user.bio"), description=u'自我介绍', validators=[ length(min=1, max=200, message=_("Length range: 1 - 200")) ]) interest = TextField(_("user.interest"), description=u'研究领域/兴趣范围(多个用,分开)', validators=[]) user_status = SelectField( _("user.user_status"), description=u'用户状态:0-未激活、100:被禁止、101:被禁言、1-正常', choices=[('0', u'未激活'), ('1', u'正常'), ('100', u'被禁止'), ('101', u'被禁言')], validators=[ required(message=_("user_status is required")), ]) def validate_username(self, field): # unique pass def validate_email(self, field): # unique pass next = HiddenField() submit = SubmitField(_("Submit"))
class LoginForm(Form): email = TextField('Email', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) remember_me = BooleanField('Remember me')
class AppNameForm(Form): name = TextField('App name', validators=[DataRequired()]) data_source = HiddenField(validators=[DataRequired()])
class LoginForm(Form): username = TextField('Username') password = PasswordField('Password')
class B(A): b = TextField() c = TextField()
class ValidateDite(Form): parent_id = SelectField(choices=[]) jmeno = TextField("prijmeni", validators=[InputRequired(message="Vyzadovano.")])
class F(Form): class Meta: foo = 9 test = TextField()
class MyForm(Form): strawberry = TextField() banana = TextField() kiwi = TextField()
def test_field_adding_disabled(self): form = self.F() self.assertRaises(TypeError, form.__setitem__, 'foo', TextField())
class F(Form): test = TextField() def validate_test(form, field): if field.data != 'foobar': raise ValidationError('error')
class SparqlForm(Form): url = URLField( 'URL', validators=[url(), DataRequired(), validate_sparql_endpoint]) graph = TextField('Graph')
class ShippingForm(FlaskForm): name = TextField('Name', [InputRequired()]) email = EmailField('Email', [InputRequired(), Email()]) address = FormField(AddressForm)
class RegisterForm(Form): name = TextField('Full name', validators=[DataRequired()]) email = TextField('Email', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()])
class CancelSubscriptionForm(FlaskForm): email = TextField('Email', [Email()])
class AndroidAppForm(Form): app_name = TextField('App name', validators=[DataRequired()]) package = TextField('Java package', validators=[DataRequired(), validate_java_package]) launcher_icon = FileField('Launcher icon') app_logo = FileField('Application logo')
class LoginForm(FlaskForm): name = TextField('Name', [validators.DataRequired()]) password = PasswordField('Password', [validators.DataRequired()]) login = SubmitField()
class ContactForm(FlaskForm): name = TextField('Name', validators=[DataRequired()]) email = TextField('Email', validators=[DataRequired(), Email()]) subject = StringField('Subject', validators=[DataRequired()]) message = TextAreaField('Message', validators=[DataRequired()])
class AdminCreationForm(Form): username = TextField('adminUnCreate', [Required()]) password = PasswordField('adminPwCreate', [Required(), EqualTo('confirm', message='Passwords do not match')]) confirm = PasswordField('Repeat Password')
class ConnectionForm(Form): name = TextField(validators=[Required()]) connection = TextField(validators=[Required()], description=u"mysql://*****:*****@127.0.0.1/db")
class TeamCreateForm(Form): teamname = TextField('teamNameCreate', [Required()]) teamPassword = PasswordField('adminPwCreate', [Required(), EqualTo('teamConfirm', message='Passwords do not match')]) teamConfim = PasswordField('Repeat Password')
class DashboardForm(Form): name = TextField(validators=[Required()]) element = SelectMultipleField( validators=[Required()], choices=ObjGenerate('element', 'slug', 'name'))
class TeamLoginForm(Form): username = TextField('teamUnLogin', [Required()]) password = PasswordField('teamPwLogin', [Required()])
class DirForm(Form): pointA = TextField('From: ', [validators.Required("(Required)")]) pointB = TextField('To: ', [validators.Required("(Required)")])
class TeamMemebersForm(Form): team_member1 = TextField('teamMem1') team_member2 = TextField('teamMem2') team_member3 = TextField('teamMem3') team_member4 = TextField('teamMem4')
class AdminLoginForm(Form): username = TextField('adminUnLogin', [Required()]) password = PasswordField('adminPwLogin', [Required()])
class ShortLinkForm(Form): short_link = TextField('ShortLink', validators=[Required()]) url = TextField('URL', validators=[Required()])
def process_data(self, value): TextField.process_data(self, value)
def __init__(self, *args, **kwargs): if "allow_blank" in kwargs: del kwargs["allow_blank"] TextField.__init__(self, *args, **kwargs)