diff --git a/MANIFEST.in b/MANIFEST.in index 06fd98c..773cfa7 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,7 @@ include LICENSE include README.rst include README.upgrading.rst +include RELEASE-NOTES.rst include lookup.py include lookup.sh include django-sshkey-lookup diff --git a/RELEASE-NOTES.rst b/RELEASE-NOTES.rst index 576d109..8f05c98 100644 --- a/RELEASE-NOTES.rst +++ b/RELEASE-NOTES.rst @@ -2,6 +2,12 @@ Release Notes for django-sshkey =============================== +2.3.2 (2014-09-15) +------------------ + +* Bug fix #1: entering whitespace for key field results in IndexError +* Make example templates work with Django 1.4+ + 2.3.1 (2014-07-29) ------------------ diff --git a/django_sshkey/__init__.py b/django_sshkey/__init__.py index 1cd18e6..b11ce04 100644 --- a/django_sshkey/__init__.py +++ b/django_sshkey/__init__.py @@ -26,4 +26,4 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -__version__ = '2.3.1' +__version__ = '2.3.2' diff --git a/django_sshkey/models.py b/django_sshkey/models.py index 609a8ee..7578f23 100644 --- a/django_sshkey/models.py +++ b/django_sshkey/models.py @@ -60,8 +60,13 @@ class UserKey(models.Model): def clean_fields(self, exclude=None): if not exclude or 'key' not in exclude: self.key = self.key.strip() + if not self.key: + raise ValidationError({'key': ["This field is required."]}) def clean(self): + self.key = self.key.strip() + if not self.key: + return try: pubkey = pubkey_parse(self.key) except PublicKeyParseError as e: diff --git a/django_sshkey/templates.example/sshkey/userkey_list.html b/django_sshkey/templates.example/sshkey/userkey_list.html index e83e285..dd5898a 100644 --- a/django_sshkey/templates.example/sshkey/userkey_list.html +++ b/django_sshkey/templates.example/sshkey/userkey_list.html @@ -1,3 +1,4 @@ +{% load url from future %} <h1>My Keys</h1> {% if messages %} <ul class="messages"> @@ -6,7 +7,7 @@ {% endfor %} </ul> {% endif %} -<p><a href="{% url django_sshkey.views.userkey_add %}">Add Key</a></p> +<p><a href="{% url "django_sshkey.views.userkey_add" %}">Add Key</a></p> <table> <tr> <th>Key</th> @@ -29,9 +30,9 @@ <td>{{ userkey.last_used|default:"never" }}</td> <td> {% if allow_edit %} - <a href="{% url django_sshkey.views.userkey_edit userkey.pk %}">Edit</a> + <a href="{% url "django_sshkey.views.userkey_edit" userkey.pk %}">Edit</a> {% endif %} - <a href="{% url django_sshkey.views.userkey_delete userkey.pk %}">Delete</a> + <a href="{% url "django_sshkey.views.userkey_delete" userkey.pk %}">Delete</a> </td> </tr> {% endfor %} diff --git a/django_sshkey/tests.py b/django_sshkey/tests.py index bb94063..7569158 100644 --- a/django_sshkey/tests.py +++ b/django_sshkey/tests.py @@ -255,6 +255,23 @@ class UserKeyCreationTestCase(BaseTestCase): ) self.assertRaises(ValidationError, key2.full_clean) + def test_blank_key_fails(self): + key = UserKey( + user = self.user1, + name = 'name1', + key = '', + ) + self.assertRaises(ValidationError, key.full_clean) + + def test_ws_key_fails(self): + key = UserKey( + user = self.user1, + name = 'name1', + key = ' ', + ) + self.assertRaises(ValidationError, key.full_clean) + + class RFC4716TestCase(BaseTestCase): @classmethod def setUpClass(cls):