Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EncryptedCharField doesn't validate length #17

Open
dustinlacewell opened this issue Feb 24, 2012 · 1 comment
Open

EncryptedCharField doesn't validate length #17

dustinlacewell opened this issue Feb 24, 2012 · 1 comment

Comments

@dustinlacewell
Copy link

Instead of raising a validationerror at the appropriate time, a ValueError is raised at save time:

Traceback:
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
  92.                 response = callback(request, *callback_args, **callback_kwargs)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/contrib/admin/options.py" in wrapper
  226.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/contrib/admin/sites.py" in inner
  186.             return view(request, *args, **kwargs)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/db/transaction.py" in _commit_on_success
  240.                 res = func(*args, **kw)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/contrib/admin/options.py" in change_view
  833.                     self.save_formset(request, form, formset, change=True)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/contrib/admin/options.py" in save_formset
  563.         formset.save()
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/forms/models.py" in save
  522.         return self.save_existing_objects(commit) + self.save_new_objects(commit)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/forms/models.py" in save_existing_objects
  640.                 saved_instances.append(self.save_existing(form, obj, commit=commit))
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/forms/models.py" in save_existing
  510.         return form.save(commit=commit)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/forms/models.py" in save
  407.                              fail_message, commit, exclude=self._meta.exclude)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/forms/models.py" in save_instance
  78.         instance.save()
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/db/models/base.py" in save
  410.         self.save_base(force_insert=force_insert, force_update=force_update)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/db/models/base.py" in save_base
  474.                         rows = manager.filter(pk=pk_val)._update(values)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/db/models/query.py" in _update
  442.         query.add_update_fields(values)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/db/models/sql/subqueries.py" in add_update_fields
  245.                 val = field.get_db_prep_save(val)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django/db/models/fields/__init__.py" in get_db_prep_save
  192.         return self.get_db_prep_value(value)
File "/iscape/sites/ahcdeploy/lib/python2.5/site-packages/django_fields/fields.py" in get_db_prep_value
  106.                     str(len(value)) + " > " + str(self.unencrypted_length))

Exception Type: ValueError at /admin/cne/registration/1/
Exception Value: Field value longer than max allowed: 89 > 64
class EncryptedCharField(BaseEncryptedField):
    __metaclass__ = models.SubfieldBase

    def get_internal_type(self):
        return "CharField"

    def formfield(self, **kwargs):
        defaults = {'max_length': self.max_length}
        defaults.update(kwargs)
        return super(EncryptedCharField, self).formfield(**defaults)

    def get_db_prep_value(self, value, connection=None, prepared=False):
        if value is not None and not self._is_encrypted(value):
            if len(value) > self.unencrypted_length:
                raise ValueError("Field value longer than max allowed: " +
                    str(len(value)) + " > " + str(self.unencrypted_length))
        return super(EncryptedCharField, self).get_db_prep_value(
            value,
            connection=connection,
            prepared=prepared,
        )

https://github.com/svetlyak40wt/django-fields/blob/master/src/django_fields/fields.py#L106

@svetlyak40wt
Copy link
Owner

Feel free to provide a patch. But don't forget to add a unittest as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants