~guitarmanvt/django-saml2-idp/tags

« back to all changes in this revision

Viewing changes to demo2/idptest/saml2idp/xml_render.py

  • Committer: john at andersoninnovative
  • Date: 2012-05-12 01:20:30 UTC
  • Revision ID: svn-v4:41e50629-eb6e-b841-421f-ad03d4eac035:tags:140
Added demo processor to work out-of-the-box with the django-saml2-sp demo project.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
Functions for creating XML output.
 
3
"""
 
4
import logging
 
5
import string
 
6
from xml_signing import get_signature_xml
 
7
from xml_templates import ASSERTION_GOOGLE_APPS, ASSERTION_SALESFORCE, RESPONSE
 
8
 
 
9
def _get_assertion_xml(template, parameters, signed=False):
 
10
    # Reset signature.
 
11
    params = {}
 
12
    params.update(parameters)
 
13
    params['ASSERTION_SIGNATURE'] = ''
 
14
    template = string.Template(template)
 
15
 
 
16
    unsigned = template.substitute(params)
 
17
    logging.debug('Unsigned:')
 
18
    logging.debug(unsigned)
 
19
    if not signed:
 
20
        return unsigned
 
21
 
 
22
    # Sign it.
 
23
    signature_xml = get_signature_xml(unsigned, params['ASSERTION_ID'])
 
24
    params['ASSERTION_SIGNATURE'] = signature_xml
 
25
    signed = template.substitute(params)
 
26
 
 
27
    logging.debug('Signed:')
 
28
    logging.debug(signed)
 
29
    return signed
 
30
 
 
31
def get_assertion_googleapps_xml(parameters, signed=False):
 
32
    return _get_assertion_xml(ASSERTION_GOOGLE_APPS, parameters, signed)
 
33
 
 
34
def get_assertion_salesforce_xml(parameters, signed=False):
 
35
    return _get_assertion_xml(ASSERTION_SALESFORCE, parameters, signed)
 
36
 
 
37
def get_response_xml(parameters, signed=False):
 
38
    """
 
39
    Returns XML for response, with signatures, if signed is True.
 
40
    """
 
41
    # Reset signatures.
 
42
    params = {}
 
43
    params.update(parameters)
 
44
    params['RESPONSE_SIGNATURE'] = ''
 
45
 
 
46
    template = string.Template(RESPONSE)
 
47
    unsigned = template.substitute(params)
 
48
 
 
49
    logging.debug('Unsigned:')
 
50
    logging.debug(unsigned)
 
51
    if not signed:
 
52
        return unsigned
 
53
 
 
54
    # Sign it.
 
55
    signature_xml = get_signature_xml(unsigned, params['RESPONSE_ID'])
 
56
    params['RESPONSE_SIGNATURE'] = signature_xml
 
57
    signed = template.substitute(params)
 
58
 
 
59
    logging.debug('Signed:')
 
60
    logging.debug(signed)
 
61
    return signed