This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
mandaye/mandaye/auth/vincennes.py

64 lines
1.8 KiB
Python

""" Vincennes authentifications
"""
import base64
import logging
import traceback
from Crypto.Cipher import AES
#from mandaye.dispatchers.auth import AuthFormDispatcher
from mandaye.response import _502, _302
class VincennesAuth(object):
def __init__(self, url):
self.url = url
def _parse_qs(self, query):
""" Parse query string
Return a dict
"""
res = {}
values = query.split('&')
for value in values:
keyvalue = value.split('=', 1)
res[keyvalue[0]] = keyvalue[1]
return res
def get_current_login(self, env):
""" Return the current Vincennes pseudo
"""
from mandaye import config
# TODO: test time validity
if not env['QUERY_STRING']:
return None
query = self._parse_qs(env['QUERY_STRING'])
if query.has_key('token'):
# TODO: catch exceptions
try:
token = query['token']
token = base64.b64decode(token)
cipher = AES.new(config.secret, AES.MODE_CFB)
decode = cipher.decrypt(token)
info = eval(decode[16:])
session = env['beaker.session']
session['pseudo'] = info['pseudo']
session.save()
return info['pseudo']
except Exception, e:
if config.debug:
traceback.print_exc()
return None
return None
def connection(self, env, values, request):
""" Connection to the compte citoyen
"""
dest_url = "%s://%s%s" % (env['wsgi.url_scheme'], env['HTTP_HOST'],
values.get('next_url'))
location = "%s?next_url=%s&service=%s" % \
(self.url, dest_url, values.get('service_name'))
return _302(location)