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:
parent
416e4e7b67
commit
87ff461470
5 changed files with 58 additions and 1 deletions
|
@ -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',
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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'),
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
src/applications/files/controller/shortcut/__init__.php
Normal file
17
src/applications/files/controller/shortcut/__init__.php
Normal 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');
|
Loading…
Reference in a new issue