diff options
author | ArthurHoaro <arthur@hoa.ro> | 2015-11-04 19:53:59 +0100 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2015-11-04 19:53:59 +0100 |
commit | d01c234235411bafb97661d335fcb6ea1e67ffbc (patch) | |
tree | 0cade3729406e61435e63b7b27e4957f8a2abd47 | |
parent | 38bedfbbcdd2a40e9f04f5753e0fd6f4fd513c21 (diff) | |
download | Shaarli-d01c234235411bafb97661d335fcb6ea1e67ffbc.tar.gz Shaarli-d01c234235411bafb97661d335fcb6ea1e67ffbc.tar.zst Shaarli-d01c234235411bafb97661d335fcb6ea1e67ffbc.zip |
Fixes #356
* adding a link should return added link's hash
* allow redirection relative urls in generateLocation
-rwxr-xr-x | application/Utils.php | 11 | ||||
-rwxr-xr-x | index.php | 10 | ||||
-rwxr-xr-x | tests/UtilsTest.php | 2 |
3 files changed, 15 insertions, 8 deletions
diff --git a/application/Utils.php b/application/Utils.php index 1422961d..120333c5 100755 --- a/application/Utils.php +++ b/application/Utils.php | |||
@@ -97,12 +97,12 @@ function checkDateFormat($format, $string) | |||
97 | */ | 97 | */ |
98 | function generateLocation($referer, $host, $loopTerms = array()) | 98 | function generateLocation($referer, $host, $loopTerms = array()) |
99 | { | 99 | { |
100 | $final_referer = '?'; | 100 | $finalReferer = '?'; |
101 | 101 | ||
102 | // No referer if it contains any value in $loopCriteria. | 102 | // No referer if it contains any value in $loopCriteria. |
103 | foreach ($loopTerms as $value) { | 103 | foreach ($loopTerms as $value) { |
104 | if (strpos($referer, $value) !== false) { | 104 | if (strpos($referer, $value) !== false) { |
105 | return $final_referer; | 105 | return $finalReferer; |
106 | } | 106 | } |
107 | } | 107 | } |
108 | 108 | ||
@@ -111,11 +111,12 @@ function generateLocation($referer, $host, $loopTerms = array()) | |||
111 | $host = substr($host, 0, $pos); | 111 | $host = substr($host, 0, $pos); |
112 | } | 112 | } |
113 | 113 | ||
114 | if (!empty($referer) && strpos(parse_url($referer, PHP_URL_HOST), $host) !== false) { | 114 | $refererHost = parse_url($referer, PHP_URL_HOST); |
115 | $final_referer = $referer; | 115 | if (!empty($referer) && (strpos($refererHost, $host) !== false || startsWith('?', $refererHost))) { |
116 | $finalReferer = $referer; | ||
116 | } | 117 | } |
117 | 118 | ||
118 | return $final_referer; | 119 | return $finalReferer; |
119 | } | 120 | } |
120 | 121 | ||
121 | /** | 122 | /** |
@@ -1354,10 +1354,14 @@ function renderPage() | |||
1354 | pubsubhub(); | 1354 | pubsubhub(); |
1355 | 1355 | ||
1356 | // If we are called from the bookmarklet, we must close the popup: | 1356 | // If we are called from the bookmarklet, we must close the popup: |
1357 | if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { echo '<script>self.close();</script>'; exit; } | 1357 | if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { |
1358 | $returnurl = ( !empty($_POST['returnurl']) ? escape($_POST['returnurl']) : '?' ); | 1358 | echo '<script>self.close();</script>'; |
1359 | $returnurl .= '#'.smallHash($_POST['lf_linkdate']); // Scroll to the link which has been edited. | 1359 | exit; |
1360 | } | ||
1361 | |||
1362 | $returnurl = !empty($_POST['returnurl']) ? escape($_POST['returnurl']): '?'; | ||
1360 | $location = generateLocation($returnurl, $_SERVER['HTTP_HOST'], array('addlink', 'post', 'edit_link')); | 1363 | $location = generateLocation($returnurl, $_SERVER['HTTP_HOST'], array('addlink', 'post', 'edit_link')); |
1364 | $location .= '#'.smallHash($_POST['lf_linkdate']); // Scroll to the link which has been edited. | ||
1361 | header('Location: '. $location); // After saving the link, redirect to the page the user was on. | 1365 | header('Location: '. $location); // After saving the link, redirect to the page the user was on. |
1362 | exit; | 1366 | exit; |
1363 | } | 1367 | } |
diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 7f218ad5..311d4bfb 100755 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php | |||
@@ -118,6 +118,8 @@ class UtilsTest extends PHPUnit_Framework_TestCase | |||
118 | $this->assertEquals($ref, generateLocation($ref, 'localhost')); | 118 | $this->assertEquals($ref, generateLocation($ref, 'localhost')); |
119 | $ref = 'http://localhost:8080/?test'; | 119 | $ref = 'http://localhost:8080/?test'; |
120 | $this->assertEquals($ref, generateLocation($ref, 'localhost:8080')); | 120 | $this->assertEquals($ref, generateLocation($ref, 'localhost:8080')); |
121 | $ref = '?localreferer#hash'; | ||
122 | $this->assertEquals($ref, generateLocation($ref, 'localhost:8080')); | ||
121 | } | 123 | } |
122 | 124 | ||
123 | /** | 125 | /** |