1 | <?php |
||
20 | class PasswordGenerator |
||
21 | { |
||
22 | /** |
||
23 | * @var array Characters intervall utf8 dec rappresentation |
||
24 | */ |
||
25 | private $chars = [ |
||
26 | [[65, 90]], //u 117 |
||
27 | [[97, 122]], //l 108 |
||
28 | [[48, 57]], //d 100 |
||
29 | [[33, 47], [58, 64], [91, 96], [123, 126]], //s 115 |
||
30 | ]; |
||
31 | |||
32 | /** |
||
33 | * @var array Characters utf8 dec rappresentation |
||
34 | */ |
||
35 | private $groups = [ |
||
36 | 117 => 0, //u |
||
37 | 108 => 1, //l |
||
38 | 100 => 2, //d |
||
39 | 115 => 3 //s |
||
40 | ]; |
||
41 | |||
42 | |||
43 | /** |
||
44 | * Generate a random password. |
||
45 | * <pre><code class="php">use Linna\Auth\PasswordGenerator; |
||
46 | * |
||
47 | * $passwordGenerator = new PasswordGenerator(); |
||
48 | * $random = $passwordGenerator->getFromRandom(20); |
||
49 | * |
||
50 | * //var_dump result |
||
51 | * //r4Q,1J*tM7D_99q0u>61 |
||
52 | * var_dump($random); |
||
53 | * </code></pre> |
||
54 | * |
||
55 | * @param int $length Desiderated password length. |
||
56 | * @return string Random password. |
||
57 | */ |
||
58 | public function getFromRandom(int $length): string |
||
70 | |||
71 | /** |
||
72 | * Return topology for given password. |
||
73 | * <pre><code class="php">use Linna\Auth\PasswordGenerator; |
||
74 | * |
||
75 | * $passwordGenerator = new PasswordGenerator(); |
||
76 | * $topology = $passwordGenerator->getTopology('r4Q,1J*tM7D_99q0u>61'); |
||
77 | * |
||
78 | * //var_dump result |
||
79 | * //ldusdusludusddldlsdd |
||
80 | * var_dump($topology); |
||
81 | * </code></pre> |
||
82 | * @param string $password Password. |
||
83 | * |
||
84 | * @return string Topology for the argument passed password. |
||
85 | */ |
||
86 | public function getTopology(string $password): string |
||
97 | |||
98 | /** |
||
99 | * Return topology group. |
||
100 | * |
||
101 | * @param string $char |
||
102 | * |
||
103 | * @return string |
||
104 | */ |
||
105 | private function getTopologyGroup(string $char) : string |
||
125 | |||
126 | /** |
||
127 | * Generate a random password corresponding at the given topology. |
||
128 | * <pre><code class="php">use Linna\Auth\PasswordGenerator; |
||
129 | * |
||
130 | * $passwordGenerator = new PasswordGenerator(); |
||
131 | * $random = $passwordGenerator->getFromTopology('ldusdusludusddldlsdd'); |
||
132 | * |
||
133 | * //var_dump result |
||
134 | * //r4Q,1J*tM7D_99q0u>61 |
||
135 | * var_dump($random); |
||
136 | * </code></pre> |
||
137 | * |
||
138 | * @param string $topology Topology for generate password. |
||
139 | * @return string Random password corresponding the given topology. |
||
140 | * |
||
141 | * @throws InvalidArgumentException If invalid pattern is provided. |
||
142 | */ |
||
143 | public function getFromTopology(string $topology): string |
||
163 | |||
164 | /** |
||
165 | * Get random char between. |
||
166 | * |
||
167 | * @param array $interval |
||
168 | * @return string |
||
169 | */ |
||
170 | private function getRandomChar(array $interval): string |
||
181 | |||
182 | /** |
||
183 | * Check if value is between given range. |
||
184 | * |
||
185 | * @param mixed $value |
||
186 | * @param array $ranges |
||
187 | * |
||
188 | * @return bool |
||
189 | */ |
||
190 | private function inRanges($value, array $ranges): bool |
||
200 | } |
||
201 |