Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15415162
D7873.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
14 KB
Referenced Files
None
Subscribers
None
D7873.diff
View Options
Index: resources/celerity/map.php
===================================================================
--- resources/celerity/map.php
+++ resources/celerity/map.php
@@ -7,7 +7,7 @@
return array(
'names' =>
array(
- 'core.pkg.css' => '6237350d',
+ 'core.pkg.css' => 'c70f102f',
'core.pkg.js' => 'e5bed99d',
'css/aphront/aphront-bars.css' => 'acda2fd6',
'css/aphront/aphront-notes.css' => '93ef49a2',
@@ -87,7 +87,7 @@
'css/application/ponder/feed.css' => 'ed499cdd',
'css/application/ponder/post.css' => '604dd0db',
'css/application/ponder/vote.css' => 'f7ae64cf',
- 'css/application/profile/profile-view.css' => '3a1ce3a0',
+ 'css/application/profile/profile-view.css' => '2c0b2070',
'css/application/projects/phabricator-object-list-view.css' => '1f269d69',
'css/application/projects/project-tag.css' => '866ceb4c',
'css/application/releeph/releeph-branch.css' => '2e8bac9d',
@@ -129,7 +129,7 @@
'css/phui/phui-info-panel.css' => '04242a5c',
'css/phui/phui-list.css' => 'ac42d16a',
'css/phui/phui-object-box.css' => '99263256',
- 'css/phui/phui-object-item-list-view.css' => '236014b6',
+ 'css/phui/phui-object-item-list-view.css' => '6247b27c',
'css/phui/phui-pinboard-view.css' => '007436fb',
'css/phui/phui-property-list-view.css' => '405c1b0e',
'css/phui/phui-remarkup-preview.css' => '9a9bf0a0',
@@ -695,7 +695,7 @@
'phabricator-object-selector-css' => '244c904f',
'phabricator-phtize' => '2abf8c21',
'phabricator-prefab' => '8925fbf3',
- 'phabricator-profile-css' => '3a1ce3a0',
+ 'phabricator-profile-css' => '2c0b2070',
'phabricator-project-tag-css' => '866ceb4c',
'phabricator-remarkup-css' => '5e94c989',
'phabricator-search-results-css' => '194d433f',
@@ -741,7 +741,7 @@
'phui-info-panel-css' => '04242a5c',
'phui-list-view-css' => 'ac42d16a',
'phui-object-box-css' => '99263256',
- 'phui-object-item-list-view-css' => '236014b6',
+ 'phui-object-item-list-view-css' => '6247b27c',
'phui-pinboard-view-css' => '007436fb',
'phui-property-list-view-css' => '405c1b0e',
'phui-remarkup-preview-css' => '9a9bf0a0',
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -98,6 +98,7 @@
'CelerityManagementWorkflow' => 'infrastructure/celerity/management/CelerityManagementWorkflow.php',
'CelerityPhabricatorResourceController' => 'infrastructure/celerity/CelerityPhabricatorResourceController.php',
'CelerityPhabricatorResources' => 'infrastructure/celerity/resources/CelerityPhabricatorResources.php',
+ 'CelerityPhysicalResources' => 'infrastructure/celerity/resources/CelerityPhysicalResources.php',
'CelerityResourceController' => 'infrastructure/celerity/CelerityResourceController.php',
'CelerityResourceGraph' => 'infrastructure/celerity/CelerityResourceGraph.php',
'CelerityResourceMap' => 'infrastructure/celerity/CelerityResourceMap.php',
@@ -2096,6 +2097,7 @@
'PhameBlogQuery' => 'applications/phame/query/PhameBlogQuery.php',
'PhameBlogSkin' => 'applications/phame/skins/PhameBlogSkin.php',
'PhameBlogViewController' => 'applications/phame/controller/blog/PhameBlogViewController.php',
+ 'PhameCelerityResources' => 'applications/phame/celerity/PhameCelerityResources.php',
'PhameController' => 'applications/phame/controller/PhameController.php',
'PhameDAO' => 'applications/phame/storage/PhameDAO.php',
'PhamePost' => 'applications/phame/storage/PhamePost.php',
@@ -2514,10 +2516,11 @@
'CelerityManagementWorkflow' => 'PhabricatorManagementWorkflow',
'CelerityPhabricatorResourceController' => 'CelerityResourceController',
'CelerityPhabricatorResources' => 'CelerityResourcesOnDisk',
+ 'CelerityPhysicalResources' => 'CelerityResources',
'CelerityResourceController' => 'PhabricatorController',
'CelerityResourceGraph' => 'AbstractDirectedGraph',
'CelerityResourceTransformerTestCase' => 'PhabricatorTestCase',
- 'CelerityResourcesOnDisk' => 'CelerityResources',
+ 'CelerityResourcesOnDisk' => 'CelerityPhysicalResources',
'CommandBuildStepImplementation' => 'VariableBuildStepImplementation',
'ConduitAPIMethod' =>
array(
@@ -4726,6 +4729,7 @@
'PhameBlogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhameBlogSkin' => 'PhabricatorController',
'PhameBlogViewController' => 'PhameController',
+ 'PhameCelerityResources' => 'CelerityResources',
'PhameController' => 'PhabricatorController',
'PhameDAO' => 'PhabricatorLiskDAO',
'PhamePost' =>
Index: src/applications/phame/celerity/PhameCelerityResources.php
===================================================================
--- /dev/null
+++ src/applications/phame/celerity/PhameCelerityResources.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * Defines Phabricator's static resources.
+ */
+final class PhameCelerityResources extends CelerityResources {
+
+ private $skin;
+
+ public function setSkin($skin) {
+ $this->skin = $skin;
+ return $this;
+ }
+
+ public function getSkin() {
+ return $this->skin;
+ }
+
+ public function getName() {
+ return 'phame:'.$this->getSkin()->getName();
+ }
+
+ public function getResourceData($name) {
+ $resource_path = $this->skin->getRootDirectory().DIRECTORY_SEPARATOR.$name;
+ return Filesystem::readFile($resource_path);
+ }
+
+}
Index: src/applications/phame/controller/PhameResourceController.php
===================================================================
--- src/applications/phame/controller/PhameResourceController.php
+++ src/applications/phame/controller/PhameResourceController.php
@@ -9,9 +9,10 @@
private $hash;
private $name;
private $root;
+ private $celerityResourceMap;
- protected function getRootDirectory() {
- return $this->root;
+ public function getCelerityResourceMap() {
+ return $this->celerityResourceMap;
}
public function willProcessRequest(array $data) {
@@ -26,9 +27,13 @@
// We require a visible blog associated with a given skin to serve
// resources, so you can't go fishing around where you shouldn't be.
+ // However, since these resources may be served off a CDN domain, we're
+ // bypassing the actual policy check. The blog needs to exist, but you
+ // don't necessarily need to be able to see it in order to see static
+ // resources on it.
$blog = id(new PhameBlogQuery())
- ->setViewer($user)
+ ->setViewer(PhabricatorUser::getOmnipotentUser())
->withIDs(array($this->id))
->executeOne();
if (!$blog) {
@@ -38,7 +43,12 @@
$skin = $blog->getSkinRenderer($request);
$spec = $skin->getSpecification();
- $this->root = $spec->getRootDirectory().DIRECTORY_SEPARATOR;
+ $resources = new PhameCelerityResources();
+ $resources->setSkin($spec);
+
+ $this->root = $spec->getRootDirectory();
+ $this->celerityResourceMap = new CelerityResourceMap($resources);
+
return $this->serveResource($this->name);
}
Index: src/infrastructure/celerity/CelerityResourceController.php
===================================================================
--- src/infrastructure/celerity/CelerityResourceController.php
+++ src/infrastructure/celerity/CelerityResourceController.php
@@ -2,8 +2,6 @@
abstract class CelerityResourceController extends PhabricatorController {
- abstract protected function getRootDirectory();
-
protected function buildResourceTransformer() {
return null;
}
@@ -16,6 +14,10 @@
return false;
}
+ public function getCelerityResourceMap() {
+ return CelerityResourceMap::getInstance();
+ }
+
protected function serveResource($path, $package_hash = null) {
// Sanity checking to keep this from exposing anything sensitive, since it
// ultimately boils down to disk reads.
@@ -37,7 +39,7 @@
return $this->makeResponseCacheable(new Aphront304Response());
}
- $map = CelerityResourceMap::getInstance();
+ $map = $this->getCelerityResourceMap();
if ($map->isPackageResource($path)) {
$resource_names = $map->getResourceNamesForPackageName($path);
Index: src/infrastructure/celerity/management/CelerityManagementMapWorkflow.php
===================================================================
--- src/infrastructure/celerity/management/CelerityManagementMapWorkflow.php
+++ src/infrastructure/celerity/management/CelerityManagementMapWorkflow.php
@@ -13,7 +13,7 @@
}
public function execute(PhutilArgumentParser $args) {
- $resources_map = CelerityResources::getAll();
+ $resources_map = CelerityPhysicalResources::getAll();
$this->log(
pht(
@@ -32,10 +32,10 @@
/**
* Rebuild the resource map for a resource source.
*
- * @param CelerityResources Resource source to rebuild.
+ * @param CelerityPhysicalResources Resource source to rebuild.
* @return void
*/
- private function rebuildResources(CelerityResources $resources) {
+ private function rebuildResources(CelerityPhysicalResources $resources) {
$this->log(
pht(
'Rebuilding resource source "%s" (%s)...',
@@ -127,10 +127,12 @@
* Find binary resources (like PNG and SWF) and return information about
* them.
*
- * @param CelerityResources Resource map to find binary resources for.
+ * @param CelerityPhysicalResources Resource map to find binary resources for.
* @return map<string, map<string, string>> Resource information map.
*/
- private function rebuildBinaryResources(CelerityResources $resources) {
+ private function rebuildBinaryResources(
+ CelerityPhysicalResources $resources) {
+
$binary_map = $resources->findBinaryResources();
$result_map = array();
@@ -150,12 +152,12 @@
/**
* Find text resources (like JS and CSS) and return information about them.
*
- * @param CelerityResources Resource map to find text resources for.
+ * @param CelerityPhysicalResources Resource map to find text resources for.
* @param CelerityResourceTransformer Configured resource transformer.
* @return map<string, map<string, string>> Resource information map.
*/
private function rebuildTextResources(
- CelerityResources $resources,
+ CelerityPhysicalResources $resources,
CelerityResourceTransformer $xformer) {
$text_map = $resources->findTextResources();
@@ -262,13 +264,13 @@
/**
* Build package specifications for a given resource source.
*
- * @param CelerityResources Resource source to rebuild.
+ * @param CelerityPhysicalResources Resource source to rebuild.
* @param list<string, string> Map of `@provides` to hashes.
* @param list<string, string> Map of hashes to resource names.
* @return map<string, map<string, string>> Package information maps.
*/
private function rebuildPackages(
- CelerityResources $resources,
+ CelerityPhysicalResources $resources,
array $symbol_map,
array $reverse_map) {
Index: src/infrastructure/celerity/resources/CelerityPhysicalResources.php
===================================================================
--- src/infrastructure/celerity/resources/CelerityPhysicalResources.php
+++ src/infrastructure/celerity/resources/CelerityPhysicalResources.php
@@ -1,36 +1,16 @@
<?php
/**
- * Defines the location of static resources.
+ * Defines the location of physical static resources which exist at build time
+ * and are precomputed into a resource map.
*/
-abstract class CelerityResources {
+abstract class CelerityPhysicalResources extends CelerityResources {
private $map;
- abstract public function getName();
abstract public function getPathToMap();
- abstract public function getResourceData($name);
abstract public function findBinaryResources();
abstract public function findTextResources();
- abstract public function getResourceModifiedTime($name);
-
- public function getCelerityHash($data) {
- $tail = PhabricatorEnv::getEnvConfig('celerity.resource-hash');
- $hash = PhabricatorHash::digest($data, $tail);
- return substr($hash, 0, 8);
- }
-
- public function getResourceType($path) {
- return CelerityResourceTransformer::getResourceType($path);
- }
-
- public function getResourceURI($hash, $name) {
- return "/res/{$hash}/{$name}";
- }
-
- public function getResourcePackages() {
- return array();
- }
public function loadMap() {
if ($this->map === null) {
@@ -45,7 +25,7 @@
$resources_map = array();
$resources_list = id(new PhutilSymbolLoader())
- ->setAncestorClass('CelerityResources')
+ ->setAncestorClass('CelerityPhysicalResources')
->loadObjects();
foreach ($resources_list as $resources) {
Index: src/infrastructure/celerity/resources/CelerityResources.php
===================================================================
--- src/infrastructure/celerity/resources/CelerityResources.php
+++ src/infrastructure/celerity/resources/CelerityResources.php
@@ -8,11 +8,11 @@
private $map;
abstract public function getName();
- abstract public function getPathToMap();
abstract public function getResourceData($name);
- abstract public function findBinaryResources();
- abstract public function findTextResources();
- abstract public function getResourceModifiedTime($name);
+
+ public function getResourceModifiedTime($name) {
+ return 0;
+ }
public function getCelerityHash($data) {
$tail = PhabricatorEnv::getEnvConfig('celerity.resource-hash');
@@ -33,40 +33,7 @@
}
public function loadMap() {
- if ($this->map === null) {
- $this->map = include $this->getPathToMap();
- }
- return $this->map;
- }
-
- public static function getAll() {
- static $resources_map;
- if ($resources_map === null) {
- $resources_map = array();
-
- $resources_list = id(new PhutilSymbolLoader())
- ->setAncestorClass('CelerityResources')
- ->loadObjects();
-
- foreach ($resources_list as $resources) {
- $name = $resources->getName();
- if (empty($resources_map[$name])) {
- $resources_map[$name] = $resources;
- } else {
- $old = get_class($resources_map[$name]);
- $new = get_class($resources);
- throw new Exception(
- pht(
- 'Celerity resource maps must have unique names, but maps %s and '.
- '%s share the same name, "%s".',
- $old,
- $new,
- $name));
- }
- }
- }
-
- return $resources_map;
+ return array();
}
}
Index: src/infrastructure/celerity/resources/CelerityResourcesOnDisk.php
===================================================================
--- src/infrastructure/celerity/resources/CelerityResourcesOnDisk.php
+++ src/infrastructure/celerity/resources/CelerityResourcesOnDisk.php
@@ -3,7 +3,7 @@
/**
* Defines the location of static resources on disk.
*/
-abstract class CelerityResourcesOnDisk extends CelerityResources {
+abstract class CelerityResourcesOnDisk extends CelerityPhysicalResources {
abstract public function getPathToResources();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Mar 21, 4:30 AM (1 w, 13 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7704444
Default Alt Text
D7873.diff (14 KB)
Attached To
Mode
D7873: Move build-time resources to "CelerityPhysicalResources" to fix Phame
Attached
Detach File
Event Timeline
Log In to Comment