Example #1
0
def shib_register(request):
    attr, error = parse_attributes(request.META)


    next = None
    if request.method == "POST" and "next" in request.POST:
        next = request.POST["next"]
    elif request.method == "GET" and "next" in request.GET:
        next = request.GET["next"]

    if next is not None:
        was_redirected = True
        redirect_url = next
    else:
        was_redirected = False
        redirect_url = settings.LOGIN_REDIRECT_URL

    context = {'shib_attrs': attr,
               'was_redirected': was_redirected}
    if error:
        return render_forbidden('shibboleth/attribute_error.html',
                                  context,
                                  context_instance=RequestContext(request))
    try:
        username = attr[settings.SHIB_USERNAME]
        # TODO this should log a misconfiguration.
    except:
        return render_forbidden('shibboleth/attribute_error.html',
                                  context,
                                  context_instance=RequestContext(request))

    if not attr[settings.SHIB_USERNAME] or attr[settings.SHIB_USERNAME] == '':
        return render_forbidden('shibboleth/attribute_error.html',
                                  context,
                                  context_instance=RequestContext(request))

    try:
        user = User.objects.get(username=attr[settings.SHIB_USERNAME])
    except User.DoesNotExist:
        user = User.objects.create_user(attr[settings.SHIB_USERNAME], attr[settings.SHIB_EMAIL], '')

    user.set_unusable_password()
    try:
        user.email = attr[settings.SHIB_EMAIL]
        user.first_name = attr[settings.SHIB_FIRST_NAME]
        user.last_name = attr[settings.SHIB_LAST_NAME]
    except:
        pass
    user.save()

    user.backend = 'django.contrib.auth.backends.ModelBackend'
    login(request, user)
    shib_logon_done.send(sender=shib_register, user=user, shib_attrs=attr)

    if not redirect_url or '//' in redirect_url or ' ' in redirect_url:
        redirect_url = settings.LOGIN_REDIRECT_URL

    return HttpResponseRedirect(redirect_url)
Example #2
0
def shib_register(request):
    attr, error = parse_attributes(request.META)

    next = None
    if request.method == "POST" and "next" in request.POST:
        next = request.POST["next"]
    elif request.method == "GET" and "next" in request.GET:
        next = request.GET["next"]

    if next is not None:
        was_redirected = True
        redirect_url = next
    else:
        was_redirected = False
        redirect_url = settings.LOGIN_REDIRECT_URL

    context = {'shib_attrs': attr, 'was_redirected': was_redirected}
    if error:
        return render_forbidden('shibboleth/attribute_error.html',
                                context,
                                context_instance=RequestContext(request))
    try:
        username = attr[settings.SHIB_USERNAME]
        # TODO this should log a misconfiguration.
    except:
        return render_forbidden('shibboleth/attribute_error.html',
                                context,
                                context_instance=RequestContext(request))

    if not attr[settings.SHIB_USERNAME] or attr[settings.SHIB_USERNAME] == '':
        return render_forbidden('shibboleth/attribute_error.html',
                                context,
                                context_instance=RequestContext(request))

    try:
        user = User.objects.get(username=attr[settings.SHIB_USERNAME])
    except User.DoesNotExist:
        user = User.objects.create_user(attr[settings.SHIB_USERNAME],
                                        attr[settings.SHIB_EMAIL], '')

    user.set_unusable_password()
    try:
        user.email = attr[settings.SHIB_EMAIL]
        user.first_name = attr[settings.SHIB_FIRST_NAME]
        user.last_name = attr[settings.SHIB_LAST_NAME]
    except:
        pass
    user.save()

    user.backend = 'django.contrib.auth.backends.ModelBackend'
    login(request, user)
    shib_logon_done.send(sender=shib_register, user=user, shib_attrs=attr)

    if not redirect_url or '//' in redirect_url or ' ' in redirect_url:
        redirect_url = settings.LOGIN_REDIRECT_URL

    return HttpResponseRedirect(redirect_url)
Example #3
0
def add_saml_data(applicant, request):
    attrs, error = parse_attributes(request.META)
    applicant.first_name = attrs['first_name']
    applicant.last_name = attrs['last_name']
    applicant.email = attrs['email']
    applicant.saml_id = attrs['persistent_id']
    applicant.telephone = attrs.get('telephone', None)
    applicant.institute = Institute.objects.get(saml_entityid=attrs['idp'])
    applicant.save()
    return applicant
Example #4
0
 def wrap(request, *args, **kwargs):
     if 'HTTP_SHIB_SESSION_ID' in request.META and request.META['HTTP_SHIB_SESSION_ID']:
         attr, error = parse_attributes(request.META)
         if error:
             return render_to_response('shibboleth/attribute_error.html', 
                                       {'shib_attrs': attr}, 
                                       context_instance=RequestContext(request))
     else:
         return HttpResponseRedirect(build_shib_url(request, request.build_absolute_uri()))
     
     return f(request, *args, **kwargs)
Example #5
0
def get_saml_user(request):
    attrs, error = parse_attributes(request.META)
    return SAMLUser(**attrs)