Increased key length maximum size to 128 characters (#138)

This commit is contained in:
Chris Caron
2023-10-08 10:32:03 -04:00
committed by GitHub
parent a54d7b42f1
commit cd2135bb46
4 changed files with 71 additions and 9 deletions

View File

@ -28,6 +28,7 @@ from unittest.mock import patch
from django.test.utils import override_settings
from ..forms import AUTO_DETECT_CONFIG_KEYWORD
import json
import hashlib
class AddTests(SimpleTestCase):
@ -39,6 +40,30 @@ class AddTests(SimpleTestCase):
response = self.client.get('/add/**invalid-key**')
assert response.status_code == 404
def test_key_lengths(self):
"""
Test our key lengths
"""
# our key to use
h = hashlib.sha512()
h.update(b'string')
key = h.hexdigest()
# Our limit
assert len(key) == 128
# Add our URL
response = self.client.post(
'/add/{}'.format(key), {'urls': 'mailto://user:pass@yahoo.ca'})
assert response.status_code == 200
# However adding just 1 more character exceeds our limit and the save
# will fail
response = self.client.post(
'/add/{}'.format(key + 'x'), {'urls': 'mailto://user:pass@yahoo.ca'})
assert response.status_code == 404
@override_settings(APPRISE_CONFIG_LOCK=True)
def test_save_config_by_urls_with_lock(self):
"""

View File

@ -25,6 +25,7 @@
from django.test import SimpleTestCase
from django.test.utils import override_settings
from unittest.mock import patch
import hashlib
class DelTests(SimpleTestCase):
@ -36,6 +37,36 @@ class DelTests(SimpleTestCase):
response = self.client.get('/del/**invalid-key**')
assert response.status_code == 404
def test_key_lengths(self):
"""
Test our key lengths
"""
# our key to use
h = hashlib.sha512()
h.update(b'string')
key = h.hexdigest()
# Our limit
assert len(key) == 128
# Add our URL
response = self.client.post(
'/add/{}'.format(key), {'urls': 'mailto://user:pass@yahoo.ca'})
assert response.status_code == 200
# remove a key that is too long
response = self.client.post('/del/{}'.format(key + 'x'))
assert response.status_code == 404
# remove the key
response = self.client.post('/del/{}'.format(key))
assert response.status_code == 200
# Test again; key is gone
response = self.client.post('/del/{}'.format(key))
assert response.status_code == 204
@override_settings(APPRISE_CONFIG_LOCK=True)
def test_del_with_lock(self):
"""
@ -77,3 +108,7 @@ class DelTests(SimpleTestCase):
# We can now remove the key
response = self.client.post('/del/{}'.format(key))
assert response.status_code == 200
# Key has already been removed
response = self.client.post('/del/{}'.format(key))
assert response.status_code == 204

View File

@ -30,27 +30,27 @@ urlpatterns = [
r'^$',
views.WelcomeView.as_view(), name='welcome'),
re_path(
r'^details/?',
r'^details/?$',
views.DetailsView.as_view(), name='details'),
re_path(
r'^cfg/(?P<key>[\w_-]{1,64})/?',
r'^cfg/(?P<key>[\w_-]{1,128})/?$',
views.ConfigView.as_view(), name='config'),
re_path(
r'^add/(?P<key>[\w_-]{1,64})/?',
r'^add/(?P<key>[\w_-]{1,128})/?$',
views.AddView.as_view(), name='add'),
re_path(
r'^del/(?P<key>[\w_-]{1,64})/?',
r'^del/(?P<key>[\w_-]{1,128})/?$',
views.DelView.as_view(), name='del'),
re_path(
r'^get/(?P<key>[\w_-]{1,64})/?',
r'^get/(?P<key>[\w_-]{1,128})/?$',
views.GetView.as_view(), name='get'),
re_path(
r'^notify/(?P<key>[\w_-]{1,64})/?',
r'^notify/(?P<key>[\w_-]{1,128})/?$',
views.NotifyView.as_view(), name='notify'),
re_path(
r'^notify/?',
r'^notify/?$',
views.StatelessNotifyView.as_view(), name='s_notify'),
re_path(
r'^json/urls/(?P<key>[\w_-]{1,64})/?',
r'^json/urls/(?P<key>[\w_-]{1,128})/?$',
views.JsonUrlView.as_view(), name='json_urls'),
]