sessions: expose hashed id as {{session_hash_id}} (#39784)

This commit is contained in:
Frédéric Péters 2020-02-12 13:18:54 +01:00
parent 86ce74fbfb
commit ad26a851db
2 changed files with 7 additions and 2 deletions

View File

@ -200,14 +200,16 @@ def test_session_substitution_variables_1st_page_condition(pub, user, app):
formdef.fields = [fields.PageField(id='0', label='1st PAGE', type='page',
condition={'type': 'python', 'value': 'vars().get("session_id") is not None'}),
fields.CommentField(id='7', label='COM1 [session_id]', type='comment'),
fields.CommentField(id='10', label='COMHASH1 [session_hash_id]', type='comment'),
fields.PageField(id='8', label='2nd PAGE', type='page'),
fields.CommentField(id='9', label='COM2 [session_id]', type='comment')]
formdef.store()
resp = app.get('/foobar/')
assert pub.session_manager.session_class.count() == 1
session_id = pub.session_manager.session_class.select()[0].id
assert 'COM1' in resp.text
session = pub.session_manager.session_class.select()[0]
assert 'COM1 %s' % session.id in resp.text
assert 'COMHASH1 %s' % session.get_substitution_variables().get('session_hash_id') in resp.text
def test_session_clean_job(pub, user, app, freezer):

View File

@ -16,6 +16,7 @@
import copy
import json
import hashlib
import os
import time
@ -26,6 +27,7 @@ from quixote.session import SessionManager as QuixoteSessionManager
from quixote.util import randbytes
from django.conf import settings
from django.utils.encoding import force_bytes
from django.core.signing import Signer, BadSignature
from . import misc
@ -341,6 +343,7 @@ class Session(QommonSession, CaptchaSession, StorableObject):
def get_substitution_variables(self, prefix='session_'):
d = {}
d[prefix + 'id'] = self.id
d[prefix + 'hash_id'] = hashlib.sha1(force_bytes(self.id)).hexdigest()
if self.extra_variables:
for k, v in self.extra_variables.items():
d[prefix + 'var_' + k] = v