Move mimetype files into /resources/config/

This commit is contained in:
Lukas Reschke 2015-09-08 12:17:57 +02:00
parent a8e8a9dfb9
commit 63b2bc136a
5 changed files with 62 additions and 47 deletions

View File

@ -49,15 +49,22 @@ class Detection implements IMimeTypeDetector {
private $urlGenerator; private $urlGenerator;
/** @var string */ /** @var string */
private $configDir; private $customConfigDir;
/** @var string */
private $defaultConfigDir;
/** /**
* @param IURLGenerator $urlGenerator * @param IURLGenerator $urlGenerator
* @param string $configDir * @param string $customConfigDir
* @param string $defaultConfigDir
*/ */
public function __construct(IURLGenerator $urlGenerator, $configDir) { public function __construct(IURLGenerator $urlGenerator,
$customConfigDir,
$defaultConfigDir) {
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->configDir = $configDir; $this->customConfigDir = $customConfigDir;
$this->defaultConfigDir = $defaultConfigDir;
} }
/** /**
@ -71,7 +78,9 @@ class Detection implements IMimeTypeDetector {
* @param string $mimetype * @param string $mimetype
* @param string|null $secureMimeType * @param string|null $secureMimeType
*/ */
public function registerType($extension, $mimetype, $secureMimeType = null) { public function registerType($extension,
$mimetype,
$secureMimeType = null) {
$this->mimetypes[$extension] = array($mimetype, $secureMimeType); $this->mimetypes[$extension] = array($mimetype, $secureMimeType);
$this->secureMimeTypes[$mimetype] = $secureMimeType ?: $mimetype; $this->secureMimeTypes[$mimetype] = $secureMimeType ?: $mimetype;
} }
@ -102,10 +111,10 @@ class Detection implements IMimeTypeDetector {
return; return;
} }
$this->mimeTypeAlias = json_decode(file_get_contents($this->configDir . '/mimetypealiases.dist.json'), true); $this->mimeTypeAlias = json_decode(file_get_contents($this->defaultConfigDir . '/mimetypealiases.dist.json'), true);
if (file_exists($this->configDir . '/mimetypealiases.json')) { if (file_exists($this->customConfigDir . '/mimetypealiases.json')) {
$custom = json_decode(file_get_contents($this->configDir . '/mimetypealiases.json'), true); $custom = json_decode(file_get_contents($this->customConfigDir . '/mimetypealiases.json'), true);
$this->mimeTypeAlias = array_merge($this->mimeTypeAlias, $custom); $this->mimeTypeAlias = array_merge($this->mimeTypeAlias, $custom);
} }
} }
@ -126,15 +135,15 @@ class Detection implements IMimeTypeDetector {
return; return;
} }
$mimetypemapping = json_decode(file_get_contents($this->configDir . '/mimetypemapping.dist.json'), true); $mimetypeMapping = json_decode(file_get_contents($this->defaultConfigDir . '/mimetypemapping.dist.json'), true);
//Check if need to load custom mappings //Check if need to load custom mappings
if (file_exists($this->configDir . '/mimetypemapping.json')) { if (file_exists($this->customConfigDir . '/mimetypemapping.json')) {
$custom = json_decode(file_get_contents($this->configDir . '/mimetypemapping.json'), true); $custom = json_decode(file_get_contents($this->customConfigDir . '/mimetypemapping.json'), true);
$mimetypemapping = array_merge($mimetypemapping, $custom); $mimetypeMapping = array_merge($mimetypeMapping, $custom);
} }
$this->registerTypeArray($mimetypemapping); $this->registerTypeArray($mimetypeMapping);
} }
/** /**

View File

@ -470,7 +470,9 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('MimeTypeDetector', function(Server $c) { $this->registerService('MimeTypeDetector', function(Server $c) {
return new \OC\Files\Type\Detection( return new \OC\Files\Type\Detection(
$c->getURLGenerator(), $c->getURLGenerator(),
\OC::$configDir); \OC::$SERVERROOT . '/config/',
\OC::$SERVERROOT . '/resources/config/'
);
}); });
$this->registerService('MimeTypeLoader', function(Server $c) { $this->registerService('MimeTypeLoader', function(Server $c) {
return new \OC\Files\Type\Loader( return new \OC\Files\Type\Loader(

View File

@ -1,7 +1,7 @@
{ {
"_comment" : "Array of mimetype aliases.", "_comment" : "Array of mimetype aliases.",
"_comment2": "Any changes you make here will be overwritten on an update of ownCloud.", "_comment2": "Any changes you make here will be overwritten on an update of ownCloud.",
"_comment3": "Put any custom aliases in a new file mimetypealiases.json in this directory", "_comment3": "Put any custom mappings in a new file mimetypealiases.json in the config/ folder of ownCloud",
"_comment4": "After any change to mimetypealiases.json run:", "_comment4": "After any change to mimetypealiases.json run:",
"_comment5": "./occ maintenance:mimetypesjs", "_comment5": "./occ maintenance:mimetypesjs",

View File

@ -4,7 +4,7 @@
"_comment3": "and the second (if present] is a secure alternative", "_comment3": "and the second (if present] is a secure alternative",
"_comment4": "Any changes you make here will be overwritten on an update of ownCloud", "_comment4": "Any changes you make here will be overwritten on an update of ownCloud",
"_comment5": "Put any custom mappings in a new file mimetypemapping.json in this directory", "_comment5": "Put any custom mappings in a new file mimetypemapping.json in the config/ folder of ownCloud",
"3gp": ["video/3gpp"], "3gp": ["video/3gpp"],

View File

@ -19,58 +19,64 @@
* *
*/ */
namespace OC\Files\Type; namespace Test\Files\Type;
use \OC\Files\Type\Detection; use \OC\Files\Type\Detection;
class DetectionTest extends \Test\TestCase { class DetectionTest extends \Test\TestCase {
/** @var Detection */
private $detection;
public function setUp() {
parent::setUp();
$this->detection = new Detection(
\OC::$server->getURLGenerator(),
\OC::$SERVERROOT . '/config/',
\OC::$SERVERROOT . '/resources/config/'
);
}
public function testDetect() { public function testDetect() {
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir);
$dir = \OC::$SERVERROOT.'/tests/data'; $dir = \OC::$SERVERROOT.'/tests/data';
$result = $detection->detect($dir."/"); $result = $this->detection->detect($dir."/");
$expected = 'httpd/unix-directory'; $expected = 'httpd/unix-directory';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
$result = $detection->detect($dir."/data.tar.gz"); $result = $this->detection->detect($dir."/data.tar.gz");
$expected = 'application/x-gzip'; $expected = 'application/x-gzip';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
$result = $detection->detect($dir."/data.zip"); $result = $this->detection->detect($dir."/data.zip");
$expected = 'application/zip'; $expected = 'application/zip';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
$result = $detection->detect($dir."/testimagelarge.svg"); $result = $this->detection->detect($dir."/testimagelarge.svg");
$expected = 'image/svg+xml'; $expected = 'image/svg+xml';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
$result = $detection->detect($dir."/testimage.png"); $result = $this->detection->detect($dir."/testimage.png");
$expected = 'image/png'; $expected = 'image/png';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
} }
public function testGetSecureMimeType() { public function testGetSecureMimeType() {
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir); $result = $this->detection->getSecureMimeType('image/svg+xml');
$result = $detection->getSecureMimeType('image/svg+xml');
$expected = 'text/plain'; $expected = 'text/plain';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
$result = $detection->getSecureMimeType('image/png'); $result = $this->detection->getSecureMimeType('image/png');
$expected = 'image/png'; $expected = 'image/png';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
} }
public function testDetectPath() { public function testDetectPath() {
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir); $this->assertEquals('text/plain', $this->detection->detectPath('foo.txt'));
$this->assertEquals('image/png', $this->detection->detectPath('foo.png'));
$this->assertEquals('text/plain', $detection->detectPath('foo.txt')); $this->assertEquals('image/png', $this->detection->detectPath('foo.bar.png'));
$this->assertEquals('image/png', $detection->detectPath('foo.png')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('.png'));
$this->assertEquals('image/png', $detection->detectPath('foo.bar.png')); $this->assertEquals('application/octet-stream', $this->detection->detectPath('foo'));
$this->assertEquals('application/octet-stream', $detection->detectPath('.png')); $this->assertEquals('application/octet-stream', $this->detection->detectPath(''));
$this->assertEquals('application/octet-stream', $detection->detectPath('foo'));
$this->assertEquals('application/octet-stream', $detection->detectPath(''));
} }
public function testDetectString() { public function testDetectString() {
@ -78,16 +84,14 @@ class DetectionTest extends \Test\TestCase {
$this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows'); $this->markTestSkipped('[Windows] Strings have mimetype application/octet-stream on Windows');
} }
$detection = new Detection(\OC::$server->getURLGenerator(), \OC::$configDir); $result = $this->detection->detectString("/data/data.tar.gz");
$result = $detection->detectString("/data/data.tar.gz");
$expected = 'text/plain; charset=us-ascii'; $expected = 'text/plain; charset=us-ascii';
$this->assertEquals($expected, $result); $this->assertEquals($expected, $result);
} }
public function testMimeTypeIcon() { public function testMimeTypeIcon() {
if (!class_exists('org\\bovigo\\vfs\\vfsStream')) { if (!class_exists('org\\bovigo\\vfs\\vfsStream')) {
$this->markTestSkipped('Pacakge vfsStream not installed'); $this->markTestSkipped('Package vfsStream not installed');
} }
$confDir = \org\bovigo\vfs\vfsStream::setup(); $confDir = \org\bovigo\vfs\vfsStream::setup();
$mimetypealiases_dist = \org\bovigo\vfs\vfsStream::newFile('mimetypealiases.dist.json')->at($confDir); $mimetypealiases_dist = \org\bovigo\vfs\vfsStream::newFile('mimetypealiases.dist.json')->at($confDir);
@ -111,7 +115,7 @@ class DetectionTest extends \Test\TestCase {
->with($this->equalTo('core'), $this->equalTo('filetypes/folder.png')) ->with($this->equalTo('core'), $this->equalTo('filetypes/folder.png'))
->willReturn('folder.svg'); ->willReturn('folder.svg');
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('dir'); $mimeType = $detection->mimeTypeIcon('dir');
$this->assertEquals('folder.svg', $mimeType); $this->assertEquals('folder.svg', $mimeType);
@ -130,7 +134,7 @@ class DetectionTest extends \Test\TestCase {
->with($this->equalTo('core'), $this->equalTo('filetypes/folder-shared.png')) ->with($this->equalTo('core'), $this->equalTo('filetypes/folder-shared.png'))
->willReturn('folder-shared.svg'); ->willReturn('folder-shared.svg');
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('dir-shared'); $mimeType = $detection->mimeTypeIcon('dir-shared');
$this->assertEquals('folder-shared.svg', $mimeType); $this->assertEquals('folder-shared.svg', $mimeType);
@ -150,7 +154,7 @@ class DetectionTest extends \Test\TestCase {
->with($this->equalTo('core'), $this->equalTo('filetypes/folder-external.png')) ->with($this->equalTo('core'), $this->equalTo('filetypes/folder-external.png'))
->willReturn('folder-external.svg'); ->willReturn('folder-external.svg');
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('dir-external'); $mimeType = $detection->mimeTypeIcon('dir-external');
$this->assertEquals('folder-external.svg', $mimeType); $this->assertEquals('folder-external.svg', $mimeType);
@ -170,7 +174,7 @@ class DetectionTest extends \Test\TestCase {
->with($this->equalTo('core'), $this->equalTo('filetypes/my-type.png')) ->with($this->equalTo('core'), $this->equalTo('filetypes/my-type.png'))
->willReturn('my-type.svg'); ->willReturn('my-type.svg');
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('my-type'); $mimeType = $detection->mimeTypeIcon('my-type');
$this->assertEquals('my-type.svg', $mimeType); $this->assertEquals('my-type.svg', $mimeType);
@ -200,7 +204,7 @@ class DetectionTest extends \Test\TestCase {
} }
)); ));
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('my-type'); $mimeType = $detection->mimeTypeIcon('my-type');
$this->assertEquals('my.svg', $mimeType); $this->assertEquals('my.svg', $mimeType);
@ -231,7 +235,7 @@ class DetectionTest extends \Test\TestCase {
} }
)); ));
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('foo-bar'); $mimeType = $detection->mimeTypeIcon('foo-bar');
$this->assertEquals('file.svg', $mimeType); $this->assertEquals('file.svg', $mimeType);
@ -250,7 +254,7 @@ class DetectionTest extends \Test\TestCase {
->with($this->equalTo('core'), $this->equalTo('filetypes/foo-bar.png')) ->with($this->equalTo('core'), $this->equalTo('filetypes/foo-bar.png'))
->willReturn('foo-bar.svg'); ->willReturn('foo-bar.svg');
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('foo-bar'); $mimeType = $detection->mimeTypeIcon('foo-bar');
$this->assertEquals('foo-bar.svg', $mimeType); $this->assertEquals('foo-bar.svg', $mimeType);
$mimeType = $detection->mimeTypeIcon('foo-bar'); $mimeType = $detection->mimeTypeIcon('foo-bar');
@ -276,7 +280,7 @@ class DetectionTest extends \Test\TestCase {
->with($this->equalTo('core'), $this->equalTo('filetypes/foobar-baz.png')) ->with($this->equalTo('core'), $this->equalTo('filetypes/foobar-baz.png'))
->willReturn('foobar-baz.svg'); ->willReturn('foobar-baz.svg');
$detection = new Detection($urlGenerator, $confDir->url()); $detection = new Detection($urlGenerator, $confDir->url(), $confDir->url());
$mimeType = $detection->mimeTypeIcon('foo'); $mimeType = $detection->mimeTypeIcon('foo');
$this->assertEquals('foobar-baz.svg', $mimeType); $this->assertEquals('foobar-baz.svg', $mimeType);
} }