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