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-cam/cam/filters/archimed.py

167 lines
6.5 KiB
Python

# -*- coding: utf-8 -*-
import copy
import json
import re
import urllib
from urlparse import parse_qs
from mandaye import config
from mandaye.backends.default import Association
from mandaye.http import HTTPResponse, HTTPHeader, HTTPRequest
from mandaye.log import logger
from mandaye.response import _500, _302, template_response
from mandaye.server import get_response
from mandaye.template import serve_template
def default_req(env, values, request):
# Disable forward headers
request.headers.delheader('X-Forwarded-For')
request.headers.delheader('X-Forwarded-Host')
if request.cookies.has_key('S_HTTP_REFERER'):
request.cookies['S_HTTP_REFERER'] = re.sub(r'\?SAMLRequest=.*$',
'',
str(request.cookies['S_HTTP_REFERER']))
def default_resp(env, values, request, response):
try:
response.msg = response.msg.decode('utf-8')
except UnicodeDecodeError:
response.msg = response.msg.decode('iso8859-15')
if response.headers.has_key('location'):
print response.headers['location'][0]
response.headers['location'][0] = re.sub(r'http[s]*://' + env['target'].netloc,
env['mandaye.scheme'] + '://' + env["HTTP_HOST"],
response.headers['location'][0])
response.msg = re.sub(r'http[s]*://' + env['target'].netloc,
env['mandaye.scheme'] + '://' + env["HTTP_HOST"],
response.msg)
response.msg = response.msg.encode('utf-8')
return response
def associate_req(env, values, request):
session = env['beaker.session']
if session.has_key('registraion') and \
session['registraion'] == True:
logger.info('Auto associate %s' % session['register_login'])
headers = HTTPHeader()
target = values['action']
content = {values['login_name']: session['register_login'],
values['password_name']: session['register_password']}
content = urllib.urlencode(content)
request = HTTPRequest(request.cookies,
headers,
"POST",
content,
target=values['action'])
return request
def clean_registration_session(env, values, request, response):
session = env['beaker.session']
session['registraion'] = False
if session.has_key('register_login'):
del session['register_login']
if session.has_key('register_password'):
del session['register_password']
session.save()
return response
def associate(env, values, request, response):
qs = parse_qs(env['QUERY_STRING'])
if qs.has_key('type'):
values['type'] = qs['type'][0]
else:
values['type'] = None
return template_response(values.get('template'), values)
def associate_confirm(env, values, request, response):
return template_response(values.get('template'), values)
def json_response(env, values, request, response):
site_name = env["mandaye.config"]["site_name"]
headers = HTTPHeader({'Content-Type': ['application/json']})
target = '%s/DEFAULT/Ermes/Services/ILSClient.svc/RetrieveAccount' % \
env['target'].geturl()
auth = env['mandaye.auth']
qs = parse_qs(env['QUERY_STRING'])
if qs.has_key('nameid'):
unique_id = qs['nameid'][-1]
else:
logger.warning('archimed json: no nameid id into get')
return HTTPResponse(401, 'Unauthorized', headers,
'{"error": "bad parameter no nameid"}')
associations = Association.get(site_name, unique_id)
if not associations:
return HTTPResponse(401, 'Unauthorized', headers,
'{"error": "%s is not associate with %s"}' %\
(unique_id, site_name))
association = associations[0]
post_values = copy.copy(association['sp_post_values'])
if config.encrypt_sp_password:
password = auth.decrypt_pwd(post_values[auth.form_values['password_field']])
post_values[auth.form_values['password_field']] = password
response = auth.replay(env, post_values)
cookies = response.cookies
content = '{"codeConfig":"", "xslPath":"Services/LectorShortAccount.xslt"}'
request = HTTPRequest(cookies, headers, "POST", content)
request.msg = content
return get_response(env, request, target)
def registration_req(env, values, request):
session = env['beaker.session']
if request.msg:
post = request.msg.read()
params = json.loads(post)
if params.has_key('values'):
if params['values'].has_key('_x002F_Registration_x002F_UserAccount_x005B_1_x005D__x002F_Login_x005B_1_x005D_'):
session['register_login'] = params['values']['_x002F_Registration_x002F_UserAccount_x005B_1_x005D__x002F_Login_x005B_1_x005D_']
if params['values'].has_key('_x002F_Registration_x002F_UserAccount_x005B_1_x005D__x002F_Password_x005B_1_x005D_'):
session['register_password'] = params['values']['_x002F_Registration_x002F_UserAccount_x005B_1_x005D__x002F_Password_x005B_1_x005D_']
request.msg = post
session.save()
return request
def registration_resp(env, values, request, response):
session = env['beaker.session']
if response.msg and \
'"success":true' in response.msg and \
session.has_key('register_login') and \
session.has_key('register_password'):
logger.info('Regastration completed for %s' % session['register_login'])
session['registraion'] = True
else:
logger.info('Registration failed return original response')
if session.has_key('register_login'):
del session['register_login']
if session.has_key('register_password'):
del session['register_password']
session['registraion'] = False
session.save()
return response
def registration_association(env, values, request, response):
session = env['beaker.session']
if session.has_key('registraion') and \
session['registraion'] == True:
return _302('/mandaye/associate_confirm')
else:
clean_registration_session(env, values, request, response)
return response
def is_user_locally_logged_in(env, request, response):
session = env['beaker.session']
if session.has_key('locally_logged_in') and session['locally_logged_in']:
return True
return False
def is_logged_in(env, values, request, response):
session = env['beaker.session']
if response.msg and 'account_logoff' in response.msg:
session['locally_logged_in'] = True
else:
session['locally_logged_in'] = False
session.save()