Skip to content
Extraits de code Groupes Projets
Valider 69810a07 rédigé par mattab's avatar mattab
Parcourir les fichiers

SitesManager.getSitesIdFromSiteUrl should match both HTTP and HTTPS

fixes #8070
parent f2db0ad4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -411,13 +411,18 @@ class API extends \Piwik\Plugin\API ...@@ -411,13 +411,18 @@ class API extends \Piwik\Plugin\API
protected function getNormalizedUrls($url) protected function getNormalizedUrls($url)
{ {
if (strpos($url, 'www.') !== false) { // if found, remove scheme and www. from URL
$urlBis = str_replace('www.', '', $url); $hostname = str_replace('www.', '', $url);
} else { $hostname = str_replace('http://', '', $hostname);
$urlBis = str_replace('://', '://www.', $url); $hostname = str_replace('https://', '', $hostname);
}
// return all variations of the URL
return array($url, $urlBis); return array(
"http://" . $hostname,
"http://www." . $hostname,
"https://" . $hostname,
"https://www." . $hostname
);
} }
/** /**
...@@ -429,13 +434,13 @@ class API extends \Piwik\Plugin\API ...@@ -429,13 +434,13 @@ class API extends \Piwik\Plugin\API
public function getSitesIdFromSiteUrl($url) public function getSitesIdFromSiteUrl($url)
{ {
$url = $this->removeTrailingSlash($url); $url = $this->removeTrailingSlash($url);
list($url, $urlBis) = $this->getNormalizedUrls($url); list($url, $urlBis, $urlTer, $urlQuater) = $this->getNormalizedUrls($url);
if (Piwik::hasUserSuperUserAccess()) { if (Piwik::hasUserSuperUserAccess()) {
$ids = $this->getModel()->getAllSitesIdFromSiteUrl($url, $urlBis); $ids = $this->getModel()->getAllSitesIdFromSiteUrl($url, $urlBis, $urlTer, $urlQuater);
} else { } else {
$login = Piwik::getCurrentUserLogin(); $login = Piwik::getCurrentUserLogin();
$ids = $this->getModel()->getSitesIdFromSiteUrlHavingAccess($url, $urlBis, $login); $ids = $this->getModel()->getSitesIdFromSiteUrlHavingAccess($url, $urlBis, $login, $urlTer, $urlQuater);
} }
return $ids; return $ids;
......
...@@ -106,18 +106,26 @@ class Model ...@@ -106,18 +106,26 @@ class Model
* *
* @param string $url * @param string $url
* @param string $urlBis * @param string $urlBis
* @param string $urlTer
* @param string $urlQuater
* @return array list of websites ID * @return array list of websites ID
*/ */
public function getAllSitesIdFromSiteUrl($url, $urlBis) public function getAllSitesIdFromSiteUrl($url, $urlBis, $urlTer, $urlQuater)
{ {
$siteUrlTable = Common::prefixTable('site_url'); $siteUrlTable = Common::prefixTable('site_url');
$ids = $this->getDb()->fetchAll( $ids = $this->getDb()->fetchAll(
'SELECT idsite FROM ' . $this->table . ' 'SELECT idsite FROM ' . $this->table . '
WHERE (main_url = ? OR main_url = ?) ' . WHERE (main_url = ? OR main_url = ? OR main_url = ? OR main_url = ?) ' .
'UNION 'UNION
SELECT idsite FROM ' . $siteUrlTable . ' SELECT idsite FROM ' . $siteUrlTable . '
WHERE (url = ? OR url = ?) ', array($url, $urlBis, $url, $urlBis)); WHERE (url = ? OR url = ? OR url = ? OR url = ?) ',
// Bind
array( $url, $urlBis, $urlTer, $urlQuater,
$url, $urlBis, $urlTer, $urlQuater
)
);
return $ids; return $ids;
} }
......
...@@ -1002,6 +1002,32 @@ class ApiTest extends IntegrationTestCase ...@@ -1002,6 +1002,32 @@ class ApiTest extends IntegrationTestCase
$this->assertTrue(count($idsites) == 3); $this->assertTrue(count($idsites) == 3);
} }
public function testGetSitesIdFromSiteUrl_matchesBothHttpAndHttpsUrls()
{
API::getInstance()->addSite("site1", array("https://piwik.org", "http://example.com"));
$idsites = API::getInstance()->getSitesIdFromSiteUrl('http://piwik.org');
$this->assertTrue(count($idsites) == 1);
$idsites = API::getInstance()->getSitesIdFromSiteUrl('piwik.org');
$this->assertTrue(count($idsites) == 1);
$idsites = API::getInstance()->getSitesIdFromSiteUrl('https://www.piwik.org');
$this->assertTrue(count($idsites) == 1);
$idsites = API::getInstance()->getSitesIdFromSiteUrl('https://example.com');
$this->assertTrue(count($idsites) == 1);
$idsites = API::getInstance()->getSitesIdFromSiteUrl('https://random-example.com');
$this->assertTrue(count($idsites) == 0);
$idsites = API::getInstance()->getSitesIdFromSiteUrl('not-found.piwik.org');
$this->assertTrue(count($idsites) == 0);
$idsites = API::getInstance()->getSitesIdFromSiteUrl('piwik.org/not-found/');
$this->assertTrue(count($idsites) == 0);
}
public function testGetSitesIdFromSiteUrlUser() public function testGetSitesIdFromSiteUrlUser()
{ {
API::getInstance()->addSite("site1", array("http://www.piwik.net", "http://piwik.com")); API::getInstance()->addSite("site1", array("http://www.piwik.net", "http://piwik.com"));
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter