Statistics
| Branch: | Tag: | Revision:

root / aai / shibboleth.py @ ac3c3a4b

History | View | Annotate | Download (1.8 kB)

1 462c7e47 Georgios Gousios
#
2 462c7e47 Georgios Gousios
# Business Logic for working with sibbolleth users
3 462c7e47 Georgios Gousios
#
4 462c7e47 Georgios Gousios
# Copyright 2010 Greek Research and Technology Network
5 462c7e47 Georgios Gousios
#
6 462c7e47 Georgios Gousios
7 462c7e47 Georgios Gousios
from synnefo.logic import users
8 462c7e47 Georgios Gousios
9 462c7e47 Georgios Gousios
class Tokens:
10 63efc637 Georgios Gousios
    SIB_NAME = "Shib-InetOrgPerson-givenName"
11 63efc637 Georgios Gousios
    SIB_SURNAME = "Shib-Person-surname"
12 63efc637 Georgios Gousios
    SIB_CN = "Shib-Person-commonName"
13 462c7e47 Georgios Gousios
    SIB_DISPLAY_NAME = "displayName"
14 63efc637 Georgios Gousios
    SIB_EPPN = "eppn"
15 73dbfbf5 Georgios Gousios
    SIB_EDU_PERSON_AFFILIATION = "shib_ep_primaryaffiliation"
16 462c7e47 Georgios Gousios
    SIB_SCHAC_PERSONAL_UNIQUE_CODE = "schacPersonalUniqueCode"
17 462c7e47 Georgios Gousios
    SIB_GR_EDU_PERSON_UNDERGRADUATE_BRANCH = "grEduPersonUndergraduateBranch"
18 ac3c3a4b Georgios Gousios
    SIB_SESSION_ID = "Shib-Session-ID"
19 462c7e47 Georgios Gousios
20 462c7e47 Georgios Gousios
class NoUniqueToken(object):
21 faa26af8 Georgios Gousios
22 faa26af8 Georgios Gousios
    def __init__(self, msg):
23 faa26af8 Georgios Gousios
        self.msg = msg
24 faa26af8 Georgios Gousios
    
25 faa26af8 Georgios Gousios
    pass
26 faa26af8 Georgios Gousios
27 faa26af8 Georgios Gousios
class NoRealName(object):
28 faa26af8 Georgios Gousios
29 faa26af8 Georgios Gousios
    def __init__(self, msg):
30 faa26af8 Georgios Gousios
        self.msg = msg
31 faa26af8 Georgios Gousios
32 462c7e47 Georgios Gousios
    pass
33 462c7e47 Georgios Gousios
34 dd53338a Georgios Gousios
def register_shibboleth_user(tokens):
35 462c7e47 Georgios Gousios
    """Registers a sibbolleth user using the input hash as a source for data.
36 1896d262 Georgios Gousios
       The token requirements are described in:
37 462c7e47 Georgios Gousios
       http://aai.grnet.gr/policy
38 462c7e47 Georgios Gousios
    """
39 1896d262 Georgios Gousios
    realname = None
40 dd53338a Georgios Gousios
41 63efc637 Georgios Gousios
    if Tokens.SIB_SURNAME in tokens:
42 63efc637 Georgios Gousios
        realname = tokens[Tokens.SIB_SURNAME]
43 ac3c3a4b Georgios Gousios
    else:
44 ac3c3a4b Georgios Gousios
        realname = ''
45 462c7e47 Georgios Gousios
46 63efc637 Georgios Gousios
    if Tokens.SIB_NAME in tokens:
47 63efc637 Georgios Gousios
        realname = tokens[Tokens.SIB_NAME] + ' ' + realname
48 63efc637 Georgios Gousios
49 63efc637 Georgios Gousios
    if Tokens.SIB_CN in tokens:
50 63efc637 Georgios Gousios
        realname = tokens[Tokens.SIB_CN]
51 1896d262 Georgios Gousios
52 1896d262 Georgios Gousios
    is_student = Tokens.SIB_SCHAC_PERSONAL_UNIQUE_CODE in tokens or \
53 1896d262 Georgios Gousios
                 Tokens.SIB_GR_EDU_PERSON_UNDERGRADUATE_BRANCH in tokens
54 1896d262 Georgios Gousios
55 63efc637 Georgios Gousios
    unq = tokens.get(Tokens.SIB_EPPN)
56 462c7e47 Georgios Gousios
57 462c7e47 Georgios Gousios
    if unq is None:
58 faa26af8 Georgios Gousios
        raise NoUniqueToken("Authentication does not return a unique token")
59 faa26af8 Georgios Gousios
60 faa26af8 Georgios Gousios
    if realname is None:
61 faa26af8 Georgios Gousios
        raise NoRealName("Authentication does not return the user's name")
62 462c7e47 Georgios Gousios
63 462c7e47 Georgios Gousios
    if is_student:
64 462c7e47 Georgios Gousios
        users.register_student(realname, '' ,unq)
65 1896d262 Georgios Gousios
    else:
66 462c7e47 Georgios Gousios
        users.register_professor(realname, '' ,unq)
67 dbf97ed2 Georgios Gousios
68 63efc637 Georgios Gousios
    return True