misc: add tiny /r/{formdef-id}-{formdata-id} URL redirections (#48159)
This commit is contained in:
parent
61fcfee1f5
commit
36cc71044c
|
@ -246,3 +246,18 @@ def test_postgresql_down(pub):
|
|||
with mock.patch('psycopg2.connect', side_effect=psycopg2.OperationalError()):
|
||||
resp = get_app(pub).get('/', status=503)
|
||||
assert 'Error connecting to database' in resp.text
|
||||
|
||||
|
||||
def test_short_url_redirect(pub, formdef1):
|
||||
formdata = formdef1.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
app = get_app(pub)
|
||||
app.get('/r/xxx', status=404)
|
||||
app.get('/r/300', status=404)
|
||||
app.get('/r/300-100', status=404)
|
||||
resp = app.get(f'/r/{formdef1.id}', status=302)
|
||||
assert resp.location == formdef1.get_url()
|
||||
resp = app.get(f'/r/{formdef1.id}-{formdata.id}', status=302)
|
||||
assert resp.location == formdata.get_url()
|
||||
|
|
22
wcs/root.py
22
wcs/root.py
|
@ -171,6 +171,26 @@ class StaticsDirectory(Directory):
|
|||
raise errors.TraversalError()
|
||||
|
||||
|
||||
class TinyRedirectDirectory(Directory):
|
||||
def _q_lookup(self, component):
|
||||
formdata_match = re.match('^([1-9][0-9]*)-([1-9][0-9]*)$', component)
|
||||
formdef_match = re.match('^([1-9][0-9]*)$', component)
|
||||
if formdata_match:
|
||||
formdef_id, formdata_id = formdata_match.groups()
|
||||
elif formdef_match:
|
||||
formdef_id, formdata_id = formdef_match.groups()[0], None
|
||||
else:
|
||||
raise errors.TraversalError()
|
||||
try:
|
||||
formdef = FormDef.get(formdef_id)
|
||||
except KeyError:
|
||||
raise errors.TraversalError()
|
||||
if formdata_id:
|
||||
return redirect(formdef.get_url() + f'{formdata_id}/')
|
||||
else:
|
||||
return redirect(formdef.get_url())
|
||||
|
||||
|
||||
class RootDirectory(Directory):
|
||||
_q_exports = [
|
||||
'admin',
|
||||
|
@ -193,6 +213,7 @@ class RootDirectory(Directory):
|
|||
'fargo',
|
||||
'static',
|
||||
'actions',
|
||||
('r', 'tiny_redirect'),
|
||||
]
|
||||
|
||||
api = ApiDirectory()
|
||||
|
@ -200,6 +221,7 @@ class RootDirectory(Directory):
|
|||
fargo = portfolio.FargoDirectory()
|
||||
static = StaticsDirectory()
|
||||
actions = ActionsDirectory()
|
||||
tiny_redirect = TinyRedirectDirectory()
|
||||
|
||||
forced_language = False
|
||||
|
||||
|
|
Loading…
Reference in New Issue