summaryrefslogtreecommitdiff
path: root/models/ldap.php
blob: 69fe9becc5d4fc7737596c9e2b0775c089c4005c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php

namespace Model;

require_once __DIR__.'/base.php';

/**
 * LDAP model
 *
 * @package  model
 * @author   Frederic Guillot
 */
class Ldap extends Base
{
    /**
     * Authenticate a user
     *
     * @access public
     * @param  string  $username  Username
     * @param  string  $password  Password
     * @return null|boolean
     */
    public function authenticate($username, $password)
    {
        if (! function_exists('ldap_connect')) {
            die('The PHP LDAP extension is required');
        }

        $ldap = ldap_connect(LDAP_SERVER, LDAP_PORT);

        if (! is_resource($ldap)) {
            die('Unable to connect to the LDAP server: "'.LDAP_SERVER.'"');
        }

        ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

        if (@ldap_bind($ldap, sprintf(LDAP_USER_DN, $username), $password)) {
            return $this->create($username);
        }

        return false;
    }

    /**
     * Create automatically a new local user after the LDAP authentication
     *
     * @access public
     * @param  string  $username  Username
     * @return bool
     */
    public function create($username)
    {
        $userModel = new User($this->db, $this->event);
        $user = $userModel->getByUsername($username);

        // There is an existing user account
        if ($user) {

            if ($user['is_ldap_user'] == 1) {

                // LDAP user already created
                return true;
            }
            else {

                // There is already a local user with that username
                return false;
            }
        }

        // Create a LDAP user
        $values = array(
            'username' => $username,
            'is_admin' => 0,
            'is_ldap_user' => 1,
        );

        return $userModel->create($values);
    }
}