]> BookStack Code Mirror - bookstack/blob - app/Auth/Access/Ldap.php
Docker: Fix permission with node service by adding node as user
[bookstack] / app / Auth / Access / Ldap.php
1 <?php namespace BookStack\Auth\Access;
2
3 /**
4  * Class Ldap
5  * An object-orientated thin abstraction wrapper for common PHP LDAP functions.
6  * Allows the standard LDAP functions to be mocked for testing.
7  */
8 class Ldap
9 {
10
11     /**
12      * Connect to a LDAP server.
13      * @param string $hostName
14      * @param int    $port
15      * @return resource
16      */
17     public function connect($hostName, $port)
18     {
19         return ldap_connect($hostName, $port);
20     }
21
22     /**
23      * Set the value of a LDAP option for the given connection.
24      * @param resource $ldapConnection
25      * @param int $option
26      * @param mixed $value
27      * @return bool
28      */
29     public function setOption($ldapConnection, $option, $value)
30     {
31         return ldap_set_option($ldapConnection, $option, $value);
32     }
33
34     /**
35      * Set the version number for the given ldap connection.
36      * @param $ldapConnection
37      * @param $version
38      * @return bool
39      */
40     public function setVersion($ldapConnection, $version)
41     {
42         return $this->setOption($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, $version);
43     }
44
45     /**
46      * Search LDAP tree using the provided filter.
47      * @param resource   $ldapConnection
48      * @param string     $baseDn
49      * @param string     $filter
50      * @param array|null $attributes
51      * @return resource
52      */
53     public function search($ldapConnection, $baseDn, $filter, array $attributes = null)
54     {
55         return ldap_search($ldapConnection, $baseDn, $filter, $attributes);
56     }
57
58     /**
59      * Get entries from an ldap search result.
60      * @param resource $ldapConnection
61      * @param resource $ldapSearchResult
62      * @return array
63      */
64     public function getEntries($ldapConnection, $ldapSearchResult)
65     {
66         return ldap_get_entries($ldapConnection, $ldapSearchResult);
67     }
68
69     /**
70      * Search and get entries immediately.
71      * @param resource   $ldapConnection
72      * @param string     $baseDn
73      * @param string     $filter
74      * @param array|null $attributes
75      * @return resource
76      */
77     public function searchAndGetEntries($ldapConnection, $baseDn, $filter, array $attributes = null)
78     {
79         $search = $this->search($ldapConnection, $baseDn, $filter, $attributes);
80         return $this->getEntries($ldapConnection, $search);
81     }
82
83     /**
84      * Bind to LDAP directory.
85      * @param resource $ldapConnection
86      * @param string   $bindRdn
87      * @param string   $bindPassword
88      * @return bool
89      */
90     public function bind($ldapConnection, $bindRdn = null, $bindPassword = null)
91     {
92         return ldap_bind($ldapConnection, $bindRdn, $bindPassword);
93     }
94
95     /**
96      * Explode a LDAP dn string into an array of components.
97      * @param string $dn
98      * @param int $withAttrib
99      * @return array
100      */
101     public function explodeDn(string $dn, int $withAttrib)
102     {
103         return ldap_explode_dn($dn, $withAttrib);
104     }
105
106     /**
107      * Escape a string for use in an LDAP filter.
108      * @param string $value
109      * @param string $ignore
110      * @param int $flags
111      * @return string
112      */
113     public function escape(string $value, string $ignore = "", int $flags = 0)
114     {
115         return ldap_escape($value, $ignore, $flags);
116     }
117 }