i18n support for aiohttp through babel
pip install aiohttp-i18n==0.0.6
Current API version is v1
It's highly recommended to use vagga for testing
vagga test
Use vagga to run project
vagga run
Use vagga to run worker
vagga worker
Zk_auth is a complex application that includes json-rpc server and worker. For testing api methods use jsonrpcclient
client = HTTPClient('http://zk_auth-trunk.dev-cluster.uaprom/api/v1')
Use this method to get auth_token
>>> client = HTTPClient('http://zk_auth-trunk.dev-cluster.uaprom/api/v1')
>>> client.send('{"jsonrpc": "2.0", "method": "login", "params": {"email": "my@smartweb.com.ua", "passwd": "passwd"}, "id": 1}')
>>> '9777ddb9bfa7b4de2e231c9e54bdad825b5238e2'
Remove auth_token from redis storage. Return bool (True if success).
>>> client = HTTPClient('http://zk_auth-trunk.dev-cluster.uaprom/api/v1')
>>> client.send('{"jsonrpc": "2.0", "method": "logout", "params": {"auth_token": "9777ddb9bfa7b4de2e231c9e54bdad825b5238e2"}, "id": 1}')
>>> True
If auth in sudo mode then auth data rewrites with sudo data.
Check if user signed in. Return employee and current merchant data or False otherwise
>>> client = HTTPClient('http://zk_auth-trunk.dev-cluster.uaprom/api/v1')
>>> client.send('{"jsonrpc": "2.0", "method": "check", "params": {"auth_token": "9777ddb9bfa7b4de2e231c9e54bdad825b5238e2"}, "id": 1}')
>>> False
>>> client.send('{"jsonrpc": "2.0", "method": "login", "params": {"email": "my@smartweb.com.ua", "passwd": "passwd"}, "id": 1}')
>>> 'cf22f1507f6a18a06b91867137d6ae9c7f76beca'
>>> client.send('{"jsonrpc": "2.0", "method": "check", "params": {"auth_token": "cf22f1507f6a18a06b91867137d6ae9c7f76beca"}, "id": 1}')
If check is success this method return auth employee data. Data structure is like this:
{
'employee': {
'data': {'id': 35, 'full_name': 'Vitalii', 'email': 'v.mazur@smartweb.com.ua.test'},
'_hash': '38ede7063e1da47f3f50c876b71eb75d'
},
'merchant': {
'data': {'id': 35, 'name': 'Mazvv Company'},
'_hash': '2f213bb0b570fccebe07698d8c475e25'
}
}
We use _hash for invalidation data in redis storage If auth is in sudo mode data structure is like this:
{
'sudo': {
'employee': {
'data': {'id': 36, 'full_name': 'Vitalii 1', 'email': 'v.mazur+1@smartweb.com.ua.test'},
'_hash': '38ede7063e1da47f3uyuy345uyiiu234'
},
'merchant': {
'data': {'id': 36, 'name': 'Mazvv Company 1'},
'_hash': '234gjhg12341qwer7262345ewrt78ert'
}
}
'employee': {
'data': {'id': 35, 'full_name': 'Vitalii', 'email': 'v.mazur@smartweb.com.ua.test'},
'_hash': '38ede7063e1da47f3f50c876b71eb75d'
},
'merchant': {
'data': {'id': 35, 'name': 'Mazvv Company'},
'_hash': '2f213bb0b570fccebe07698d8c475e25'
}
}
In sudo key we store auth data of superuser that makes sudo.
Switch employee to another merchant. Return True if switching success.
>>> client.send('{"jsonrpc": "2.0", "method": "switch", "params": {"auth_token": "cf22f1507f6a18a06b91867137d6ae9c7f76beca", "merchant_id": 35}, "id": 1}')
>>> True
Sudo to employee with id employee_id. Return True if switching success.
>>> client.send('{"jsonrpc": "2.0", "method": "sudo", "params": {"auth_token": "cf22f1507f6a18a06b91867137d6ae9c7f76beca", "employee_id": 40}, "id": 1}')
>>> True
This creates sudo key in auth data with previus auth data.
To cache invalidation zk_auth uses pub-sub with amqp. Publish messages into queue profile with format employees|merchants:id if employee or merchant profile was changed.
ab -p post.txt -T application/json -c 10 -n 2000 http://zk_auth-trunk.dev-cluster.uaprom/api/v1
post.txt content is something like this
{"jsonrpc": "2.0", "method": "login", "params": {"email": "1", "passwd": "2"}, "id": 1}