Exemple #1
0
 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
Exemple #3
0
    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)
Exemple #4
0
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")
    ])
Exemple #6
0
class CubeForm(Form):
    name = TextField(validators=[Required()])
    connection = SelectField(validators=[Required()],
                             choices=ObjGenerate('connection', 'slug', 'name'))
    sql = TextAreaField(validators=[Required()], widget=TextSQL())
Exemple #7
0
class SearchForm(Form):
    search = TextField('', [validators.Required("(Required)")])
Exemple #8
0
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()])
Exemple #9
0
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"))
Exemple #10
0
class LoginForm(Form):
    email = TextField('Email', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember_me = BooleanField('Remember me')
Exemple #11
0
class AppNameForm(Form):
    name = TextField('App name', validators=[DataRequired()])
    data_source = HiddenField(validators=[DataRequired()])
Exemple #12
0
class LoginForm(Form):
    username = TextField('Username')
    password = PasswordField('Password')
Exemple #13
0
 class B(A):
     b = TextField()
     c = TextField()
Exemple #14
0
class ValidateDite(Form):
    parent_id = SelectField(choices=[])
    jmeno = TextField("prijmeni",
                      validators=[InputRequired(message="Vyzadovano.")])
Exemple #15
0
    class F(Form):
        class Meta:
            foo = 9

        test = TextField()
Exemple #16
0
 class MyForm(Form):
     strawberry = TextField()
     banana = TextField()
     kiwi = TextField()
Exemple #17
0
 def test_field_adding_disabled(self):
     form = self.F()
     self.assertRaises(TypeError, form.__setitem__, 'foo', TextField())
Exemple #18
0
    class F(Form):
        test = TextField()

        def validate_test(form, field):
            if field.data != 'foobar':
                raise ValidationError('error')
Exemple #19
0
class SparqlForm(Form):
    url = URLField(
        'URL', validators=[url(),
                           DataRequired(), validate_sparql_endpoint])
    graph = TextField('Graph')
Exemple #20
0
class ShippingForm(FlaskForm):
    name = TextField('Name', [InputRequired()])
    email = EmailField('Email', [InputRequired(), Email()])
    address = FormField(AddressForm)
Exemple #21
0
class RegisterForm(Form):
    name = TextField('Full name', validators=[DataRequired()])
    email = TextField('Email', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
Exemple #22
0
class CancelSubscriptionForm(FlaskForm):
    email = TextField('Email', [Email()])
Exemple #23
0
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')
Exemple #24
0
class LoginForm(FlaskForm):
    name = TextField('Name', [validators.DataRequired()])
    password = PasswordField('Password', [validators.DataRequired()])
    login = SubmitField()
Exemple #25
0
class ContactForm(FlaskForm):
    name = TextField('Name', validators=[DataRequired()])
    email = TextField('Email', validators=[DataRequired(), Email()])
    subject = StringField('Subject', validators=[DataRequired()])
    message = TextAreaField('Message', validators=[DataRequired()])
Exemple #26
0
class AdminCreationForm(Form):
    username = TextField('adminUnCreate', [Required()])
    password = PasswordField('adminPwCreate', [Required(), EqualTo('confirm', message='Passwords do not match')])
    confirm = PasswordField('Repeat Password')
Exemple #27
0
class ConnectionForm(Form):
    name = TextField(validators=[Required()])
    connection = TextField(validators=[Required()],
                           description=u"mysql://*****:*****@127.0.0.1/db")
Exemple #28
0
class TeamCreateForm(Form):
    teamname = TextField('teamNameCreate', [Required()])
    teamPassword = PasswordField('adminPwCreate', [Required(), EqualTo('teamConfirm', message='Passwords do not match')])
    teamConfim = PasswordField('Repeat Password')
Exemple #29
0
class DashboardForm(Form):
    name = TextField(validators=[Required()])
    element = SelectMultipleField(
        validators=[Required()],
        choices=ObjGenerate('element', 'slug', 'name'))
Exemple #30
0
class TeamLoginForm(Form):
    username = TextField('teamUnLogin', [Required()])
    password = PasswordField('teamPwLogin', [Required()]) 
Exemple #31
0
class DirForm(Form):
    pointA = TextField('From: ', [validators.Required("(Required)")])
    pointB = TextField('To: ', [validators.Required("(Required)")])
Exemple #32
0
class TeamMemebersForm(Form):
    team_member1 = TextField('teamMem1')
    team_member2 = TextField('teamMem2')
    team_member3 = TextField('teamMem3')
    team_member4 = TextField('teamMem4')
Exemple #33
0
class AdminLoginForm(Form):
    username = TextField('adminUnLogin', [Required()])
    password = PasswordField('adminPwLogin', [Required()]) 
Exemple #34
0
class ShortLinkForm(Form):
    short_link = TextField('ShortLink', validators=[Required()])
    url = TextField('URL', validators=[Required()])
Exemple #35
0
 def process_data(self, value):
     TextField.process_data(self, value)
Exemple #36
0
 def __init__(self, *args, **kwargs):
     if "allow_blank" in kwargs:
         del kwargs["allow_blank"]
     TextField.__init__(self, *args, **kwargs)