Example #1
0
    def get_or_init_user(self, username):
        username = escape(username)
        query = "(cn=" + username + ")"
        results = ldapsearch(query, using='groups')
        # create a backdoor for people in the arc group
        ldap_query = "(& (memberuid=" + username + ") (cn=arc))"
        ldap_results = ldapsearch(ldap_query)

        # Get the list of groups that the user belongs too.
        memberOf = results[0][1]['memberOf']

        # Add the username as a list for the uid dictionary key.
        results[0][1]['uid'] = [username]

        user_info = parse_profile(results[0][1])
        first_name = user_info['first_name']
        last_name = user_info['last_name']
        email = user_info['email']

        staff = False
        student = False

        if re.search("(CN=ITS_LAB_Students_GG)", str(memberOf)):
            student = True

        if re.search("(CN=ITS_CAVS_Staff_GG)", str(memberOf)):
            staff = True

        if re.search("(CN=TLC_GG)", str(memberOf)):
            staff = True

        if ldap_results:
            staff = True

        if student or staff:
            User = get_user_model()

            user = User.objects.filter(username=username).first()

            if user is None:
                user = User(first_name=first_name, last_name=last_name, email=email, username=username)

            # Always need to reset the users permissions, to stay up to date with
            # group changes.
            user.is_active = True
            user.is_staff = staff
            user.save()

            return user

        else:
            return None
Example #2
0
    def get_or_init_user(self, username):
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            # user will have an "unusable" password
            user = User.objects.create_user(username, '')
            user.save()

        # get the user's first and last name
        results = ldap.ldapsearch("(& (uid=" + ldap.escape(username) + ") (cn=*))")
        info = ldap.parse_profile(results[0][1])
        user.first_name = info['first_name']
        user.last_name = info['last_name']
        user.email = info['email']
        user.save()

        return user
Example #3
0
File: views.py Project: kfarr2/alma
def autocomplete(request):
    """
    Does an LDAP search and returns a JSON array of objects
    """
    q = escape(request.GET.get('query', ""))
    if len(q) < 3:
        return JsonResponse([], safe=False)

    # only return a handful of results
    MAX_RESULTS = 5

    search = '(uid={q}*)'.format(q=q)
    results = ldapsearch(search, size_limit=MAX_RESULTS)
    # I don't think LDAP guarantees the sort order, so we have to sort ourselves
    results.sort(key=lambda o: o[1]['uid'][0])
    output = []

    for result in results[:MAX_RESULTS]:
        output.append(parse_profile(result[1]))

    return JsonResponse(output, safe=False)
Example #4
0
 def get_profile(self, username):
     results = ldap.ldapsearch("(uid=" + ldap.escape(username) + ")")
     dn, entry = results[0]
     profile = ldap.parse_profile(entry)
     return profile