/** * Add a user in the database. * A user is defined by * - a login that has to be unique and valid * - a password that has to be valid * - an alias * - an email that has to be in a correct format * * @see userExists() * @see isValidLoginString() * @see isValidPasswordString() * @see isValidEmailString() * * @exception in case of an invalid parameter */ public function addUser($userLogin, $password, $email, $alias = false, $_isPasswordHashed = false) { Piwik::checkUserHasSuperUserAccess(); $this->checkLogin($userLogin); $this->checkEmail($email); $password = Common::unsanitizeInputValue($password); if (!$_isPasswordHashed) { UsersManager::checkPassword($password); $passwordTransformed = UsersManager::getPasswordHash($password); } else { $passwordTransformed = $password; } $alias = $this->getCleanAlias($alias, $userLogin); $token_auth = $this->getTokenAuth($userLogin, $passwordTransformed); $this->model->addUser($userLogin, $passwordTransformed, $email, $alias, $token_auth, Date::now()->getDatetime()); // we reload the access list which doesn't yet take in consideration this new user Access::getInstance()->reloadAccess(); Cache::deleteTrackerCache(); /** * Triggered after a new user is created. * * @param string $userLogin The new user's login handle. */ Piwik::postEvent('UsersManager.addUser.end', array($userLogin, $email, $password, $alias)); }
private function createManyUsers() { $this->model->addUser('login1', md5('pass'), '*****@*****.**', 'alias1', md5('token1'), '2008-01-01 00:00:00'); $this->model->addUser('login2', md5('pass'), '*****@*****.**', 'alias2', md5('token2'), '2008-01-01 00:00:00'); // login3 won't have access to any site $this->model->addUser('login3', md5('pass'), '*****@*****.**', 'alias3', md5('token3'), '2008-01-01 00:00:00'); $this->model->addUser('login4', md5('pass'), '*****@*****.**', 'alias4', md5('token4'), '2008-01-01 00:00:00'); $this->model->addUser('login5', md5('pass'), '*****@*****.**', 'alias5', md5('token5'), '2008-01-01 00:00:00'); $this->model->addUser('login6', md5('pass'), '*****@*****.**', 'alias6', md5('token6'), '2008-01-01 00:00:00'); $this->model->addUser('login7', md5('pass'), '*****@*****.**', 'alias7', md5('token7'), '2008-01-01 00:00:00'); $this->model->addUser('login8', md5('pass'), '*****@*****.**', 'alias8', md5('token8'), '2008-01-01 00:00:00'); $this->model->addUser('anonymous', '', '*****@*****.**', 'anonymous', 'anonymous', '2008-01-01 00:00:00'); $this->model->setSuperUserAccess('login1', true); // we treat this one as our superuser foreach ($this->users as $login => $permissions) { foreach ($permissions as $access => $idSites) { $this->model->addUserAccess($login, $access, $idSites); } } }
/** * Authenticates user * * @return AuthResult */ public function authenticate() { $logger = StaticContainer::get('Psr\\Log\\LoggerInterface'); $model = new Model(); $user = $model->getUser($this->login); if (!$user) { $user = $model->getUserByTokenAuth($this->token_auth); if (!$user) { $logger->info("Creating user " . $this->login); $model->addUser($this->login, $this->getTokenAuthSecret(), $this->email, $this->alias, $this->token_auth, Date::now()->getDatetime()); $user = $model->getUser($this->login); } } $accessCode = $user['superuser_access'] ? AuthResult::SUCCESS_SUPERUSER_AUTH_CODE : AuthResult::SUCCESS; $this->login = $user['login']; if ($this->getViewableUserStatus() || $this->getSuperUserStatus()) { $site_ids = $this->getDefaultSiteIds(); $current_accesses = array(); foreach ($site_ids as $site_id) { $accesses = $model->getUsersAccessFromSite($site_id); foreach ($accesses as $user => $access) { if ($this->login == $user && ($access == "view" || $access == 'admin')) { $current_accesses[] = $site_id; } } } $new_accesses = array(); foreach ($site_ids as $site_id) { if (!in_array($site_id, $current_accesses)) { $new_accesses[] = $site_id; } } if (count($new_accesses) > 0) { $logger->info("Adding default site ids to " . $this->login); $model->addUserAccess($this->login, "view", $new_accesses); } } $is_superuser = $this->getSuperUserStatus(); $model->setSuperUserAccess($this->login, $is_superuser); return new AuthResult($accessCode, $this->login, $this->token_auth); }
private function createAdminUserForSite($idSite) { $login = '******'; $passwordHash = UsersManager::getPasswordHash('password'); $token = API::getInstance()->getTokenAuth($login, $passwordHash); $user = new Model(); $user->addUser($login, $passwordHash, 'admin@piwik', 'alias', $token, '2014-01-01 00:00:00'); $user->addUserAccess($login, 'admin', array($idSite)); return $token; }