public static function retrieve($username = null, $hashed_password = null, $token = null) { $sql = 'SELECT username, address, password, salt, is_admin, ' . 'token, token_expiration ' . 'FROM users'; if (!is_null($username)) { $sql .= sprintf(' WHERE password="******" AND username="******"', $hashed_password, $username); } else { if (!is_null($token)) { $sql .= sprintf(' WHERE token="%s" AND token_expiration>="%s"', $token, Database::now()); } } $result = HackableDatabase::select($sql); $users = array(); foreach ($result as $r) { $is_admin = $r['is_admin'] === '1' ? true : false; $users[] = new HackableUser($r['username'], $r['address'], $r['password'], $r['salt'], $is_admin, $r['token'], $r['token_expiration']); } if (!is_null($username)) { if (empty($users)) { throw new \Lib\Exceptions\NotFoundException(); } return $users[0]; } if (!is_null($token)) { if (empty($users)) { throw new \Lib\Exceptions\UnauthorizedException(); } return $users[0]; } return $users; }