public function authenticate() { // we first try if the user is the super user $rootLogin = Zend_Registry::get('config')->superuser->login; $rootPassword = Zend_Registry::get('config')->superuser->password; $rootToken = Piwik_UsersManager_API::getTokenAuth($rootLogin, $rootPassword); // echo $rootToken; // echo "<br>". $this->_credential;exit; if ($this->_identity == $rootLogin && $this->_credential == $rootToken) { return new Piwik_Auth_Result(Piwik_Auth::SUCCESS_SUPERUSER_AUTH_CODE, $this->_identity, array()); } // we then look if the user is API authenticated // API authentication works without login name, but only with the token // TODO the logic (sql select) should be in the Login plugin, not here // this class should stay simple. Another Login plugin should only have to create an auth entry // of this class in the zend_registry and it should work if (is_null($this->_identity)) { $authenticated = false; if ($this->_credential === $rootToken) { return new Piwik_Auth_Result(Piwik_Auth::SUCCESS_SUPERUSER_AUTH_CODE, $rootLogin, array()); } $login = Zend_Registry::get('db')->fetchOne('SELECT login FROM ' . Piwik::prefixTable('user') . ' WHERE token_auth = ?', array($this->_credential)); if ($login !== false) { return new Piwik_Auth_Result(Zend_Auth_Result::SUCCESS, $login, array()); } else { return new Piwik_Auth_Result(Zend_Auth_Result::FAILURE, $this->_identity, array()); } } // if not then we return the result of the database authentification provided by zend return parent::authenticate(); }
public function authenticate() { $rootLogin = Zend_Registry::get('config')->superuser->login; $rootPassword = Zend_Registry::get('config')->superuser->password; $rootToken = Piwik_UsersManager_API::getTokenAuth($rootLogin, $rootPassword); if($this->login == $rootLogin && $this->token_auth == $rootToken) { return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE, $this->login, $this->token_auth ); } if($this->token_auth === $rootToken) { return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE, $rootLogin, $rootToken ); } $login = Piwik_FetchOne( 'SELECT login FROM '.Piwik::prefixTable('user').' WHERE token_auth = ?', array($this->token_auth) ); if($login !== false) { if(is_null($this->login) || $this->login == $login) { return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS, $login, $this->token_auth ); } } return new Piwik_Auth_Result( Piwik_Auth_Result::FAILURE, $this->login, $this->token_auth ); }
/** * Authenticates user * * @return Piwik_Auth_Result */ public function authenticate() { $rootLogin = Piwik_Config::getInstance()->superuser['login']; $rootPassword = Piwik_Config::getInstance()->superuser['password']; $rootToken = Piwik_UsersManager_API::getInstance()->getTokenAuth($rootLogin, $rootPassword); if (is_null($this->login)) { if ($this->token_auth === $rootToken) { return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE, $rootLogin, $this->token_auth); } $login = Piwik_FetchOne('SELECT login FROM ' . Piwik_Common::prefixTable('user') . ' WHERE token_auth = ?', array($this->token_auth)); if (!empty($login)) { return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS, $login, $this->token_auth); } } else { if (!empty($this->login)) { if ($this->login === $rootLogin && $this->getHashTokenAuth($rootLogin, $rootToken) === $this->token_auth || $rootToken === $this->token_auth) { $this->setTokenAuth($rootToken); return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE, $rootLogin, $this->token_auth); } $login = $this->login; $userToken = Piwik_FetchOne('SELECT token_auth FROM ' . Piwik_Common::prefixTable('user') . ' WHERE login = ?', array($login)); if (!empty($userToken) && ($this->getHashTokenAuth($login, $userToken) === $this->token_auth || $userToken === $this->token_auth)) { $this->setTokenAuth($userToken); return new Piwik_Auth_Result(Piwik_Auth_Result::SUCCESS, $login, $userToken); } } } return new Piwik_Auth_Result(Piwik_Auth_Result::FAILURE, $this->login, $this->token_auth); }
public static function getInstance() { if (self::$instance == null) { $c = __CLASS__; self::$instance = new $c(); } return self::$instance; }
/** * Hooks when a website tracker cache is flushed (website/user updated, cache deleted, or empty cache) * Will record in the tracker config file the list of Admin token_auth for this website. This * will be used when the Tracking API is used with setIp(), setForceDateTime(), setVisitorId(), etc. * * @param Piwik_Event_Notification $notification * @return void */ function recordAdminUsersInCache($notification) { $idSite = $notification->getNotificationInfo(); // add the 'hosts' entry in the website array $users = Piwik_UsersManager_API::getInstance()->getUsersWithSiteAccess($idSite, 'admin'); $tokens = array(); foreach ($users as $user) { $tokens[] = $user['token_auth']; } $array =& $notification->getNotificationObject(); $array['admin_token_auth'] = $tokens; }
function index() { $view = Piwik_View::factory('UsersManager'); $IdSitesAdmin = Piwik_SitesManager_API::getSitesIdWithAdminAccess(); $idSiteSelected = 1; if(count($IdSitesAdmin) > 0) { $defaultWebsiteId = $IdSitesAdmin[0]; $idSiteSelected = Piwik_Common::getRequestVar('idsite', $defaultWebsiteId); } if($idSiteSelected==='all') { $usersAccessByWebsite = array(); } else { $usersAccessByWebsite = Piwik_UsersManager_API::getUsersAccessFromSite( $idSiteSelected ); } // requires super user access $usersLogin = Piwik_UsersManager_API::getUsersLogin(); // we dont want to display the user currently logged so that the user can't change his settings from admin to view... $currentlyLogged = Piwik::getCurrentUserLogin(); foreach($usersLogin as $login) { if(!isset($usersAccessByWebsite[$login])) { $usersAccessByWebsite[$login] = 'noaccess'; } } unset($usersAccessByWebsite[$currentlyLogged]); ksort($usersAccessByWebsite); $users = array(); if(Zend_Registry::get('access')->isSuperUser()) { $users = Piwik_UsersManager_API::getUsers(); } $view->idSiteSelected = $idSiteSelected; $view->users = $users; $view->usersAccessByWebsite = $usersAccessByWebsite; $view->formUrl = Piwik_Url::getCurrentUrl(); $view->websites = Piwik_SitesManager_API::getSitesWithAdminAccess(); $this->setGeneralVariablesView($view); $view->menu = Piwik_GetAdminMenu(); echo $view->render(); }
function redirectToCoreHomeIndex() { $defaultReport = Piwik_UsersManager_API::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), Piwik_UsersManager_API::PREFERENCE_DEFAULT_REPORT); $module = 'CoreHome'; $action = 'index'; // User preference: default report to load is the All Websites dashboard if ($defaultReport == 'MultiSites' && Piwik_PluginsManager::getInstance()->isPluginActivated('MultiSites')) { $module = 'MultiSites'; } if ($defaultReport == Piwik::getLoginPluginName()) { $module = Piwik::getLoginPluginName(); } $idSite = Piwik_Common::getRequestVar('idSite', false, 'int'); parent::redirectToIndex($module, $action, !empty($idSite) ? $idSite : null); }
/** * You can create your own Users Plugin to override this class. * Example of how you would overwrite the UsersManager_API with your own class: * Call the following in your plugin __construct() for example: * * Zend_Registry::set('UsersManager_API',Piwik_MyCustomUsersManager_API::getInstance()); * * @throws Exception * @return Piwik_UsersManager_API */ public static function getInstance() { try { $instance = Zend_Registry::get('UsersManager_API'); if (!$instance instanceof Piwik_UsersManager_API) { // Exception is caught below and corrected throw new Exception('UsersManager_API must inherit Piwik_UsersManager_API'); } self::$instance = $instance; } catch (Exception $e) { self::$instance = new self(); Zend_Registry::set('UsersManager_API', self::$instance); } return self::$instance; }
/** * Logs a couple visits for Aug 9, Aug 10, Aug 11 of 2012. */ protected function trackVisits() { //FIXMETODO return; $pwd = Zend_Registry::get('config')->superuser->password; if (strlen($pwd) != 32) { $pwd = md5($pwd); } $token_auth = Piwik_UsersManager_API::getInstance()->getTokenAuth(Zend_Registry::get('config')->superuser->login, $pwd); $python = Piwik_Common::isWindows() ? "C:\\Python27\\python.exe" : 'python'; $cmd = $python . ' "' . PIWIK_INCLUDE_PATH . '/misc/log-analytics/import_logs.py" ' . '--url="' . $this->getRootUrl() . 'tests/PHPUnit/proxy/" ' . '--idsite=' . $this->idSite . ' ' . '--token-auth="' . $token_auth . '" ' . '--recorders=4 ' . '--enable-http-errors ' . '--enable-http-redirects ' . '--enable-static ' . '--enable-bots "' . PIWIK_INCLUDE_PATH . '/tests/resources/fake_logs.log" ' . '2>&1'; echo $cmd; exec($cmd, $output, $result); if ($result !== 0) { echo "<pre>command: {$cmd}\nresult: {$result}\noutput: " . implode("\n", $output) . "</pre>"; throw new Exception("log importer failed"); } }
protected function _getDashboardView($template) { $view = Piwik_View::factory($template); $this->setGeneralVariablesView($view); $view->availableWidgets = Piwik_Common::json_encode(Piwik_GetWidgetsList()); $view->availableLayouts = $this->getAvailableLayouts(); $view->dashboardId = Piwik_Common::getRequestVar('idDashboard', 1, 'int'); $view->dashboardLayout = $this->getLayout($view->dashboardId); $userList = array(); // Copy Dashboard to User available to Super User only if (Piwik::isUserIsSuperUser()) { $users = Piwik_UsersManager_API::getInstance()->getUsers(); foreach ($users as $user) { if ($user['login'] != Piwik::getCurrentUserLogin() && $user['login'] != 'anonymous') { $userList[] = $user; } } } $view->availableUsers = $userList; return $view; }
/** * Renders the current view. * * @return string Generated template */ public function render() { try { $this->currentModule = Piwik::getModule(); $this->currentAction = Piwik::getAction(); $userLogin = Piwik::getCurrentUserLogin(); $this->userLogin = $userLogin; // workaround for #1331 $count = method_exists('Piwik', 'getWebsitesCountToDisplay') ? Piwik::getWebsitesCountToDisplay() : 1; $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAtLeastViewAccess($count); usort($sites, create_function('$site1, $site2', 'return strcasecmp($site1["name"], $site2["name"]);')); $this->sites = $sites; $this->url = Piwik_Common::sanitizeInputValue(Piwik_Url::getCurrentUrl()); $this->token_auth = Piwik::getCurrentUserTokenAuth(); $this->userHasSomeAdminAccess = Piwik::isUserHasSomeAdminAccess(); $this->userIsSuperUser = Piwik::isUserIsSuperUser(); $this->latest_version_available = Piwik_UpdateCheck::isNewestVersionAvailable(); $this->disableLink = Piwik_Common::getRequestVar('disableLink', 0, 'int'); $this->isWidget = Piwik_Common::getRequestVar('widget', 0, 'int'); if (Zend_Registry::get('config')->General->autocomplete_min_sites <= count($sites)) { $this->show_autocompleter = true; } else { $this->show_autocompleter = false; } // workaround for #1331 $this->loginModule = method_exists('Piwik', 'getLoginPluginName') ? Piwik::getLoginPluginName() : 'Login'; $user = Piwik_UsersManager_API::getInstance()->getUser($userLogin); $this->userAlias = $user['alias']; } catch (Exception $e) { // can fail, for example at installation (no plugin loaded yet) } $this->totalTimeGeneration = Zend_Registry::get('timer')->getTime(); try { $this->totalNumberOfQueries = Piwik::getQueryCount(); } catch (Exception $e) { $this->totalNumberOfQueries = 0; } // workaround for #1331 if (method_exists('Piwik', 'overrideCacheControlHeaders')) { Piwik::overrideCacheControlHeaders('no-store'); } @header('Content-Type: ' . $this->contentType); if ($this->xFrameOptions) { @header('X-Frame-Options: ' . $this->xFrameOptions); } return $this->smarty->fetch($this->template); }
/** * Renders the current view. * * @return string Generated template */ public function render() { try { $this->currentModule = Piwik::getModule(); $this->currentAction = Piwik::getAction(); $userLogin = Piwik::getCurrentUserLogin(); $this->userLogin = $userLogin; $count = Piwik::getWebsitesCountToDisplay(); $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAtLeastViewAccess($count); usort($sites, create_function('$site1, $site2', 'return strcasecmp($site1["name"], $site2["name"]);')); $this->sites = $sites; $this->url = Piwik_Common::sanitizeInputValue(Piwik_Url::getCurrentUrl()); $this->token_auth = Piwik::getCurrentUserTokenAuth(); $this->userHasSomeAdminAccess = Piwik::isUserHasSomeAdminAccess(); $this->userIsSuperUser = Piwik::isUserIsSuperUser(); $this->latest_version_available = Piwik_UpdateCheck::isNewestVersionAvailable(); $this->disableLink = Piwik_Common::getRequestVar('disableLink', 0, 'int'); $this->isWidget = Piwik_Common::getRequestVar('widget', 0, 'int'); if (Piwik_Config::getInstance()->General['autocomplete_min_sites'] <= count($sites)) { $this->show_autocompleter = true; } else { $this->show_autocompleter = false; } $this->loginModule = Piwik::getLoginPluginName(); $user = Piwik_UsersManager_API::getInstance()->getUser($userLogin); $this->userAlias = $user['alias']; } catch (Exception $e) { // can fail, for example at installation (no plugin loaded yet) } $this->totalTimeGeneration = Zend_Registry::get('timer')->getTime(); try { $this->totalNumberOfQueries = Piwik::getQueryCount(); } catch (Exception $e) { $this->totalNumberOfQueries = 0; } Piwik::overrideCacheControlHeaders('no-store'); @header('Content-Type: ' . $this->contentType); // always sending this header, sometimes empty, to ensure that Dashboard embed loads (which could call this header() multiple times, the last one will prevail) @header('X-Frame-Options: ' . (string) $this->xFrameOptions); return $this->smarty->fetch($this->template); }
public function test_authenticate() { // no login; no token auth $auth = new Piwik_Login_Auth(); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // empty login; no token auth $auth->setLogin(''); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // non-existent user $auth->setLogin('nobody'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // anonymous user doesn't exist yet $auth->setLogin('anonymous'); $auth->setTokenAuth(''); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // empty login; anonymous user doesn't exist yet $auth->setLogin(''); $auth->setTokenAuth('anonymous'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // API authentication; anonymous user doesn't exist yet $auth->setLogin(null); $auth->setTokenAuth('anonymous'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // anonymous user doesn't exist yet $auth->setLogin('anonymous'); $auth->setTokenAuth('anonymous'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); Piwik::createAnonymousUser(); // missing token_auth $auth->setLogin('anonymous'); $auth->setTokenAuth(''); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // empty login $auth->setLogin(''); $auth->setTokenAuth('anonymous'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not equal $auth->setLogin('anonymous'); $auth->setTokenAuth(0); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // API authentication $auth->setLogin(null); $auth->setTokenAuth('anonymous'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS); // valid login & token auth $auth->setLogin('anonymous'); $auth->setTokenAuth('anonymous'); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS); $user = array('login' => 'user', 'password' => "geqgeagae", 'email' => "*****@*****.**", 'alias' => "alias"); Piwik_UsersManager_API::getInstance()->addUser($user['login'], $user['password'], $user['email'], $user['alias']); $password = md5($user['password']); $tokenAuth = Piwik_UsersManager_API::getInstance()->getTokenAuth($user['login'], $password); // empty token auth $auth->setLogin($user['login']); $auth->setTokenAuth(''); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not a token auth $auth->setLogin($user['login']); $auth->setTokenAuth($user['password']); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not a token auth $auth->setLogin($user['login']); $auth->setTokenAuth($password); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // empty login $auth->setLogin(''); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not equal $auth->setLogin(0); $auth->setTokenAuth(0); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not equal $auth->setLogin(0); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not equal $auth->setLogin($user['login']); $auth->setTokenAuth(0); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // API authentication $auth->setLogin(null); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS); // valid login & token auth $auth->setLogin($user['login']); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS); // valid login & hashed token auth $auth->setLogin($user['login']); $hash = $auth->getHashTokenAuth($user['login'], $tokenAuth); $auth->setTokenAuth($hash); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS); $user = Piwik_Config::getInstance()->superuser; $password = $user['password']; $tokenAuth = Piwik_UsersManager_API::getInstance()->getTokenAuth($user['login'], $password); // empty token auth $auth->setLogin($user['login']); $auth->setTokenAuth(''); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not a token auth $auth->setLogin($user['login']); $auth->setTokenAuth($user['password']); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not a token auth $auth->setLogin($user['login']); $auth->setTokenAuth($password); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // empty login $auth->setLogin(''); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // not equal $auth->setLogin($user['login']); $auth->setTokenAuth(0); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::FAILURE); // API authentication $auth->setLogin(null); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE); // valid login & token auth $auth->setLogin($user['login']); $auth->setTokenAuth($tokenAuth); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE); // valid login & hashed token auth $auth->setLogin($user['login']); $hash = $auth->getHashTokenAuth($user['login'], $tokenAuth); $auth->setTokenAuth($hash); $rc = $auth->authenticate(); $this->assertEqual($rc->getCode(), Piwik_Auth_Result::SUCCESS_SUPERUSER_AUTH_CODE); }
/** * test getUserByEmail * * @group Plugins * @group UsersManager */ public function testGetUserByEmail() { $user = array('login' => "login", 'password' => "geqgeagae", 'email' => "*****@*****.**", 'alias' => "alias"); Piwik_UsersManager_API::getInstance()->addUser($user['login'], $user['password'], $user['email'], $user['alias']); $userByMail = Piwik_UsersManager_API::getInstance()->getUserByEmail($user['email']); $this->assertEquals($user['login'], $userByMail['login']); $this->assertEquals($user['email'], $userByMail['email']); $this->assertEquals($user['alias'], $userByMail['alias']); }
function test_getSitesIdFromSiteUrl_User() { $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1", array("http://www.piwik.net", "http://piwik.com")); $idsite = Piwik_SitesManager_API::getInstance()->addSite("site2", array("http://piwik.com", "http://piwik.net")); $idsite = Piwik_SitesManager_API::getInstance()->addSite("site3", array("http://piwik.com", "http://piwik.org")); $saveAccess = Zend_Registry::get('access'); Piwik_UsersManager_API::getInstance()->addUser("user1", "geqgegagae", "*****@*****.**", "alias"); Piwik_UsersManager_API::getInstance()->setUserAccess("user1", "view", array(1)); Piwik_UsersManager_API::getInstance()->addUser("user2", "geqgegagae", "*****@*****.**", "alias"); Piwik_UsersManager_API::getInstance()->setUserAccess("user2", "view", array(1)); Piwik_UsersManager_API::getInstance()->setUserAccess("user2", "admin", array(3)); Piwik_UsersManager_API::getInstance()->addUser("user3", "geqgegagae", "*****@*****.**", "alias"); Piwik_UsersManager_API::getInstance()->setUserAccess("user3", "view", array(1, 2)); Piwik_UsersManager_API::getInstance()->setUserAccess("user3", "admin", array(3)); $pseudoMockAccess = new FakeAccess(); FakeAccess::$superUser = false; FakeAccess::$identity = 'user1'; FakeAccess::setIdSitesView(array(1)); FakeAccess::setIdSitesAdmin(array()); Zend_Registry::set('access', $pseudoMockAccess); $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com'); $this->assertTrue(count($idsites) == 1); // testing URL normalization $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://www.piwik.com'); $this->assertTrue(count($idsites) == 1); $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.net'); $this->assertTrue(count($idsites) == 1); $pseudoMockAccess = new FakeAccess(); FakeAccess::$superUser = false; FakeAccess::$identity = 'user2'; FakeAccess::setIdSitesView(array(1)); FakeAccess::setIdSitesAdmin(array(3)); Zend_Registry::set('access', $pseudoMockAccess); $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com'); $this->assertTrue(count($idsites) == 2); $pseudoMockAccess = new FakeAccess(); FakeAccess::$superUser = false; FakeAccess::$identity = 'user3'; FakeAccess::setIdSitesView(array(1, 2)); FakeAccess::setIdSitesAdmin(array(3)); Zend_Registry::set('access', $pseudoMockAccess); $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com'); $this->assertTrue(count($idsites) == 3); Zend_Registry::set('access', $saveAccess); }
/** * Returns default date for Piwik reports * * @return string today, 2010-01-01, etc. */ protected function getDefaultPeriod() { $userSettingsDate = Piwik_UsersManager_API::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), Piwik_UsersManager_API::PREFERENCE_DEFAULT_REPORT_DATE); if ($userSettingsDate === false) { return Piwik_Config::getInstance()->General['default_period']; } if (in_array($userSettingsDate, array('today', 'yesterday'))) { return 'day'; } if (strpos($userSettingsDate, 'last') === 0 || strpos($userSettingsDate, 'previous') === 0) { return 'range'; } return $userSettingsDate; }
/** * Creates a website, then sets its creation date to a day earlier than specified dateTime * Useful to create a website now, but force data to be archived back in the past. * * @param $dateTime eg '2010-01-01 12:34:56' * @return $idSite of website created */ protected function createWebsite($dateTime, $ecommerce = 0, $siteName = 'Piwik test') { $idSite = Piwik_SitesManager_API::getInstance()->addSite($siteName, "http://piwik.net/", $ecommerce, $ips = null, $excludedQueryParameters = null, $timezone = null, $currency = null); // Manually set the website creation date to a day earlier than the earliest day we record stats for Zend_Registry::get('db')->update(Piwik_Common::prefixTable("site"), array('ts_created' => Piwik_Date::factory($dateTime)->subDay(1)->getDatetime()), "idsite = {$idSite}"); // Clear the memory Website cache Piwik_Site::clearCache(); // add access to all test users if doing controller tests if (self::$widgetTestingLevel != self::NO_WIDGET_TESTING) { $usersApi = Piwik_UsersManager_API::getInstance(); $usersApi->setUserAccess('anonymous', 'view', array($idSite)); $usersApi->setUserAccess('test_view', 'view', array($idSite)); $usersApi->setUserAccess('test_admin', 'admin', array($idSite)); } return $idSite; }
protected function lostPasswordFormValidated($loginMail, $urlToRedirect) { Piwik::setUserIsSuperUser(); $user = null; $isSuperUser = false; if ($loginMail == Zend_Registry::get('config')->superuser->email || $loginMail == Zend_Registry::get('config')->superuser->login) { $isSuperUser = true; $user = array('login' => Zend_Registry::get('config')->superuser->login, 'email' => Zend_Registry::get('config')->superuser->email); } else { if (Piwik_UsersManager_API::userExists($loginMail)) { $user = Piwik_UsersManager_API::getUser($loginMail); } else { if (Piwik_UsersManager_API::userEmailExists($loginMail)) { $user = Piwik_UsersManager_API::getUserByEmail($loginMail); } } } if ($user === null) { $messageNoAccess = Piwik_Translate('Login_InvalidUsernameEmail'); } else { $view = new Piwik_View('Login/templates/passwordsent.tpl'); $login = $user['login']; $email = $user['email']; $randomPassword = Piwik_Common::getRandomString(8); if ($isSuperUser) { $user['password'] = md5($randomPassword); Zend_Registry::get('config')->superuser = $user; } else { Piwik_UsersManager_API::updateUser($login, $randomPassword); } // send email with new password try { $mail = new Piwik_Mail(); $mail->addTo($email, $login); $mail->setSubject(Piwik_Translate('Login_MailTopicPasswordRecovery')); $mail->setBodyText(str_replace('\\n', "\n", sprintf(Piwik_Translate('Login_MailPasswordRecoveryBody'), $login, $randomPassword, Piwik_Url::getCurrentUrlWithoutQueryString()))); $piwikHost = $_SERVER['HTTP_HOST']; if (strlen($piwikHost) == 0) { $piwikHost = 'piwik.org'; } $fromEmailName = Zend_Registry::get('config')->General->login_password_recovery_email_name; $fromEmailAddress = Zend_Registry::get('config')->General->login_password_recovery_email_address; $fromEmailAddress = str_replace('{DOMAIN}', $piwikHost, $fromEmailAddress); $mail->setFrom($fromEmailAddress, $fromEmailName); @$mail->send(); } catch (Exception $e) { $view->ErrorString = $e->getMessage(); } $view->linkTitle = Piwik::getRandomTitle(); $view->urlToRedirect = $urlToRedirect; echo $view->render(); } }
/** * Get user information * * @param string $loginMail (user login or email address) * @return array ("login" => '...', "email" => '...', "password" => '...') or null, if user not found */ protected function getUserInformation($loginMail) { Piwik::setUserIsSuperUser(); $user = null; if ($loginMail == Zend_Registry::get('config')->superuser->email || $loginMail == Zend_Registry::get('config')->superuser->login) { $user = array('login' => Zend_Registry::get('config')->superuser->login, 'email' => Zend_Registry::get('config')->superuser->email, 'password' => Zend_Registry::get('config')->superuser->password); } else { if (Piwik_UsersManager_API::getInstance()->userExists($loginMail)) { $user = Piwik_UsersManager_API::getInstance()->getUser($loginMail); } else { if (Piwik_UsersManager_API::getInstance()->userEmailExists($loginMail)) { $user = Piwik_UsersManager_API::getInstance()->getUserByEmail($loginMail); } } } return $user; }
/** * normal case, reused in other tests */ function test_updateUser() { $login = "******"; $user = array('login' => $login, 'password' => "geqgeagae", 'email' => "*****@*****.**", 'alias' => "alias"); Piwik_UsersManager_API::addUser($user['login'], $user['password'], $user['email'], $user['alias']); Piwik_UsersManager_API::updateUser($login, "passowordOK", "*****@*****.**", "NEW ALIAS"); $this->_checkUserHasNotChanged($user, "passowordOK", "*****@*****.**", "NEW ALIAS"); }
/** * Get user information * * @param string $loginMail user login or email address * @return array ("login" => '...', "email" => '...', "password" => '...') or null, if user not found */ protected function getUserInformation($loginMail) { Piwik::setUserIsSuperUser(); $user = null; if ($loginMail == Piwik::getSuperUserEmail() || $loginMail == Piwik_Config::getInstance()->superuser['login']) { $user = array('login' => Piwik_Config::getInstance()->superuser['login'], 'email' => Piwik::getSuperUserEmail(), 'password' => Piwik_Config::getInstance()->superuser['password']); } else { if (Piwik_UsersManager_API::getInstance()->userExists($loginMail)) { $user = Piwik_UsersManager_API::getInstance()->getUser($loginMail); } else { if (Piwik_UsersManager_API::getInstance()->userEmailExists($loginMail)) { $user = Piwik_UsersManager_API::getInstance()->getUserByEmail($loginMail); } } } return $user; }
/** * Returns the super user token auth that can be used in tests. Can be used to * do bulk tracking. * * @return string */ public static function getTokenAuth() { // get token auth $pwd = Zend_Registry::get('config')->superuser->password; if (strlen($pwd) != 32) { $pwd = md5($pwd); } return Piwik_UsersManager_API::getInstance()->getTokenAuth(Zend_Registry::get('config')->superuser->login, $pwd); }
/** * Authenticate user and initializes the session. * Listens to Login.initSession hook. * * @param Piwik_Event_Notification $notification notification object * @throws Exception */ function initSession($notification) { $info = $notification->getNotificationObject(); $login = $info['login']; $md5Password = $info['md5Password']; $rememberMe = $info['rememberMe']; $tokenAuth = Piwik_UsersManager_API::getInstance()->getTokenAuth($login, $md5Password); $auth = Zend_Registry::get('auth'); $auth->setLogin($login); $auth->setTokenAuth($tokenAuth); $authResult = $auth->authenticate(); $authCookieName = Piwik_Config::getInstance()->General['login_cookie_name']; $authCookieExpiry = $rememberMe ? time() + Piwik_Config::getInstance()->General['login_cookie_expire'] : 0; $authCookiePath = Piwik_Config::getInstance()->General['login_cookie_path']; $cookie = new Piwik_Cookie($authCookieName, $authCookieExpiry, $authCookiePath); if (!$authResult->isValid()) { $cookie->delete(); throw new Exception(Piwik_Translate('Login_LoginPasswordNotCorrect')); } $cookie->set('login', $login); $cookie->set('token_auth', $auth->getHashTokenAuth($login, $authResult->getTokenAuth())); $cookie->setSecure(Piwik::isHttps()); $cookie->setHttpOnly(true); $cookie->save(); @Piwik_Session::regenerateId(); // remove password reset entry if it exists self::removePasswordResetInfo($login); }
public function sendEmailReport($idReport, $idSite) { $reports = $this->getReports($idSite, $period = false, $idReport); $report = reset($reports); if ($report['period'] == 'never') { $report['period'] = 'day'; } // Get user emails and languages $emails = self::getEmailsFromString($report['additional_emails']); if ($report['email_me'] == 1) { if (Piwik::getCurrentUserLogin() == $report['login']) { $emails[] = Piwik::getCurrentUserEmail(); } elseif ($report['login'] == Zend_Registry::get('config')->superuser->login) { $emails[] = Zend_Registry::get('config')->superuser->email; } else { try { $user = Piwik_UsersManager_API::getInstance()->getUser($report['login']); } catch (Exception $e) { return; } $emails[] = $user['email']; } } $language = Piwik_LanguagesManager_API::getInstance()->getLanguageForUser($report['login']); list($outputFilename, $prettyDate, $websiteName) = $this->generateReport($idReport, Piwik_Date::now()->subPeriod(1, $report['period'])->toString(), $idSite, $language, $outputType = Piwik_PDFReports_API::OUTPUT_PDF_SAVE_ON_DISK); $this->sendReportEmailPdfAttached($emails, $outputFilename, $prettyDate, $websiteName, $report); }
/** * Installation Step 5: Table Creation */ function tablesCreation() { $this->checkPreviousStepIsValid( __FUNCTION__ ); $view = new Piwik_Installation_View( $this->pathView . 'tablesCreation.tpl', $this->getInstallationSteps(), __FUNCTION__ ); $this->skipThisStep( __FUNCTION__ ); $this->createDbFromSessionInformation(); if(Piwik_Common::getRequestVar('deleteTables', 0, 'int') == 1) { Piwik::dropTables(); $view->existingTablesDeleted = true; // when the user decides to drop the tables then we dont skip the next steps anymore // workaround ZF-1743 $tmp = $this->session->skipThisStep; $tmp['firstWebsiteSetup'] = false; $tmp['displayJavascriptCode'] = false; $this->session->skipThisStep = $tmp; } $tablesInstalled = Piwik::getTablesInstalled(); $tablesToInstall = Piwik::getTablesNames(); $view->tablesInstalled = ''; if(count($tablesInstalled) > 0) { // we have existing tables $view->tablesInstalled = implode(', ', $tablesInstalled); $view->someTablesInstalled = true; $minimumCountPiwikTables = 18; $baseTablesInstalled = preg_grep('/archive_numeric|archive_blob/', $tablesInstalled, PREG_GREP_INVERT); Piwik::createAccessObject(); Piwik::setUserIsSuperUser(); if(count($baseTablesInstalled) >= $minimumCountPiwikTables && count(Piwik_SitesManager_API::getInstance()->getAllSitesId()) > 0 && count(Piwik_UsersManager_API::getInstance()->getUsers()) > 0) { $view->showReuseExistingTables = true; // when the user reuses the same tables we skip the website creation step // workaround ZF-1743 $tmp = $this->session->skipThisStep; $tmp['firstWebsiteSetup'] = true; $tmp['displayJavascriptCode'] = true; $this->session->skipThisStep = $tmp; } } else { Piwik::createTables(); Piwik::createAnonymousUser(); $updater = new Piwik_Updater(); $updater->recordComponentSuccessfullyUpdated('core', Piwik_Version::VERSION); $view->tablesCreated = true; $view->showNextStep = true; } $this->session->currentStepDone = __FUNCTION__; echo $view->render(); }
/** * @param Piwik_Event_Notification $notification notification object */ function sendReport($notification) { if (self::manageEvent($notification)) { $notificationInfo = $notification->getNotificationInfo(); $report = $notificationInfo[Piwik_PDFReports_API::REPORT_KEY]; $websiteName = $notificationInfo[Piwik_PDFReports_API::WEBSITE_NAME_KEY]; $prettyDate = $notificationInfo[Piwik_PDFReports_API::PRETTY_DATE_KEY]; $contents = $notificationInfo[Piwik_PDFReports_API::REPORT_CONTENT_KEY]; $filename = $notificationInfo[Piwik_PDFReports_API::FILENAME_KEY]; $additionalFiles = $notificationInfo[Piwik_PDFReports_API::ADDITIONAL_FILES_KEY]; $periods = self::getPeriodToFrequency(); $message = Piwik_Translate('PDFReports_EmailHello'); $subject = Piwik_Translate('General_Report') . ' ' . $websiteName . " - " . $prettyDate; $mail = new Piwik_Mail(); $mail->setSubject($subject); $fromEmailName = Piwik_Config::getInstance()->branding['use_custom_logo'] ? Piwik_Translate('CoreHome_WebAnalyticsReports') : Piwik_Translate('PDFReports_PiwikReports'); $fromEmailAddress = Piwik_Config::getInstance()->General['noreply_email_address']; $attachmentName = $subject; $mail->setFrom($fromEmailAddress, $fromEmailName); switch ($report['format']) { case 'html': // Needed when using images as attachment with cid $mail->setType(Zend_Mime::MULTIPART_RELATED); $message .= "<br/>" . Piwik_Translate('PDFReports_PleaseFindBelow', array($periods[$report['period']], $websiteName)); $mail->setBodyHtml($message . "<br/><br/>" . $contents); break; default: case 'pdf': $message .= "\n" . Piwik_Translate('PDFReports_PleaseFindAttachedFile', array($periods[$report['period']], $websiteName)); $mail->setBodyText($message); $mail->createAttachment($contents, 'application/pdf', Zend_Mime::DISPOSITION_INLINE, Zend_Mime::ENCODING_BASE64, $attachmentName . '.pdf'); break; } foreach ($additionalFiles as $additionalFile) { $fileContent = $additionalFile['content']; $at = $mail->createAttachment($fileContent, $additionalFile['mimeType'], Zend_Mime::DISPOSITION_INLINE, $additionalFile['encoding'], $additionalFile['filename']); $at->id = $additionalFile['cid']; unset($fileContent); } // Get user emails and languages $reportParameters = $report['parameters']; $emails = array(); if (isset($reportParameters[self::ADDITIONAL_EMAILS_PARAMETER])) { $emails = $reportParameters[self::ADDITIONAL_EMAILS_PARAMETER]; } if ($reportParameters[self::EMAIL_ME_PARAMETER] == 1) { if (Piwik::getCurrentUserLogin() == $report['login']) { $emails[] = Piwik::getCurrentUserEmail(); } elseif ($report['login'] == Piwik_Config::getInstance()->superuser['login']) { $emails[] = Piwik::getSuperUserEmail(); } else { try { $user = Piwik_UsersManager_API::getInstance()->getUser($report['login']); } catch (Exception $e) { return; } $emails[] = $user['email']; } } foreach ($emails as $email) { if (empty($email)) { continue; } $mail->addTo($email); try { $mail->send(); } catch (Exception $e) { // If running from piwik.php with debug, we ignore the 'email not sent' error if (!isset($GLOBALS['PIWIK_TRACKER_DEBUG']) || !$GLOBALS['PIWIK_TRACKER_DEBUG']) { throw new Exception("An error occured while sending '{$filename}' " . " to " . implode(', ', $mail->getRecipients()) . ". Error was '" . $e->getMessage() . "'"); } } $mail->clearRecipients(); } } }
public function sendEmailReport($idReport, $idSite, $period = false, $date = false) { Piwik::checkUserIsNotAnonymous(); $reports = $this->getReports($idSite, false, $idReport); $report = reset($reports); if ($report['period'] == 'never') { $report['period'] = 'day'; } if (!empty($period)) { $report['period'] = $period; } if (empty($date)) { $date = Piwik_Date::now()->subPeriod(1, $report['period'])->toString(); } // Get user emails and languages $emails = self::getEmailsFromString($report['additional_emails']); if ($report['email_me'] == 1) { if (Piwik::getCurrentUserLogin() == $report['login']) { $emails[] = Piwik::getCurrentUserEmail(); } elseif ($report['login'] == Piwik_Config::getInstance()->superuser['login']) { $emails[] = Piwik::getSuperUserEmail(); } else { try { $user = Piwik_UsersManager_API::getInstance()->getUser($report['login']); } catch (Exception $e) { return; } $emails[] = $user['email']; } } $language = Piwik_LanguagesManager_API::getInstance()->getLanguageForUser($report['login']); list($outputFilename, $prettyDate, $websiteName, $reportFormat, $additionalFiles) = $this->generateReport($idReport, $date, $idSite, $language, self::OUTPUT_SAVE_ON_DISK, $report['period']); $this->sendReportEmail($emails, $outputFilename, $prettyDate, $websiteName, $report, $reportFormat, $additionalFiles); }
/** * Get current user email address * * @return string */ public static function getCurrentUserEmail() { if (!Piwik::isUserIsSuperUser()) { $user = Piwik_UsersManager_API::getInstance()->getUser(Piwik::getCurrentUserLogin()); return $user['email']; } return self::getSuperUserEmail(); }
/** * Get current user email address * * @return string */ public static function getCurrentUserEmail() { if (!Piwik::isUserIsSuperUser()) { $user = Piwik_UsersManager_API::getInstance()->getUser(Piwik::getCurrentUserLogin()); return $user['email']; } $superuser = Zend_Registry::get('config')->superuser; return $superuser->email; }
/** * Records settings from the "User Settings" page */ public function recordUserSettings() { $response = new Piwik_API_ResponseBuilder(Piwik_Common::getRequestVar('format')); try { $this->checkTokenInUrl(); $alias = Piwik_Common::getRequestVar('alias'); $email = Piwik_Common::getRequestVar('email'); $defaultReport = Piwik_Common::getRequestVar('defaultReport'); $defaultDate = Piwik_Common::getRequestVar('defaultDate'); $newPassword = false; $password = Piwik_Common::getRequestvar('password', false); $passwordBis = Piwik_Common::getRequestvar('passwordBis', false); if(!empty($password) || !empty($passwordBis)) { if($password != $passwordBis) { throw new Exception(Piwik_Translate('Login_PasswordsDoNotMatch')); } $newPassword = $password; } $userLogin = Piwik::getCurrentUserLogin(); if(Piwik::isUserIsSuperUser()) { $superUser = Zend_Registry::get('config')->superuser; $updatedSuperUser = false; if($newPassword !== false) { $newPassword = Piwik_Common::unsanitizeInputValue($newPassword); $md5PasswordSuperUser = md5($newPassword); $superUser->password = $md5PasswordSuperUser; $updatedSuperUser = true; } if($superUser->email != $email) { $superUser->email = $email; $updatedSuperUser = true; } if($updatedSuperUser) { Zend_Registry::get('config')->superuser = $superUser->toArray(); } } else { Piwik_UsersManager_API::getInstance()->updateUser($userLogin, $newPassword, $email, $alias); if($newPassword !== false) { $newPassword = Piwik_Common::unsanitizeInputValue($newPassword); } } // logs the user in with the new password if($newPassword !== false) { $info = array( 'login' => $userLogin, 'md5Password' => md5($newPassword), 'rememberMe' => false, ); Piwik_PostEvent('Login.initSession', $info); } Piwik_UsersManager_API::getInstance()->setUserPreference($userLogin, Piwik_UsersManager_API::PREFERENCE_DEFAULT_REPORT, $defaultReport); Piwik_UsersManager_API::getInstance()->setUserPreference($userLogin, Piwik_UsersManager_API::PREFERENCE_DEFAULT_REPORT_DATE, $defaultDate); $toReturn = $response->getResponse(); } catch(Exception $e ) { $toReturn = $response->getResponseException( $e ); } echo $toReturn; }