aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2015-11-04 19:53:59 +0100
committerArthurHoaro <arthur@hoa.ro>2015-11-04 19:53:59 +0100
commitd01c234235411bafb97661d335fcb6ea1e67ffbc (patch)
tree0cade3729406e61435e63b7b27e4957f8a2abd47
parent38bedfbbcdd2a40e9f04f5753e0fd6f4fd513c21 (diff)
downloadShaarli-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-xapplication/Utils.php11
-rwxr-xr-xindex.php10
-rwxr-xr-xtests/UtilsTest.php2
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 */
98function generateLocation($referer, $host, $loopTerms = array()) 98function 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/**
diff --git a/index.php b/index.php
index c430a200..3be6be9e 100755
--- a/index.php
+++ b/index.php
@@ -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 /**