Revision 8f5a3a06 snf-astakos-app/astakos/im/target/shibboleth.py

b/snf-astakos-app/astakos/im/target/shibboleth.py
33 33

  
34 34
from django.http import HttpResponseBadRequest
35 35

  
36
from astakos.im.util import get_or_create_user, prepare_response
37
from astakos.im.views import requires_anonymous
36
from astakos.im.util import get_or_create_user, prepare_response, get_context, get_invitation
37
from astakos.im.views import requires_anonymous, render_response
38
from astakos.im.settings import DEFAULT_USER_LEVEL
39
from astakos.im.models import AstakosUser
40
from astakos.im.forms import ThirdPartyUserCreationForm
38 41

  
39 42
class Tokens:
40 43
    # these are mapped by the Shibboleth SP software
......
47 50
    SHIB_SESSION_ID = "HTTP_SHIB_SESSION_ID"
48 51

  
49 52
@requires_anonymous
50
def login(request):
51
    tokens = request.META
53
def login(request,  backend=None, on_creation_template='im/signup_complete.html', extra_context={}):
54
    #tokens = request.META
55
    #
56
    #try:
57
    #    eppn = tokens[Tokens.SHIB_EPPN]
58
    #except KeyError:
59
    #    return HttpResponseBadRequest("Missing unique token in request")
60
    #
61
    #if Tokens.SHIB_DISPLAYNAME in tokens:
62
    #    realname = tokens[Tokens.SHIB_DISPLAYNAME]
63
    #elif Tokens.SHIB_CN in tokens:
64
    #    realname = tokens[Tokens.SHIB_CN]
65
    #elif Tokens.SHIB_NAME in tokens and Tokens.SHIB_SURNAME in tokens:
66
    #    realname = tokens[Tokens.SHIB_NAME] + ' ' + tokens[Tokens.SHIB_SURNAME]
67
    #else:
68
    #    return HttpResponseBadRequest("Missing user name in request")
69
    #
70
    #affiliation = tokens.get(Tokens.SHIB_EP_AFFILIATION, '')
52 71
    
72
    eppn, realname, affiliation = 'papagian', 'Sofia Papagiannaki', 'grnet'
53 73
    try:
54
        eppn = tokens[Tokens.SHIB_EPPN]
55
    except KeyError:
56
        return HttpResponseBadRequest("Missing unique token in request")
57
    
58
    if Tokens.SHIB_DISPLAYNAME in tokens:
59
        realname = tokens[Tokens.SHIB_DISPLAYNAME]
60
    elif Tokens.SHIB_CN in tokens:
61
        realname = tokens[Tokens.SHIB_CN]
62
    elif Tokens.SHIB_NAME in tokens and Tokens.SHIB_SURNAME in tokens:
63
        realname = tokens[Tokens.SHIB_NAME] + ' ' + tokens[Tokens.SHIB_SURNAME]
64
    else:
65
        return HttpResponseBadRequest("Missing user name in request")
66
    
67
    affiliation = tokens.get(Tokens.SHIB_EP_AFFILIATION, '')
68
    
69
    user = get_or_create_user(eppn, realname=realname, affiliation=affiliation, provider='shibboleth', level=0)
70
    return prepare_response(request,
71
                            user,
72
                            request.GET.get('next'),
73
                            'renew' in request.GET)
74
        user = AstakosUser.objects.get(provider='shibboleth', third_party_identifier=eppn)
75
        return prepare_response(request,
76
                                user,
77
                                request.GET.get('next'),
78
                                'renew' in request.GET)
79
    except AstakosUser.DoesNotExist, e:
80
        invitation = get_invitation(request)
81
        user = AstakosUser(third_party_identifier=eppn, realname=realname,
82
                           affiliation=affiliation,
83
                           provider='shibboleth')
84
        if not invitation:
85
            return render_response(on_creation_template,
86
                                   thirdparty_signup_form = ThirdPartyUserCreationForm(instance=user),
87
                                   provider = 'shibboleth',
88
                                   context_instance=get_context(request, extra_context))
89
        else:
90
            user.email = invitation.username
91
            return

Also available in: Unified diff