Page MenuHomePhabricator

D14381.id.diff
No OneTemporary

D14381.id.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2625,6 +2625,7 @@
'PhabricatorPhurlDAO' => 'applications/phurl/storage/PhabricatorPhurlDAO.php',
'PhabricatorPhurlSchemaSpec' => 'applications/phurl/storage/PhabricatorPhurlSchemaSpec.php',
'PhabricatorPhurlURL' => 'applications/phurl/storage/PhabricatorPhurlURL.php',
+ 'PhabricatorPhurlURLAccessController' => 'applications/phurl/controller/PhabricatorPhurlURLAccessController.php',
'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php',
'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php',
'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php',
@@ -6727,6 +6728,7 @@
'PhabricatorFlaggableInterface',
'PhabricatorSpacesInterface',
),
+ 'PhabricatorPhurlURLAccessController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController',
'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController',
diff --git a/src/applications/phurl/application/PhabricatorPhurlApplication.php b/src/applications/phurl/application/PhabricatorPhurlApplication.php
--- a/src/applications/phurl/application/PhabricatorPhurlApplication.php
+++ b/src/applications/phurl/application/PhabricatorPhurlApplication.php
@@ -29,6 +29,7 @@
public function getRoutes() {
return array(
'/U(?P<id>[1-9]\d*)' => 'PhabricatorPhurlURLViewController',
+ '/u/(?P<id>[1-9]\d*)' => 'PhabricatorPhurlURLAccessController',
'/phurl/' => array(
'(?:query/(?P<queryKey>[^/]+)/)?'
=> 'PhabricatorPhurlURLListController',
diff --git a/src/applications/phurl/controller/PhabricatorPhurlURLAccessController.php b/src/applications/phurl/controller/PhabricatorPhurlURLAccessController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/phurl/controller/PhabricatorPhurlURLAccessController.php
@@ -0,0 +1,28 @@
+<?php
+
+final class PhabricatorPhurlURLAccessController
+ extends PhabricatorPhurlController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
+ $id = $request->getURIData('id');
+
+ $url = id(new PhabricatorPhurlURLQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+
+ if (!$url) {
+ return new Aphront404Response();
+ }
+
+ if ($url->isValid()) {
+ return id(new AphrontRedirectResponse())
+ ->setURI($url->getLongURL())
+ ->setIsExternal(true);
+ } else {
+ return id(new AphrontRedirectResponse())->setURI('/'.$url->getMonogram());
+ }
+ }
+
+}
diff --git a/src/applications/phurl/controller/PhabricatorPhurlURLViewController.php b/src/applications/phurl/controller/PhabricatorPhurlURLViewController.php
--- a/src/applications/phurl/controller/PhabricatorPhurlURLViewController.php
+++ b/src/applications/phurl/controller/PhabricatorPhurlURLViewController.php
@@ -96,18 +96,6 @@
$url,
PhabricatorPolicyCapability::CAN_EDIT);
- $allowed_protocols = PhabricatorEnv::getEnvConfig('uri.allowed-protocols');
- $uri = new PhutilURI($url->getLongURL());
- $url_protocol = $uri->getProtocol();
-
- $can_access = false;
- $redirect_uri = $url->getMonogram();
-
- if (strlen($url_protocol)) {
- $can_access = in_array($url_protocol, $allowed_protocols);
- $redirect_uri = $uri;
- }
-
$actions
->addAction(
id(new PhabricatorActionView())
@@ -120,9 +108,8 @@
id(new PhabricatorActionView())
->setName(pht('Visit URL'))
->setIcon('fa-external-link')
- ->setHref($redirect_uri)
- ->setDisabled(!$can_edit || !$can_access)
- ->setWorkflow(!$can_edit));
+ ->setHref("u/{$id}")
+ ->setDisabled(!$url->isValid()));
return $actions;
}
diff --git a/src/applications/phurl/storage/PhabricatorPhurlURL.php b/src/applications/phurl/storage/PhabricatorPhurlURL.php
--- a/src/applications/phurl/storage/PhabricatorPhurlURL.php
+++ b/src/applications/phurl/storage/PhabricatorPhurlURL.php
@@ -72,6 +72,13 @@
return $uri;
}
+ public function isValid() {
+ $allowed_protocols = PhabricatorEnv::getEnvConfig('uri.allowed-protocols');
+ $uri = new PhutilURI($this->getLongURL());
+
+ return isset($allowed_protocols[$uri->getProtocol()]);
+ }
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 10, 10:30 AM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6720697
Default Alt Text
D14381.id.diff (4 KB)

Event Timeline