From 33157ed19a2f1e33e7386ea053d5f45be3e87722 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 17:28:35 -0500 Subject: [PATCH 1/9] add new site target option to external site --- external/ajax/setsites.php | 11 ++++++++++- external/appinfo/app.php | 7 ++++++- external/settings.php | 7 +++++++ external/templates/settings.php | 11 +++++++++-- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/external/ajax/setsites.php b/external/ajax/setsites.php index 7b7ee6267d..b51cac3227 100644 --- a/external/ajax/setsites.php +++ b/external/ajax/setsites.php @@ -14,7 +14,16 @@ $sites = array(); for ($i = 0; $i < sizeof($_POST['site_name']); $i++) { if (!empty($_POST['site_name'][$i]) && !empty($_POST['site_url'][$i])) { - array_push($sites, array(strip_tags($_POST['site_name'][$i]), strip_tags($_POST['site_url'][$i]), strip_tags($_POST['site_icon'][$i]))); + // make sure site_target is a safe link target type + if (!in_array($_POST['site_target'][$i], $_['targets'])) { + throw new Exception('Invalid site target, must be one of: ' . implode(", ", $_['targets'])); + } + array_push($sites, array( + strip_tags($_POST['site_name'][$i]), + strip_tags($_POST['site_url'][$i]), + strip_tags($_POST['site_icon'][$i]), + strip_tags($_POST['site_target'][$i]), + )); } } diff --git a/external/appinfo/app.php b/external/appinfo/app.php index b27fa4ef6b..be760977e6 100644 --- a/external/appinfo/app.php +++ b/external/appinfo/app.php @@ -31,12 +31,17 @@ $navigationManager = \OC::$server->getNavigationManager(); for ($i = 0; $i < sizeof($sites); $i++) { $navigationEntry = function () use ($i, $urlGenerator, $sites) { + $href = $sites[$i][1]; + if ($sites[$i][3] == '_self') { + $href = $urlGenerator->linkToRoute('external_index', ['id'=> $i + 1]); + } return [ 'id' => 'external_index' . ($i + 1), 'order' => 80 + $i, - 'href' => $urlGenerator->linkToRoute('external_index', ['id'=> $i + 1]), + 'href' => $href, 'icon' => $urlGenerator->imagePath('external', !empty($sites[$i][2]) ? $sites[$i][2] : 'external.svg'), 'name' => $sites[$i][0], + 'target' => $sites[$i][3], ]; }; $navigationManager->add($navigationEntry); diff --git a/external/settings.php b/external/settings.php index efafafd6f7..58b5f65797 100644 --- a/external/settings.php +++ b/external/settings.php @@ -27,4 +27,11 @@ $tmpl->assign('images', $images); +// _blank opens link in a new window/tab +// _top replaces the current owncloud window with link +// _self opens link in the ownCloud iframe +$tmpl->assign('targets', array('_blank', '_top', '_self')); +$tmpl->assign('targets_desc', array('New Window', 'Replace Current Window', 'Inside OwnCloud Frame')); + + return $tmpl->fetchPage(); diff --git a/external/templates/settings.php b/external/templates/settings.php index 04c84b46b4..5471f7451a 100644 --- a/external/templates/settings.php +++ b/external/templates/settings.php @@ -30,8 +30,15 @@ } else { print_unescaped(''); } - print_unescaped(' - + print_unescaped(' '); } if(sizeof($sites) === 0) { From 9353202d9881f815ef49eebddb41c88826874442 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 17:47:24 -0500 Subject: [PATCH 2/9] cleanup array generation code --- external/appinfo/app.php | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/external/appinfo/app.php b/external/appinfo/app.php index be760977e6..ec0d4611fd 100644 --- a/external/appinfo/app.php +++ b/external/appinfo/app.php @@ -31,17 +31,23 @@ $navigationManager = \OC::$server->getNavigationManager(); for ($i = 0; $i < sizeof($sites); $i++) { $navigationEntry = function () use ($i, $urlGenerator, $sites) { + $site_id = ($i + 1); $href = $sites[$i][1]; - if ($sites[$i][3] == '_self') { - $href = $urlGenerator->linkToRoute('external_index', ['id'=> $i + 1]); + if ($target == '_self') { + // if link is iframed, change href to point to internal url /external/ + $href = $urlGenerator->linkToRoute('external_index', ['id'=> $site_id]); } + $icon_name = empty($sites[$i][2]) ? 'external.svg' : $sites[$i][2] + $icon = $urlGenerator->imagePath('external', $icon_name) + $name = $sites[$i][0]; + $target = $sites[$i][3]; return [ - 'id' => 'external_index' . ($i + 1), - 'order' => 80 + $i, - 'href' => $href, - 'icon' => $urlGenerator->imagePath('external', !empty($sites[$i][2]) ? $sites[$i][2] : 'external.svg'), - 'name' => $sites[$i][0], - 'target' => $sites[$i][3], + 'id' => 'external_index' . $site_id, + 'order' => 80 + $i, + 'href' => $href, + 'icon' => $icon, + 'name' => $name, + 'target' => $target, ]; }; $navigationManager->add($navigationEntry); From 69e9b676d699693dc107ba9c1b9d33c92136da0a Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 17:48:25 -0500 Subject: [PATCH 3/9] remove comment --- external/settings.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/external/settings.php b/external/settings.php index 58b5f65797..e309a453ac 100644 --- a/external/settings.php +++ b/external/settings.php @@ -26,10 +26,6 @@ } $tmpl->assign('images', $images); - -// _blank opens link in a new window/tab -// _top replaces the current owncloud window with link -// _self opens link in the ownCloud iframe $tmpl->assign('targets', array('_blank', '_top', '_self')); $tmpl->assign('targets_desc', array('New Window', 'Replace Current Window', 'Inside OwnCloud Frame')); From 77dfd89220086fcb90e5e918c42d676669969e58 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 17:49:59 -0500 Subject: [PATCH 4/9] fix targets_desc name --- external/templates/settings.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/external/templates/settings.php b/external/templates/settings.php index 5471f7451a..3f8ad99d85 100644 --- a/external/templates/settings.php +++ b/external/templates/settings.php @@ -33,9 +33,9 @@ print_unescaped(' From 5e461d4db13e0eb4f7ae89356e1f0d0b724d05ec Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 17:53:21 -0500 Subject: [PATCH 5/9] save config arrays to variables --- external/settings.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/external/settings.php b/external/settings.php index e309a453ac..3fcb37a2e8 100644 --- a/external/settings.php +++ b/external/settings.php @@ -26,8 +26,14 @@ } $tmpl->assign('images', $images); -$tmpl->assign('targets', array('_blank', '_top', '_self')); -$tmpl->assign('targets_desc', array('New Window', 'Replace Current Window', 'Inside OwnCloud Frame')); + +// _blank opens link in a new window/tab +// _top replaces the current owncloud window with link +// _self opens link in the ownCloud iframe +$targets = array('_blank', '_top', '_self'); +$targets_desc = array('New Window', 'Replace Current Window', 'Inside OwnCloud Frame'); +$tmpl->assign('targets', $targets); +$tmpl->assign('targets_desc', $targets_desc); return $tmpl->fetchPage(); From 36d10024805c9306d256c12165b312fac8c63bc8 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 18:00:51 -0500 Subject: [PATCH 6/9] define targets locally instead of global --- external/ajax/setsites.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/external/ajax/setsites.php b/external/ajax/setsites.php index b51cac3227..30db88c3b9 100644 --- a/external/ajax/setsites.php +++ b/external/ajax/setsites.php @@ -11,12 +11,14 @@ OCP\User::checkAdminUser(); OCP\JSON::callCheck(); +$valid_targets = array('_blank', '_top', '_self'); // TODO: import this from external/settings.php + $sites = array(); for ($i = 0; $i < sizeof($_POST['site_name']); $i++) { if (!empty($_POST['site_name'][$i]) && !empty($_POST['site_url'][$i])) { // make sure site_target is a safe link target type - if (!in_array($_POST['site_target'][$i], $_['targets'])) { - throw new Exception('Invalid site target, must be one of: ' . implode(", ", $_['targets'])); + if (!in_array($_POST['site_target'][$i], $valid_targets)) { + throw new Exception('Invalid site target, must be one of: ' . implode(", ", $valid_targets)); } array_push($sites, array( strip_tags($_POST['site_name'][$i]), From fba246178d1a820af5b4908dd39e5632c3f495a3 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 18:05:10 -0500 Subject: [PATCH 7/9] dont change delete code --- external/templates/settings.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/external/templates/settings.php b/external/templates/settings.php index 3f8ad99d85..35d2aed688 100644 --- a/external/templates/settings.php +++ b/external/templates/settings.php @@ -38,7 +38,8 @@ print_unescaped(''); } } - print_unescaped(' + print_unescaped(' + '); } if(sizeof($sites) === 0) { From d5a4e5671a364c49b41c473a208720f945ebf896 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 18:06:07 -0500 Subject: [PATCH 8/9] unnecessary comments --- external/settings.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/external/settings.php b/external/settings.php index 3fcb37a2e8..58571366ce 100644 --- a/external/settings.php +++ b/external/settings.php @@ -27,9 +27,6 @@ $tmpl->assign('images', $images); -// _blank opens link in a new window/tab -// _top replaces the current owncloud window with link -// _self opens link in the ownCloud iframe $targets = array('_blank', '_top', '_self'); $targets_desc = array('New Window', 'Replace Current Window', 'Inside OwnCloud Frame'); $tmpl->assign('targets', $targets); From a558c2f6290f6c685019b677f781174087814271 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sat, 9 Sep 2017 18:08:36 -0500 Subject: [PATCH 9/9] darn semicolons --- external/appinfo/app.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/external/appinfo/app.php b/external/appinfo/app.php index ec0d4611fd..569c06d62f 100644 --- a/external/appinfo/app.php +++ b/external/appinfo/app.php @@ -37,8 +37,8 @@ // if link is iframed, change href to point to internal url /external/ $href = $urlGenerator->linkToRoute('external_index', ['id'=> $site_id]); } - $icon_name = empty($sites[$i][2]) ? 'external.svg' : $sites[$i][2] - $icon = $urlGenerator->imagePath('external', $icon_name) + $icon_name = empty($sites[$i][2]) ? 'external.svg' : $sites[$i][2]; + $icon = $urlGenerator->imagePath('external', $icon_name); $name = $sites[$i][0]; $target = $sites[$i][3]; return [