예제 #1
0
파일: views.py 프로젝트: nesi/identity
def create_request(request):
    a = auth.getAuth(request)
    if (a.cn == None or a.provider == None or a.token == None):
        return HttpResponse(status=401)
    q = NeSIUser.objects.filter(username = a.username, provider= a.provider)
    if (q.count() < 1):
        return HttpResponse(status=401)
    else:
        u = q[0]
    r = Request(user = q[0].id, message = request.POST["message"])
    r.save()
    return render_to_response("request.html")
예제 #2
0
파일: views.py 프로젝트: nesi/identity
def registration(request, resubmit=False):
    try:
        a = auth.getAuth(request)
    except KeyError:
        return HttpResponse(status=403)
    form = RequestForm()
    if (a.username ==None or a.cn == None or a.provider == None or a.token == None):
        return HttpResponse(status=403)
    
    v = VomsConnector()
    groups = v.listGroups()
    
    try:
        userDN = shib.shib2dn(shib.getACL(), a.cn, a.token, a.provider)
        # create user if does not exist
        q = NeSIUser.objects.filter(username = a.username, provider= a.provider)
        if (q.count() < 1):
            u = NeSIUser(username=a.username, provider = a.provider, email = a.email, token = a.token)
            u.save()
        else:
            u = q[0]
    except shib.SlcsUserNotFoundException:
        return HttpResponse(status=403)
    
    userGroups = v.listGroups(userDN, shib.SLCS_CA)
    nonUserGroups = []
    defaultChoices = []
    for g in groups:
        try:
            userGroups.index(g)
        except ValueError:
            pq = Project.objects.filter(vo=g)
            inst = institution_mapping(a.provider)
            if ( in_ignore(g) or not ( g.startswith(inst) or (in_default(g)) or in_collaboration(g) ) ): 
                continue
            if (pq.count() > 0):
                nonUserGroups.append((g,pq[0].label))
                if (g == inst or in_default(g)):
                    defaultChoices.append(g)
            else:
                nonUserGroups.append((g,g))
    #nonUserGroups.sort(lambda a,b: cmp(a[0],b[0]))
    nonUserGroups.sort(key=lambda tuple: tuple[1])
    msgstr = ""
    if request.method == 'POST':
        form = RequestForm(request.POST)
    else:
        form = RequestForm(initial={"email": u.email, "message": msgstr})
    
    form.fields['groups'].choices = nonUserGroups
    form.fields['groups'].initial = defaultChoices

    requestSubmitted = False
    qr = Request.objects.filter(user=q[0])
    if (qr.count() > 1 and not resubmit ):
        r = qr[0]
        requestSubmitted = True
    elif ((qr.count() > 1) and resubmit):
        r = qr[0]
        r.delete()
        requestSubmitted = False
    elif request.method == 'POST':
        if (not form.is_valid()):
            pass
        else:
            m = form.cleaned_data["message"]
            groupsToApply = form.cleaned_data["groups"]
            email = form.cleaned_data["email"]
            phone = form.cleaned_data["phone"]
            r = Request(user = q[0], message = m)
#            message = "#assignee [email protected]\n"
            message = "DN is " + userDN + "\n"
            message += "email is " + email + "\n"
            message += "phone is " + phone + "\n"
            message += "I would like to apply for the following groups: " + ",".join(groupsToApply) + "\n"
            message += request.POST["message"]
            regemail.MailSender().send(message,email)
            r.save()
            requestSubmitted = True
        
    return render_to_response("reg.html", 
                              {"dn": a.cn, 
                               "groups": nonUserGroups, 
                               "userGroups": userGroups,
                               "requestSubmitted": requestSubmitted,
                               "form": form})