def test_plain_bypass_urlquery(): auth = Authentication(PlainCoder(), PlainCryptor(), BypassVerifier(), URLQueryCoder(), TestSessionHandler(), 'SECRET') data = '' context = auth.get_context(data) assert context.data == {} data = 'field=value' context = auth.get_context(data) assert context.data == {'field': ['value']} data = 'field=value&field=value' context = auth.get_context(data) assert context.data == {'field': ['value', 'value']}
def test_plain_datakey_json(): auth = Authentication(PlainCoder(), PlainCryptor(), DataKeyVerifier(JsonCoder(), 'session'), PlainCoder(), TestSessionHandler(), 'SECRET') data = '{"field": "value", "session": "1"}' context = auth.get_context(data) assert context.data == {'field': 'value', 'session': '1'} assert context.session == {'id': '1'}
def test_base64_aes_timehash_json(): data = {'field': 'value'} auth = Authentication(Base64Coder(), AESCryptor(256), TimeHashVerifier(now=lambda: 1000000000), JsonCoder(), handler1, 'SECRET') d = auth.build_first_data(data, 'v') assert d == 'wJ8UaQ0+pQm3V9Rpj+ZnmS9K9vFi9G5Lrr5Mv7oS/PvgxZSSKmu02Had5Z4CQ5AgpMR3qJ6GFshPRAjIB5v/B3eP6ILSDlyjrcgA51wlzzrVEi5uAQPHB9X742xD11lR' c = auth.get_first_context(d) assert data == c.data d = auth.build_data(data, handler1.session_from_public_key('v')) assert d == 'sTZkvpTfADtge51D9Mwprs8zSzmHAx8PDk/VoX6+pI+Gb47o393wxShTdlJV4oT26XE6sBwcNXPzWkR+I9wuiD/9lBUKo8LLiZbNBiCvWhYTpeIN45aZDUXWVDijMFMH' c = auth.get_context(d) assert data == c.data
def test_timehash_json(): data = {'field':'value'} auth = Authentication(PlainCoder(), PlainCryptor(), TimeHashVerifier(now=lambda: 1000000000), JsonCoder(), handler1, 'SECRET') d = auth.build_first_data(data, 'v') assert d == 'v$3b9aca008d34b0ce271d8d499ed4f44678db1175ae547b95${"field":"value"}' c = auth.get_first_context(d) assert data == c.data d = auth.build_data(data, handler1.session_from_public_key('v')) assert d == 'v$3b9aca00741e96c093a4a5c230d3ea592adcabf3e055df4a${"field":"value"}' c = auth.get_context(d) assert data == c.data
def test_authentication(cryptor, verifier, coder, sessionhandler, secret='SECRET'): """Round-trip test""" authentication = Authentication(Base64Coder(), cryptor, verifier, coder, sessionhandler, secret) i = {'f1':'v1'} d = authentication.build_first_data(i, '1') c = authentication.get_first_context(d) assert i == c.data d = authentication.build_data(i, c.session) c = authentication.get_context(d) assert i == c.data
def test_session(): private_key = ('private_key' + '!' * 40)[:40] public_key = ('public_key' + '!' * 40)[:40] class KeyCheckSessionHandler(SessionHandler): def session_from_public_key(a_public_key, secret_key): assert a_public_key == public_key return session def get_private_key(session, secret_key): return private_key verifier = TimeHashVerifier() auth = Authentication(PlainCoder(), PlainCryptor(), verifier, SimpleURLQueryCoder(), TestSessionHandler(), 'SECRET') data = {'field': 'value'} encrypted = auth.build_data(data, session_zero) assert encrypted.startswith('public_key') assert '$' in encrypted context = auth.get_context(encrypted) assert context.data == data