/** * Validate the username and password. * We use a timing attack resistant approach. * * @param string $username Username. * @param string $password Password. * @return bool */ protected function validateUserPass($username, $password) { $database = $this->database; $statement = $database->prepare('SELECT digesta1 FROM users WHERE username = :username'); $statement->execute(['username' => $username]); $digest = $statement->fetch($database::FETCH_COLUMN, 0); return User::checkPassword($password, $digest); }
/** * @tags installation configuration database sqlite authentication administration */ function case_create_administrator_profile() { $this->given($configuration = new Configuration($this->helper->configuration('configuration.json', ['database' => ['dsn' => $this->helper->sqlite(), 'username' => '', 'password' => '']])), $database = CUT::createDatabase($configuration), $login = Server::ADMINISTRATOR_LOGIN, $email = '*****@*****.**', $password = '******')->when($result = CUT::createAdministratorProfile($configuration, $database, $email, $password))->then->boolean($result)->isTrue(); $this->when($result = $database->query('SELECT * FROM principals', $database::FETCH_CLASS, 'StdClass'))->then->array($collection = iterator_to_array($result))->hasSize(3)->let($tuple = $collection[0])->string($tuple->id)->isEqualTo('1')->string($tuple->uri)->isEqualTo('principals/' . $login)->string($tuple->email)->isEqualTo($email)->string($tuple->displayname)->isEqualTo('Administrator')->let($tuple = $collection[1])->string($tuple->id)->isEqualTo('2')->string($tuple->uri)->isEqualTo('principals/' . $login . '/calendar-proxy-read')->variable($tuple->email)->isNull()->variable($tuple->displayname)->isNull()->let($tuple = $collection[2])->string($tuple->id)->isEqualTo('3')->string($tuple->uri)->isEqualTo('principals/' . $login . '/calendar-proxy-write')->variable($tuple->email)->isNull()->variable($tuple->displayname)->isNull()->when($result = $database->query('SELECT * FROM users', $database::FETCH_CLASS, 'StdClass'))->then->array($collection = iterator_to_array($result))->hasSize(1)->let($tuple = $collection[0])->string($tuple->username)->isEqualTo($login)->string($tuple->digesta1)->boolean(User::checkPassword($password, $tuple->digesta1))->isTrue(); }