22 namespace Pdsinterop \PhpSolid ;
33
44 use Pdsinterop \PhpSolid \PasswordValidator ;
5-
5+ use Pdsinterop \PhpSolid \Db ;
6+
67 class User {
7- private static $ pdo ;
8- private static function connect () {
9- if (!isset (self ::$ pdo )) {
10- self ::$ pdo = new \PDO ("sqlite: " . DBPATH );
11- }
12- }
13-
148 private static function generateTokenCode () {
159 $ digits = 6 ;
1610 $ code = random_int (0 ,1000000 );
@@ -42,8 +36,8 @@ public static function saveVerifyToken($tokenType, $tokenData) {
4236 break ;
4337 }
4438
45- self ::connect ();
46- $ query = self ::$ pdo ->prepare (
39+ Db ::connect ();
40+ $ query = Db ::$ pdo ->prepare (
4741 'INSERT INTO verify VALUES(:code, :data) '
4842 );
4943 $ query ->execute ([
@@ -54,8 +48,8 @@ public static function saveVerifyToken($tokenType, $tokenData) {
5448 }
5549
5650 public static function getVerifyToken ($ code ) {
57- self ::connect ();
58- $ query = self ::$ pdo ->prepare (
51+ Db ::connect ();
52+ $ query = Db ::$ pdo ->prepare (
5953 'SELECT data FROM verify WHERE code=:code '
6054 );
6155 $ query ->execute ([
@@ -84,21 +78,22 @@ public static function validatePasswordStrength($password) {
8478 $ entropy = PasswordValidator::getEntropy ($ password , BANNED_PASSWORDS );
8579 $ minimumEntropy = MINIMUM_PASSWORD_ENTROPY ;
8680 if ($ entropy < $ minimumEntropy ) {
81+ error_log ("Entered pasword does not satisfy minimum entropy " );
8782 return false ;
8883 }
8984 return true ;
9085 }
9186
9287 public static function createUser ($ newUser ) {
93- self ::connect ();
88+ Db ::connect ();
9489 if (!self ::validatePasswordStrength ($ newUser ['password ' ])) {
9590 return false ;
9691 }
9792 $ generatedUserId = md5 (random_bytes (32 ));
9893 while (self ::userIdExists ($ generatedUserId )) {
9994 $ generatedUserId = md5 (random_bytes (32 ));
10095 }
101- $ query = self ::$ pdo ->prepare (
96+ $ query = Db ::$ pdo ->prepare (
10297 'INSERT INTO users VALUES (:userId, :email, :passwordHash, :data) '
10398 );
10499
@@ -126,8 +121,8 @@ public static function setUserPassword($email, $newPassword) {
126121 if (!self ::validatePasswordStrength ($ newPassword )) {
127122 return false ;
128123 }
129- self ::connect ();
130- $ query = self ::$ pdo ->prepare (
124+ Db ::connect ();
125+ $ query = Db ::$ pdo ->prepare (
131126 'UPDATE users SET password=:passwordHash WHERE email=:email '
132127 );
133128 $ queryParams = [];
@@ -139,8 +134,8 @@ public static function setUserPassword($email, $newPassword) {
139134 }
140135
141136 public static function allowClientForUser ($ clientId , $ userId ) {
142- self ::connect ();
143- $ query = self ::$ pdo ->prepare (
137+ Db ::connect ();
138+ $ query = Db ::$ pdo ->prepare (
144139 'INSERT OR REPLACE INTO allowedClients VALUES(:userId, :clientId) '
145140 );
146141 $ query ->execute ([
@@ -151,8 +146,8 @@ public static function allowClientForUser($clientId, $userId) {
151146 }
152147
153148 public static function getAllowedClients ($ userId ) {
154- self ::connect ();
155- $ query = self ::$ pdo ->prepare (
149+ Db ::connect ();
150+ $ query = Db ::$ pdo ->prepare (
156151 'SELECT clientId FROM allowedClients WHERE userId=:userId '
157152 );
158153 $ query ->execute ([
@@ -166,8 +161,8 @@ public static function getAllowedClients($userId) {
166161 }
167162
168163 public static function getStorage ($ userId ) {
169- self ::connect ();
170- $ query = self ::$ pdo ->prepare (
164+ Db ::connect ();
165+ $ query = Db ::$ pdo ->prepare (
171166 'SELECT storageUrl FROM userStorage WHERE userId=:userId '
172167 );
173168 $ query ->execute ([
@@ -181,8 +176,8 @@ public static function getStorage($userId) {
181176 }
182177
183178 public static function setStorage ($ userId , $ storageUrl ) {
184- self ::connect ();
185- $ query = self ::$ pdo ->prepare (
179+ Db ::connect ();
180+ $ query = Db ::$ pdo ->prepare (
186181 'INSERT OR REPLACE INTO storage VALUES(:userId, :storageUrl) '
187182 );
188183 $ query ->execute ([
@@ -192,8 +187,8 @@ public static function setStorage($userId, $storageUrl) {
192187 }
193188
194189 public static function getUser ($ email ) {
195- self ::connect ();
196- $ query = self ::$ pdo ->prepare (
190+ Db ::connect ();
191+ $ query = Db ::$ pdo ->prepare (
197192 'SELECT user_id, data FROM users WHERE email=:email '
198193 );
199194 $ query ->execute ([
@@ -217,8 +212,8 @@ public static function getUser($email) {
217212 }
218213
219214 public static function getUserById ($ userId ) {
220- self ::connect ();
221- $ query = self ::$ pdo ->prepare (
215+ Db ::connect ();
216+ $ query = Db ::$ pdo ->prepare (
222217 'SELECT user_id, data FROM users WHERE user_id=:userId '
223218 );
224219 $ query ->execute ([
@@ -242,8 +237,8 @@ public static function getUserById($userId) {
242237 }
243238
244239 public static function checkPassword ($ email , $ password ) {
245- self ::connect ();
246- $ query = self ::$ pdo ->prepare (
240+ Db ::connect ();
241+ $ query = Db ::$ pdo ->prepare (
247242 'SELECT password FROM users WHERE email=:email '
248243 );
249244 $ query ->execute ([
@@ -271,8 +266,8 @@ public static function getLoggedInUser() {
271266 }
272267
273268 public static function userIdExists ($ userId ) {
274- self ::connect ();
275- $ query = self ::$ pdo ->prepare (
269+ Db ::connect ();
270+ $ query = Db ::$ pdo ->prepare (
276271 'SELECT user_id FROM users WHERE user_id=:userId '
277272 );
278273 $ query ->execute ([
@@ -286,8 +281,8 @@ public static function userIdExists($userId) {
286281 }
287282
288283 public static function userEmailExists ($ email ) {
289- self ::connect ();
290- $ query = self ::$ pdo ->prepare (
284+ Db ::connect ();
285+ $ query = Db ::$ pdo ->prepare (
291286 'SELECT user_id FROM users WHERE email=:email '
292287 );
293288 $ query ->execute ([
@@ -301,8 +296,8 @@ public static function userEmailExists($email) {
301296 }
302297
303298 private static function deleteUser ($ email ) {
304- self ::connect ();
305- $ query = self ::$ pdo ->prepare (
299+ Db ::connect ();
300+ $ query = Db ::$ pdo ->prepare (
306301 'DELETE FROM users WHERE email=:email '
307302 );
308303 $ query ->execute ([
@@ -316,8 +311,8 @@ private static function deleteAllowedClients($email) {
316311 return ;
317312 }
318313
319- self ::connect ();
320- $ query = self ::$ pdo ->prepare (
314+ Db ::connect ();
315+ $ query = Db ::$ pdo ->prepare (
321316 'DELETE FROM allowedClients WHERE userId=:userId '
322317 );
323318 $ query ->execute ([
@@ -335,10 +330,10 @@ public static function deleteAccount($email) {
335330 }
336331
337332 public static function cleanupTokens () {
338- self ::connect ();
333+ Db ::connect ();
339334
340335 $ now = new \DateTime ();
341- $ query = self ::$ pdo ->prepare (
336+ $ query = Db ::$ pdo ->prepare (
342337 'DELETE FROM verify WHERE json_extract(data, \'$.expires \') < :now '
343338 );
344339 $ query ->execute ([
0 commit comments