1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-19 05:12:41 +01:00

Add /F123 shortcut

Summary:
I wanted to point someone on a file uploaded to Phabricator and the normal link is just too long.

I guess that this also improves security. Because pointing someone to the file directly reveals the secret key used in /data/ and it can be served without auth?

We already use `{F123}` so there will be no conflicts in future because we wouldn't want to reuse it for something else.

I promote the link on /file/ - it adds one redirect but I think it's worth it. I also considered making the link from the File ID column but there are already too many links (with some duplicity).

Test Plan:
/file/
/F123 (redirect)
/F9999999999 (404)

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Koolvin

Differential Revision: https://secure.phabricator.com/D2380
This commit is contained in:
vrana 2012-05-03 14:46:11 -07:00
parent 416e4e7b67
commit 87ff461470
5 changed files with 58 additions and 1 deletions

View file

@ -630,6 +630,7 @@ phutil_register_library_map(array(
'PhabricatorFileMacroListController' => 'applications/files/controller/macrolist', 'PhabricatorFileMacroListController' => 'applications/files/controller/macrolist',
'PhabricatorFileProxyController' => 'applications/files/controller/proxy', 'PhabricatorFileProxyController' => 'applications/files/controller/proxy',
'PhabricatorFileProxyImage' => 'applications/files/storage/proxyimage', 'PhabricatorFileProxyImage' => 'applications/files/storage/proxyimage',
'PhabricatorFileShortcutController' => 'applications/files/controller/shortcut',
'PhabricatorFileSideNavView' => 'applications/files/view/sidenav', 'PhabricatorFileSideNavView' => 'applications/files/view/sidenav',
'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob', 'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob',
'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/configuration', 'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/configuration',
@ -1556,6 +1557,7 @@ phutil_register_library_map(array(
'PhabricatorFileMacroListController' => 'PhabricatorFileController', 'PhabricatorFileMacroListController' => 'PhabricatorFileController',
'PhabricatorFileProxyController' => 'PhabricatorFileController', 'PhabricatorFileProxyController' => 'PhabricatorFileController',
'PhabricatorFileProxyImage' => 'PhabricatorFileDAO', 'PhabricatorFileProxyImage' => 'PhabricatorFileDAO',
'PhabricatorFileShortcutController' => 'PhabricatorFileController',
'PhabricatorFileSideNavView' => 'AphrontView', 'PhabricatorFileSideNavView' => 'AphrontView',
'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO', 'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
'PhabricatorFileTransformController' => 'PhabricatorFileController', 'PhabricatorFileTransformController' => 'PhabricatorFileController',

View file

@ -39,6 +39,7 @@ class AphrontDefaultApplicationConfiguration
'(?:(?P<subfilter>[^/]+)/)?' => '(?:(?P<subfilter>[^/]+)/)?' =>
'PhabricatorDirectoryMainController', 'PhabricatorDirectoryMainController',
), ),
'/F(?P<id>\d+)' => 'PhabricatorFileShortcutController',
'/file/' => array( '/file/' => array(
'' => 'PhabricatorFileListController', '' => 'PhabricatorFileListController',
'filter/(?P<filter>\w+)/' => 'PhabricatorFileListController', 'filter/(?P<filter>\w+)/' => 'PhabricatorFileListController',

View file

@ -246,7 +246,8 @@ final class PhabricatorFileListController extends PhabricatorFileController {
phutil_render_tag( phutil_render_tag(
'a', 'a',
array( array(
'href' => $file->getBestURI(), // Don't use $file->getBestURI() to improve discoverability of /F.
'href' => '/F'.$file->getID(),
), ),
($name != '' ? phutil_escape_html($name) : '<em>no name</em>')), ($name != '' ? phutil_escape_html($name) : '<em>no name</em>')),
phutil_escape_html(number_format($file->getByteSize()).' bytes'), phutil_escape_html(number_format($file->getByteSize()).' bytes'),

View file

@ -0,0 +1,36 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorFileShortcutController
extends PhabricatorFileController {
private $id;
public function willProcessRequest(array $data) {
$this->id = $data['id'];
}
public function processRequest() {
$file = id(new PhabricatorFile())->load($this->id);
if (!$file) {
return new Aphront404Response();
}
return id(new AphrontRedirectResponse())->setURI($file->getBestURI());
}
}

View file

@ -0,0 +1,17 @@
<?php
/**
* This file is automatically generated. Lint this module to rebuild it.
* @generated
*/
phutil_require_module('phabricator', 'aphront/response/404');
phutil_require_module('phabricator', 'aphront/response/redirect');
phutil_require_module('phabricator', 'applications/files/controller/base');
phutil_require_module('phabricator', 'applications/files/storage/file');
phutil_require_module('phutil', 'utils');
phutil_require_source('PhabricatorFileShortcutController.php');