Projet

Général

Profil

Télécharger (3,26 ko) Statistiques
| Branche: | Révision:

root / larpe / trunk / sites.ptl @ 8843f79b

1
import sys
2
from quixote import get_response, redirect
3
from quixote.directory import Directory
4
from quixote.errors import TraversalError
5

    
6
import admin
7
import liberty
8
import saml2
9

    
10
import errors
11
import logger
12
import misc
13
import template
14
from form import *
15

    
16
from users import User
17

    
18
class SiteUI(Directory):
19

    
20
    _q_exports = ["", "login", "liberty"]
21
    
22
    liberty = liberty.RootDirectory()
23

    
24
    def __init__(self, component):
25
        self.name = component
26

    
27
    def _q_index(self):
28
        return 'todo'
29

    
30
    def login [html] (self):
31
        logger.info('login')
32
        idps = misc.cfg.get('idp', {})
33

    
34
        if len(idps) == 0:
35
            return template.error_page(_('SSO support is not yet configured'))
36

    
37
        if len(idps) == 1 or len([x for x in idps.values() if not x.get('hide', False)]) == 1:
38
            # if there is only one visible IdP, perform login automatically on
39
            # this one.
40
            server = misc.get_lasso_server('liberty')
41
            for x in server.providerIds:
42
                key_provider_id = x.replace(str('://'), str('-')).replace(str('/'), str('-'))
43
                if not idps.get(key_provider_id, {}).get('hide', False):
44
                    return self.liberty.perform_login(x)
45

    
46
            server = misc.get_lasso_server('saml2')
47
            for x in server.providerIds:
48
                key_provider_id = x.replace(str('://'), str('-')).replace(str('/'), str('-'))
49
                if not idps.get(key_provider_id, {}).get('hide', False):
50
                    return self.saml.perform_login(x)
51

    
52
        form = Form(enctype='multipart/form-data')
53
        options = []
54
        # XXX: use intro cookie to get preferred value
55
        value = None
56
        providers = {}
57
        for kidp, idp in misc.cfg.get('idp', {}).items():
58
            if idp.get('hide'):
59
                continue
60
            p = lasso.Provider(lasso.PROVIDER_ROLE_IDP,
61
                    misc.get_abs_path(idp['metadata']),
62
                    misc.get_abs_path(idp['publickey']), None)
63
            providers[p.providerId] = p
64

    
65
        include_protocol = True
66
        if len([x for x in providers.values() if 
67
                x.getProtocolConformance() == lasso.PROTOCOL_SAML_2_0]) in (0, len(providers)):
68
            include_protocol = False
69

    
70
        for p in providers.values():
71
            label = misc.get_provider_label(p)
72
            if include_protocol:
73
                if p.getProtocolConformance() == lasso.PROTOCOL_SAML_2_0:
74
                    label = '%s (SAML 2.0)' % label
75
                else:
76
                    label = '%s (Liberty ID-FF 1.2)' % label
77
            options.append((p.providerId, label))
78
            if not value:
79
                value = p.providerId
80
        form.add(RadiobuttonsWidget, 'idp', value = value, options = options, delim = '<br/>')
81
        form.add_submit('submit', _('Submit'))
82

    
83
        if form.is_submitted() and not form.has_errors():
84
            idp = form.get_widget('idp').parse()
85
            p = providers[form.get_widget('idp').parse()]
86
            if p.getProtocolConformance() == lasso.PROTOCOL_SAML_2_0:
87
                return self.saml.perform_login(idp)
88
            else:
89
                return self.liberty.perform_login(idp)
90

    
91
        template.html_top(_('Login'))
92
        '<p>%s</p>' % _('Select the identity provider you want to use.')
93
        form.render()
(17-17/20)