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',
|
||||
'PhabricatorFileProxyController' => 'applications/files/controller/proxy',
|
||||
'PhabricatorFileProxyImage' => 'applications/files/storage/proxyimage',
|
||||
'PhabricatorFileShortcutController' => 'applications/files/controller/shortcut',
|
||||
'PhabricatorFileSideNavView' => 'applications/files/view/sidenav',
|
||||
'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob',
|
||||
'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/configuration',
|
||||
|
@ -1556,6 +1557,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFileMacroListController' => 'PhabricatorFileController',
|
||||
'PhabricatorFileProxyController' => 'PhabricatorFileController',
|
||||
'PhabricatorFileProxyImage' => 'PhabricatorFileDAO',
|
||||
'PhabricatorFileShortcutController' => 'PhabricatorFileController',
|
||||
'PhabricatorFileSideNavView' => 'AphrontView',
|
||||
'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
|
||||
'PhabricatorFileTransformController' => 'PhabricatorFileController',
|
||||
|
|
|
@ -39,6 +39,7 @@ class AphrontDefaultApplicationConfiguration
|
|||
'(?:(?P<subfilter>[^/]+)/)?' =>
|
||||
'PhabricatorDirectoryMainController',
|
||||
),
|
||||
'/F(?P<id>\d+)' => 'PhabricatorFileShortcutController',
|
||||
'/file/' => array(
|
||||
'' => 'PhabricatorFileListController',
|
||||
'filter/(?P<filter>\w+)/' => 'PhabricatorFileListController',
|
||||
|
|
|
@ -246,7 +246,8 @@ final class PhabricatorFileListController extends PhabricatorFileController {
|
|||
phutil_render_tag(
|
||||
'a',
|
||||
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>')),
|
||||
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