示例#1
0
def ldap_display(request, order, letter):
    logger_info.info(l_fct.info_load_log_message(request))
    errors = []
    alphabet = string.ascii_lowercase
    if letter != 'all' and letter not in alphabet:
        l = 'a'
    elif letter == 'all':
        l = ''
    else:
        l = letter
    c = connect_to_ldap(request.session)
    if c.bind():
        logger_info.info(l_fct.info_login_ldap_log_message(request))
        c.search(
            search_base='ou=paris,ou=people,dc=42,dc=fr',
            search_filter='(uid={}*)'.format(l),
            search_scope=ldap3.SUBTREE,
            attributes=[
                'uid',
                'givenName',
                'jpegPhoto',
                'mobile',
                'sn',
            ]
        )
        annuaire = []
        for r in c.response:
            annuaire.append(
                {
                    'avatar': base64.b64encode(r['attributes']['jpegPhoto'][0]) if 'jpegPhoto' in r[
                        'attributes'] else '',
                    'uid': r['attributes']['uid'][0],
                    'givenName': r['attributes']['givenName'][0],
                    'mobile': r['attributes']['mobile'][0] if 'mobile' in r['attributes'] else '',
                    'sn': r['attributes']['sn'][0],
                }
            )
        c.unbind()
        annuaire.sort(
            key=itemgetter('uid'), reverse=True if order == 'reverse' else False)
    else:
        logger_error.info(l_fct.error_ldap_log_message(request, "bind"))
        errors['unknow'] = _("bind_error")
    return render(
        request,
        "ldap42/ldap_display.html",
        {
            'alphabet': alphabet,
            'annuaire': annuaire,
            'form': LdapForm(),
            'letter': letter,
            'order': order,
        }
    )
示例#2
0
def login_ldap(request):
    logger_info.info(l_fct.info_load_log_message(request))
    if request.user.is_authenticated():
        logger_error.error(l_fct.error_load_log_message(request))
        return redirect(reverse('home'))
    else:
        errors = {}
        form = LdapForm(request.POST)
        if request.method == 'POST':
            request.session['ldap_log'] = request.POST
            c = connect_to_ldap(request.session)
            if c.bind():
                logger_info.info(l_fct.info_login_ldap_log_message(request))
                c.search(
                    search_base='ou=people,dc=42,dc=fr',
                    search_filter='(uid={})'.format(request.POST['login']),
                    search_scope=ldap3.SUBTREE,
                    attributes=[
                        'uid',
                        'givenName',
                        'mobile',
                        'sn',
                        'alias'
                    ]
                )
                u = User.objects.filter(
                    username=c.response[0]['attributes']['uid'][0])
                if len(u) == 0:
                    create_user(
                        request,
                        c.response[0]['attributes']['uid'][0],
                        c.response[0]['attributes']['alias'][0],
                        request.POST['password'],
                        c.response[0]['attributes']['givenName'][0],
                        c.response[0]['attributes']['sn'][0],
                    )
                else:
                    if not hashers.check_password(request.POST['password'], u[0].password):
                        u[0].set_password(request.POST['password'])
                        u[0].save()
                user = authenticate(
                    username=request.POST['login'],
                    password=request.POST['password'],
                )
                if user is not None:
                    if user.is_active:
                        login(request, user)
                        userlang = UserLang.objects.get(user=request.user)
                        logger_info.info(
                            l_fct.info_login_class_log_message(request))
                        translation.activate(userlang.lang)
                        request.session[
                            translation.LANGUAGE_SESSION_KEY] = userlang.lang
                        redir = reverse('home')
                        if 'next' in request.GET and request.GET['next'] != reverse('login'):
                            redir = request.GET['next']
                        return redirect(
                            redir,
                            permanent=True
                        )
                    else:
                        logger_error.error(
                            l_fct.error_login_log_message(request))
                        errors['unknow'] = _("authenticate error")
                else:
                    logger_error.error(
                        l_fct.error_login_wrong_password_log_message(request))
                    errors['pass'] = _("error_wrong_password")
                c.unbind()
            else:
                logger_error.info(
                    l_fct.error_ldap_log_message(request, "bind"))
                errors['unknow'] = _("bind_error")
        else:
            form = LdapForm()
    return render(
        request,
        "ldap42/loginldap.html",
        {
            'form': form,
            'errors': errors,
        }
    )