diff options
62 files changed, 766 insertions, 90 deletions
diff --git a/apps/dav/appinfo/v1/publicwebdav.php b/apps/dav/appinfo/v1/publicwebdav.php index 5bdfd94e658..cf0488038d3 100644 --- a/apps/dav/appinfo/v1/publicwebdav.php +++ b/apps/dav/appinfo/v1/publicwebdav.php @@ -39,7 +39,8 @@ $serverFactory = new OCA\DAV\Connector\Sabre\ServerFactory( \OC::$server->getUserSession(), \OC::$server->getMountManager(), \OC::$server->getTagManager(), - \OC::$server->getEventDispatcher() + \OC::$server->getEventDispatcher(), + \OC::$server->getRequest() ); $requestUri = \OC::$server->getRequest()->getRequestUri(); diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php index f28736f1f01..8324f962b8e 100644 --- a/apps/dav/appinfo/v1/webdav.php +++ b/apps/dav/appinfo/v1/webdav.php @@ -40,7 +40,8 @@ $serverFactory = new \OCA\DAV\Connector\Sabre\ServerFactory( \OC::$server->getUserSession(), \OC::$server->getMountManager(), \OC::$server->getTagManager(), - \OC::$server->getEventDispatcher() + \OC::$server->getEventDispatcher(), + \OC::$server->getRequest() ); // Backends diff --git a/apps/dav/lib/connector/sabre/fakelockerplugin.php b/apps/dav/lib/connector/sabre/fakelockerplugin.php new file mode 100644 index 00000000000..493d3b0ade4 --- /dev/null +++ b/apps/dav/lib/connector/sabre/fakelockerplugin.php @@ -0,0 +1,159 @@ +<?php +/** + * @author Lukas Reschke <lukas@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\DAV\Connector\Sabre; + +use Sabre\DAV\Locks\LockInfo; +use Sabre\DAV\Property\LockDiscovery; +use Sabre\DAV\Property\SupportedLock; +use Sabre\DAV\ServerPlugin; +use Sabre\HTTP\RequestInterface; +use Sabre\HTTP\ResponseInterface; +use Sabre\DAV\PropFind; +use Sabre\DAV\INode; + +/** + * Class FakeLockerPlugin is a plugin only used when connections come in from + * OS X via Finder. The fake locking plugin does emulate Class 2 WebDAV support + * (locking of files) which allows Finder to access the storage in write mode as + * well. + * + * No real locking is performed, instead the plugin just returns always positive + * responses. + * + * @see https://github.com/owncloud/core/issues/17732 + * @package OCA\DAV\Connector\Sabre + */ +class FakeLockerPlugin extends ServerPlugin { + /** @var \Sabre\DAV\Server */ + private $server; + + /** {@inheritDoc} */ + public function initialize(\Sabre\DAV\Server $server) { + $this->server = $server; + $this->server->on('method:LOCK', [$this, 'fakeLockProvider'], 1); + $this->server->on('method:UNLOCK', [$this, 'fakeUnlockProvider'], 1); + $server->on('propFind', [$this, 'propFind']); + $server->on('validateTokens', [$this, 'validateTokens']); + } + + /** + * Indicate that we support LOCK and UNLOCK + * + * @param string $path + * @return array + */ + public function getHTTPMethods($path) { + return [ + 'LOCK', + 'UNLOCK', + ]; + } + + /** + * Indicate that we support locking + * + * @return array + */ + function getFeatures() { + return [2]; + } + + /** + * Return some dummy response for PROPFIND requests with regard to locking + * + * @param PropFind $propFind + * @param INode $node + * @return void + */ + function propFind(PropFind $propFind, INode $node) { + $propFind->handle('{DAV:}supportedlock', function() { + return new SupportedLock(true); + }); + $propFind->handle('{DAV:}lockdiscovery', function() use ($propFind) { + return new LockDiscovery([]); + }); + } + + /** + * Mark a locking token always as valid + * + * @param RequestInterface $request + * @param array $conditions + */ + public function validateTokens(RequestInterface $request, &$conditions) { + foreach($conditions as &$fileCondition) { + if(isset($fileCondition['tokens'])) { + foreach($fileCondition['tokens'] as &$token) { + if(isset($token['token'])) { + if(substr($token['token'], 0, 16) === 'opaquelocktoken:') { + $token['validToken'] = true; + } + } + } + } + } + } + + /** + * Fakes a successful LOCK + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool + */ + public function fakeLockProvider(RequestInterface $request, + ResponseInterface $response) { + $dom = new \DOMDocument('1.0', 'utf-8'); + $prop = $dom->createElementNS('DAV:', 'd:prop'); + $dom->appendChild($prop); + + $lockDiscovery = $dom->createElementNS('DAV:', 'd:lockdiscovery'); + $prop->appendChild($lockDiscovery); + + $lockInfo = new LockInfo(); + $lockInfo->token = md5($request->getPath()); + $lockInfo->uri = $request->getPath(); + $lockInfo->depth = \Sabre\DAV\Server::DEPTH_INFINITY; + $lockInfo->timeout = 1800; + + $lockObj = new LockDiscovery([$lockInfo]); + $lockObj->serialize($this->server, $lockDiscovery); + + $response->setBody($dom->saveXML()); + + return false; + } + + /** + * Fakes a successful LOCK + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return bool + */ + public function fakeUnlockProvider(RequestInterface $request, + ResponseInterface $response) { + $response->setStatus(204); + $response->setHeader('Content-Length', '0'); + return false; + } +} diff --git a/apps/dav/lib/connector/sabre/serverfactory.php b/apps/dav/lib/connector/sabre/serverfactory.php index f67e949e802..a33acc9f00b 100644 --- a/apps/dav/lib/connector/sabre/serverfactory.php +++ b/apps/dav/lib/connector/sabre/serverfactory.php @@ -26,12 +26,41 @@ use OCP\Files\Mount\IMountManager; use OCP\IConfig; use OCP\IDBConnection; use OCP\ILogger; +use OCP\IRequest; use OCP\ITagManager; use OCP\IUserSession; use Sabre\DAV\Auth\Backend\BackendInterface; +use Sabre\DAV\Locks\Plugin; use Symfony\Component\EventDispatcher\EventDispatcherInterface; class ServerFactory { + /** @var IConfig */ + private $config; + /** @var ILogger */ + private $logger; + /** @var IDBConnection */ + private $databaseConnection; + /** @var IUserSession */ + private $userSession; + /** @var IMountManager */ + private $mountManager; + /** @var ITagManager */ + private $tagManager; + /** @var EventDispatcherInterface */ + private $dispatcher; + /** @var IRequest */ + private $request; + + /** + * @param IConfig $config + * @param ILogger $logger + * @param IDBConnection $databaseConnection + * @param IUserSession $userSession + * @param IMountManager $mountManager + * @param ITagManager $tagManager + * @param EventDispatcherInterface $dispatcher + * @param IRequest $request + */ public function __construct( IConfig $config, ILogger $logger, @@ -39,7 +68,8 @@ class ServerFactory { IUserSession $userSession, IMountManager $mountManager, ITagManager $tagManager, - EventDispatcherInterface $dispatcher + EventDispatcherInterface $dispatcher, + IRequest $request ) { $this->config = $config; $this->logger = $logger; @@ -48,6 +78,7 @@ class ServerFactory { $this->mountManager = $mountManager; $this->tagManager = $tagManager; $this->dispatcher = $dispatcher; + $this->request = $request; } /** @@ -57,7 +88,10 @@ class ServerFactory { * @param callable $viewCallBack callback that should return the view for the dav endpoint * @return Server */ - public function createServer($baseUri, $requestUri, BackendInterface $authBackend, callable $viewCallBack) { + public function createServer($baseUri, + $requestUri, + BackendInterface $authBackend, + callable $viewCallBack) { // Fire up server $objectTree = new \OCA\DAV\Connector\Sabre\ObjectTree(); $server = new \OCA\DAV\Connector\Sabre\Server($objectTree); @@ -75,6 +109,11 @@ class ServerFactory { $server->addPlugin(new \OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin('webdav', $this->logger)); $server->addPlugin(new \OCA\DAV\Connector\Sabre\LockPlugin($objectTree)); $server->addPlugin(new \OCA\DAV\Connector\Sabre\ListenerPlugin($this->dispatcher)); + // Finder on OS X requires Class 2 WebDAV support (locking), since we do + // not provide locking we emulate it using a fake locking plugin. + if($this->request->isUserAgent(['/WebDAVFS/'])) { + $server->addPlugin(new \OCA\DAV\Connector\Sabre\FakeLockerPlugin()); + } // wait with registering these until auth is handled and the filesystem is setup $server->on('beforeMethod', function () use ($server, $objectTree, $viewCallBack) { diff --git a/apps/dav/lib/server.php b/apps/dav/lib/server.php index a92c9980f54..395544761ab 100644 --- a/apps/dav/lib/server.php +++ b/apps/dav/lib/server.php @@ -37,6 +37,12 @@ class Server { $this->server->addPlugin(new \Sabre\CardDAV\Plugin()); + // Finder on OS X requires Class 2 WebDAV support (locking), since we do + // not provide locking we emulate it using a fake locking plugin. + if($request->isUserAgent(['/WebDAVFS/'])) { + $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\FakeLockerPlugin()); + } + // wait with registering these until auth is handled and the filesystem is setup $this->server->on('beforeMethod', function () { // custom properties plugin must be the last one diff --git a/apps/dav/tests/unit/connector/sabre/FakeLockerPluginTest.php b/apps/dav/tests/unit/connector/sabre/FakeLockerPluginTest.php new file mode 100644 index 00000000000..dfe8cc220a3 --- /dev/null +++ b/apps/dav/tests/unit/connector/sabre/FakeLockerPluginTest.php @@ -0,0 +1,173 @@ +<?php +/** + * @author Lukas Reschke <lukas@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\DAV\Tests\Unit\Connector\Sabre; + +use OCA\DAV\Connector\Sabre\FakeLockerPlugin; +use Test\TestCase; + +/** + * Class FakeLockerPluginTest + * + * @package OCA\DAV\Tests\Unit\Connector\Sabre + */ +class FakeLockerPluginTest extends TestCase { + /** @var FakeLockerPlugin */ + private $fakeLockerPlugin; + + public function setUp() { + parent::setUp(); + $this->fakeLockerPlugin = new FakeLockerPlugin(); + } + + public function testInitialize() { + /** @var \Sabre\DAV\Server $server */ + $server = $this->getMock('\Sabre\DAV\Server'); + $server + ->expects($this->at(0)) + ->method('on') + ->with('method:LOCK', [$this->fakeLockerPlugin, 'fakeLockProvider'], 1); + $server + ->expects($this->at(1)) + ->method('on') + ->with('method:UNLOCK', [$this->fakeLockerPlugin, 'fakeUnlockProvider'], 1); + $server + ->expects($this->at(2)) + ->method('on') + ->with('propFind', [$this->fakeLockerPlugin, 'propFind']); + $server + ->expects($this->at(3)) + ->method('on') + ->with('validateTokens', [$this->fakeLockerPlugin, 'validateTokens']); + + $this->fakeLockerPlugin->initialize($server); + } + + public function testGetHTTPMethods() { + $expected = [ + 'LOCK', + 'UNLOCK', + ]; + $this->assertSame($expected, $this->fakeLockerPlugin->getHTTPMethods('Test')); + } + + public function testGetFeatures() { + $expected = [ + 2, + ]; + $this->assertSame($expected, $this->fakeLockerPlugin->getFeatures()); + } + + public function testPropFind() { + $propFind = $this->getMockBuilder('\Sabre\DAV\PropFind') + ->disableOriginalConstructor() + ->getMock(); + $node = $this->getMock('\Sabre\DAV\INode'); + + $propFind->expects($this->at(0)) + ->method('handle') + ->with('{DAV:}supportedlock'); + $propFind->expects($this->at(1)) + ->method('handle') + ->with('{DAV:}lockdiscovery'); + + $this->fakeLockerPlugin->propFind($propFind, $node); + } + + public function tokenDataProvider() { + return [ + [ + [ + [ + 'tokens' => [ + [ + 'token' => 'aToken', + 'validToken' => false, + ], + [], + [ + 'token' => 'opaquelocktoken:asdf', + 'validToken' => false, + ] + ], + ] + ], + [ + [ + 'tokens' => [ + [ + 'token' => 'aToken', + 'validToken' => false, + ], + [], + [ + 'token' => 'opaquelocktoken:asdf', + 'validToken' => true, + ] + ], + ] + ], + ] + ]; + } + + /** + * @dataProvider tokenDataProvider + * @param array $input + * @param array $expected + */ + public function testValidateTokens(array $input, array $expected) { + $request = $this->getMock('\Sabre\HTTP\RequestInterface'); + $this->fakeLockerPlugin->validateTokens($request, $input); + $this->assertSame($expected, $input); + } + + public function testFakeLockProvider() { + $request = $this->getMock('\Sabre\HTTP\RequestInterface'); + $response = $this->getMock('\Sabre\HTTP\ResponseInterface'); + $server = $this->getMock('\Sabre\DAV\Server'); + $this->fakeLockerPlugin->initialize($server); + + $request->expects($this->exactly(2)) + ->method('getPath') + ->will($this->returnValue('MyPath')); + $response->expects($this->once()) + ->method('setBody') + ->with('<?xml version="1.0" encoding="utf-8"?> +<d:prop xmlns:d="DAV:"><d:lockdiscovery><d:activelock><d:lockscope><d:exclusive/></d:lockscope><d:locktype><d:write/></d:locktype><d:lockroot><d:href>MyPath</d:href></d:lockroot><d:depth>infinity</d:depth><d:timeout>Second-1800</d:timeout><d:locktoken><d:href>opaquelocktoken:fe4f7f2437b151fbcb4e9f5c8118c6b1</d:href></d:locktoken><d:owner/></d:activelock></d:lockdiscovery></d:prop> +'); + + $this->assertSame(false, $this->fakeLockerPlugin->fakeLockProvider($request, $response)); + } + + public function testFakeUnlockProvider() { + $request = $this->getMock('\Sabre\HTTP\RequestInterface'); + $response = $this->getMock('\Sabre\HTTP\ResponseInterface'); + + $response->expects($this->once()) + ->method('setStatus') + ->with('204'); + $response->expects($this->once()) + ->method('setHeader') + ->with('Content-Length', '0'); + + $this->assertSame(false, $this->fakeLockerPlugin->fakeUnlockProvider($request, $response)); + } +} diff --git a/apps/dav/tests/unit/connector/sabre/requesttest/requesttest.php b/apps/dav/tests/unit/connector/sabre/requesttest/requesttest.php index d90cf6e19bc..a83f25c1585 100644 --- a/apps/dav/tests/unit/connector/sabre/requesttest/requesttest.php +++ b/apps/dav/tests/unit/connector/sabre/requesttest/requesttest.php @@ -46,7 +46,8 @@ abstract class RequestTest extends TestCase { \OC::$server->getUserSession(), \OC::$server->getMountManager(), \OC::$server->getTagManager(), - \OC::$server->getEventDispatcher() + \OC::$server->getEventDispatcher(), + $this->getMock('\OCP\IRequest') ); } @@ -67,6 +68,7 @@ abstract class RequestTest extends TestCase { * @param resource|string|null $body * @param array|null $headers * @return \Sabre\HTTP\Response + * @throws \Exception */ protected function request($view, $user, $password, $method, $url, $body = null, $headers = null) { if (is_string($body)) { diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index f93b1f5d7a1..3c6bdc05a1b 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -106,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "Maximální velikost pro odesílání", "max. possible: " : "největší možná: ", "Save" : "Uložit", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Při použití PHP-FPM může změna nastavení trvat až 5 minut od uložení.", + "Missing permissions to edit from here." : "Pro úpravy v aktuálním náhledu chybí oprávnění.", "Settings" : "Nastavení", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>", diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index 7daf7a492da..bf9170f2ee3 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -104,6 +104,8 @@ "Maximum upload size" : "Maximální velikost pro odesílání", "max. possible: " : "největší možná: ", "Save" : "Uložit", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Při použití PHP-FPM může změna nastavení trvat až 5 minut od uložení.", + "Missing permissions to edit from here." : "Pro úpravy v aktuálním náhledu chybí oprávnění.", "Settings" : "Nastavení", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index 36066e9fe9c..6c8e2cbff33 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -106,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "Μέγιστο μέγεθος αποστολής", "max. possible: " : "μέγιστο δυνατό:", "Save" : "Αποθήκευση", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Με PHP-FPM μπορεί να χρειαστούν μέχρι και 5 λεπτά για να ενεργοποιηθούν οι αλλαγές.", + "Missing permissions to edit from here." : "Δεν υπάρχουν τα απαραίτητα δικαιώματα για να γίνει τροποποιήση σε αυτό το σημείο.", "Settings" : "Ρυθμίσεις", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτήν την διεύθυνση για να αποκτήσετε <a href=\"%s\" target=\"_blank\">πρόσβαση στα αρχεία σας μέσω WebDAV</a>", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index 7f0ce4dfe38..ee9e4ebde54 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -104,6 +104,8 @@ "Maximum upload size" : "Μέγιστο μέγεθος αποστολής", "max. possible: " : "μέγιστο δυνατό:", "Save" : "Αποθήκευση", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Με PHP-FPM μπορεί να χρειαστούν μέχρι και 5 λεπτά για να ενεργοποιηθούν οι αλλαγές.", + "Missing permissions to edit from here." : "Δεν υπάρχουν τα απαραίτητα δικαιώματα για να γίνει τροποποιήση σε αυτό το σημείο.", "Settings" : "Ρυθμίσεις", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτήν την διεύθυνση για να αποκτήσετε <a href=\"%s\" target=\"_blank\">πρόσβαση στα αρχεία σας μέσω WebDAV</a>", diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js index 447350e024f..79f3321577f 100644 --- a/apps/files/l10n/fi_FI.js +++ b/apps/files/l10n/fi_FI.js @@ -106,6 +106,7 @@ OC.L10N.register( "Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko", "max. possible: " : "suurin mahdollinen:", "Save" : "Tallenna", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM:tä käyttäen muutoksien voimaantulossa saattaa kestää 5 minuuttia.", "Settings" : "Asetukset", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>", diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json index aa30ccd433e..e46327c83fa 100644 --- a/apps/files/l10n/fi_FI.json +++ b/apps/files/l10n/fi_FI.json @@ -104,6 +104,7 @@ "Maximum upload size" : "Lähetettävän tiedoston suurin sallittu koko", "max. possible: " : "suurin mahdollinen:", "Save" : "Tallenna", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM:tä käyttäen muutoksien voimaantulossa saattaa kestää 5 minuuttia.", "Settings" : "Asetukset", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index d00f33391d4..e068b3c45ba 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -106,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "Taille max. d'envoi", "max. possible: " : "Max. possible :", "Save" : "Sauvegarder", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer 5 minutes pour que les changements soient appliqués.", + "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.", "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index 9d30823e265..a297b3525d1 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -104,6 +104,8 @@ "Maximum upload size" : "Taille max. d'envoi", "max. possible: " : "Max. possible :", "Save" : "Sauvegarder", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Avec PHP-FPM il peut se passer 5 minutes pour que les changements soient appliqués.", + "Missing permissions to edit from here." : "Manque de permissions pour éditer à partir d'ici.", "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 7fdd7170887..4c6033e6caf 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -106,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "Dimensione massima caricamento", "max. possible: " : "numero mass.: ", "Save" : "Salva", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM potrebbe richiedere 5 minuti perché le modifiche siano applicate.", + "Missing permissions to edit from here." : "Permessi mancanti per modificare da qui.", "Settings" : "Impostazioni", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 9e5bee70191..239b8dc399c 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -104,6 +104,8 @@ "Maximum upload size" : "Dimensione massima caricamento", "max. possible: " : "numero mass.: ", "Save" : "Salva", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Con PHP-FPM potrebbe richiedere 5 minuti perché le modifiche siano applicate.", + "Missing permissions to edit from here." : "Permessi mancanti per modificare da qui.", "Settings" : "Impostazioni", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 53eb8dca351..be441c15ca1 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -106,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "最大アップロードサイズ", "max. possible: " : "最大容量: ", "Save" : "保存", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM の場合は値を変更後、反映されるのに5分程度かかります。", + "Missing permissions to edit from here." : "ここから編集するための権限がありません。", "Settings" : "設定", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV経由でのファイルアクセス</a>にはこのアドレスを利用してください", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index 36983beafc2..58b4870369c 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -104,6 +104,8 @@ "Maximum upload size" : "最大アップロードサイズ", "max. possible: " : "最大容量: ", "Save" : "保存", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "PHP-FPM の場合は値を変更後、反映されるのに5分程度かかります。", + "Missing permissions to edit from here." : "ここから編集するための権限がありません。", "Settings" : "設定", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV経由でのファイルアクセス</a>にはこのアドレスを利用してください", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 158ef08608d..b7a2196db63 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -106,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "Tamanho máximo para envio", "max. possible: " : "max. possível:", "Save" : "Salvar", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Com PHP-FPM pode demorar 5 minutos para que as alterações sejam aplicadas.", + "Missing permissions to edit from here." : "Faltando permissões para editar a partir daqui.", "Settings" : "Configurações", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index af539480d95..335b50a2d7d 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -104,6 +104,8 @@ "Maximum upload size" : "Tamanho máximo para envio", "max. possible: " : "max. possível:", "Save" : "Salvar", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Com PHP-FPM pode demorar 5 minutos para que as alterações sejam aplicadas.", + "Missing permissions to edit from here." : "Faltando permissões para editar a partir daqui.", "Settings" : "Configurações", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>", diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js index 9428855d9ee..5f0b3a8c936 100644 --- a/apps/files/l10n/sq.js +++ b/apps/files/l10n/sq.js @@ -70,6 +70,7 @@ OC.L10N.register( "Your storage is full, files can not be updated or synced anymore!" : "Depozita juaj është plot, kartelat s’mund të përditësohen ose njëkohësohen më!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Depozita e {owner} është thuasje plot ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depozita juaj është thuajse plot ({usedSpacePercent}%)", + "_matches '{filter}'_::_match '{filter}'_" : ["ka përputhje me '{filter}'","ka përputhje me '{filter}'"], "Path" : "Shteg", "_%n byte_::_%n bytes_" : ["%n bajt","%n bajte"], "Favorited" : "U kalua e parapëlqyer", @@ -105,6 +106,8 @@ OC.L10N.register( "Maximum upload size" : "Madhësi maksimale ngarkimi", "max. possible: " : "maks. i mundshëm: ", "Save" : "Ruaje", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Me PHP-FPM mund të duhen 5 minuta që ndryshimet të hyjnë në fuqi.", + "Missing permissions to edit from here." : "Mungojnë lejet për të përpunuar që këtu.", "Settings" : "Rregullime", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Përdorni këtë adresë për <a href=\"%s\" target=\"_blank\">të hyrë te Kartelat tuaja përmes WebDAV-it</a>", diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json index 65e87f42c1b..fceac2c5376 100644 --- a/apps/files/l10n/sq.json +++ b/apps/files/l10n/sq.json @@ -68,6 +68,7 @@ "Your storage is full, files can not be updated or synced anymore!" : "Depozita juaj është plot, kartelat s’mund të përditësohen ose njëkohësohen më!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Depozita e {owner} është thuasje plot ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depozita juaj është thuajse plot ({usedSpacePercent}%)", + "_matches '{filter}'_::_match '{filter}'_" : ["ka përputhje me '{filter}'","ka përputhje me '{filter}'"], "Path" : "Shteg", "_%n byte_::_%n bytes_" : ["%n bajt","%n bajte"], "Favorited" : "U kalua e parapëlqyer", @@ -103,6 +104,8 @@ "Maximum upload size" : "Madhësi maksimale ngarkimi", "max. possible: " : "maks. i mundshëm: ", "Save" : "Ruaje", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Me PHP-FPM mund të duhen 5 minuta që ndryshimet të hyjnë në fuqi.", + "Missing permissions to edit from here." : "Mungojnë lejet për të përpunuar që këtu.", "Settings" : "Rregullime", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Përdorni këtë adresë për <a href=\"%s\" target=\"_blank\">të hyrë te Kartelat tuaja përmes WebDAV-it</a>", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index aba0261047a..c38488d3087 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -7,7 +7,7 @@ OC.L10N.register( "Could not move %s - File with this name already exists" : "無法移動 %s ,同名的檔案已經存在", "Could not move %s" : "無法移動 %s", "Permission denied" : "存取被拒", - "The target folder has been moved or deleted." : "目標資料夾已經被搬移或刪除。", + "The target folder has been moved or deleted." : "目標資料夾已經被搬移或刪除", "The name %s is already used in the folder %s. Please choose a different name." : "%s 已經被使用於資料夾 %s ,請換一個名字", "Error when creating the file" : "建立檔案失敗", "Error when creating the folder" : "建立資料夾失敗", @@ -62,7 +62,7 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n 個檔案"], "{dirs} and {files}" : "{dirs} 和 {files}", "You don’t have permission to upload or create files here" : "您沒有權限在這裡上傳或建立檔案", - "_Uploading %n file_::_Uploading %n files_" : ["%n 個檔案正在上傳"], + "_Uploading %n file_::_Uploading %n files_" : ["正在上傳 %n 個檔案"], "New" : "新增", "\"{name}\" is an invalid file name." : "{name} 是無效的檔名", "File name cannot be empty." : "檔名不能為空", @@ -94,11 +94,11 @@ OC.L10N.register( "%2$s changed %1$s" : "%2$s 已變更了 %1$s", "You deleted %1$s" : "您刪除了 %1$s", "%2$s deleted %1$s" : "%2$s 已刪除 %1$s", - "You restored %1$s" : "您恢復了 %1$s", - "%2$s restored %1$s" : "%2$s 已恢復了 %1$s", + "You restored %1$s" : "您還原了 %1$s", + "%2$s restored %1$s" : "%2$s 還原了 %1$s", "Changed by %2$s" : "由 %2$s 改動", "Deleted by %2$s" : "由 %2$s 刪除", - "Restored by %2$s" : "由 %2$s 復原", + "Restored by %2$s" : "由 %2$s 還原", "%s could not be renamed as it has been deleted" : "%s 已經被刪除了所以無法重新命名", "%s could not be renamed" : "無法重新命名 %s", "Upload (max. %s)" : "上傳(至多 %s)", @@ -115,8 +115,8 @@ OC.L10N.register( "No entries found in this folder" : "在此資料夾中沒有任何項目", "Select all" : "全選", "Upload too large" : "上傳過大", - "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制。", - "Files are being scanned, please wait." : "正在掃描檔案,請稍等。", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制", + "Files are being scanned, please wait." : "正在掃描檔案,請稍等", "Currently scanning" : "正在掃描", "No favorites" : "沒有最愛", "Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡" diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 4e4f7d0a871..8a408b5ffad 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -5,7 +5,7 @@ "Could not move %s - File with this name already exists" : "無法移動 %s ,同名的檔案已經存在", "Could not move %s" : "無法移動 %s", "Permission denied" : "存取被拒", - "The target folder has been moved or deleted." : "目標資料夾已經被搬移或刪除。", + "The target folder has been moved or deleted." : "目標資料夾已經被搬移或刪除", "The name %s is already used in the folder %s. Please choose a different name." : "%s 已經被使用於資料夾 %s ,請換一個名字", "Error when creating the file" : "建立檔案失敗", "Error when creating the folder" : "建立資料夾失敗", @@ -60,7 +60,7 @@ "_%n file_::_%n files_" : ["%n 個檔案"], "{dirs} and {files}" : "{dirs} 和 {files}", "You don’t have permission to upload or create files here" : "您沒有權限在這裡上傳或建立檔案", - "_Uploading %n file_::_Uploading %n files_" : ["%n 個檔案正在上傳"], + "_Uploading %n file_::_Uploading %n files_" : ["正在上傳 %n 個檔案"], "New" : "新增", "\"{name}\" is an invalid file name." : "{name} 是無效的檔名", "File name cannot be empty." : "檔名不能為空", @@ -92,11 +92,11 @@ "%2$s changed %1$s" : "%2$s 已變更了 %1$s", "You deleted %1$s" : "您刪除了 %1$s", "%2$s deleted %1$s" : "%2$s 已刪除 %1$s", - "You restored %1$s" : "您恢復了 %1$s", - "%2$s restored %1$s" : "%2$s 已恢復了 %1$s", + "You restored %1$s" : "您還原了 %1$s", + "%2$s restored %1$s" : "%2$s 還原了 %1$s", "Changed by %2$s" : "由 %2$s 改動", "Deleted by %2$s" : "由 %2$s 刪除", - "Restored by %2$s" : "由 %2$s 復原", + "Restored by %2$s" : "由 %2$s 還原", "%s could not be renamed as it has been deleted" : "%s 已經被刪除了所以無法重新命名", "%s could not be renamed" : "無法重新命名 %s", "Upload (max. %s)" : "上傳(至多 %s)", @@ -113,8 +113,8 @@ "No entries found in this folder" : "在此資料夾中沒有任何項目", "Select all" : "全選", "Upload too large" : "上傳過大", - "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制。", - "Files are being scanned, please wait." : "正在掃描檔案,請稍等。", + "The files you are trying to upload exceed the maximum size for file uploads on this server." : "您試圖上傳的檔案大小超過伺服器的限制", + "Files are being scanned, please wait." : "正在掃描檔案,請稍等", "Currently scanning" : "正在掃描", "No favorites" : "沒有最愛", "Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡" diff --git a/apps/user_ldap/l10n/cs_CZ.js b/apps/user_ldap/l10n/cs_CZ.js index 6aa15ebc918..e78755719b7 100644 --- a/apps/user_ldap/l10n/cs_CZ.js +++ b/apps/user_ldap/l10n/cs_CZ.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Nelze automaticky detekovat Base DN, zadejte prosím ručně.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "V zadané Base DN nebyl objekt nalezen. Ověřte.", + "More than 1,000 directory entries available." : "Je dostupných více než 1000 adresářů.", " entries available within the provided Base DN" : "záznamů dostupných v zadané Base DN", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověře prosím Base DN společně s nastavením připojení a přihlašovacími údaji.", "Do you really want to delete the current Server Configuration?" : "Opravdu si přejete smazat současné nastavení serveru?", diff --git a/apps/user_ldap/l10n/cs_CZ.json b/apps/user_ldap/l10n/cs_CZ.json index a2eae7dae20..37e56cda1a7 100644 --- a/apps/user_ldap/l10n/cs_CZ.json +++ b/apps/user_ldap/l10n/cs_CZ.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "Nelze automaticky detekovat Base DN, zadejte prosím ručně.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "V zadané Base DN nebyl objekt nalezen. Ověřte.", + "More than 1,000 directory entries available." : "Je dostupných více než 1000 adresářů.", " entries available within the provided Base DN" : "záznamů dostupných v zadané Base DN", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Došlo k chybě. Ověře prosím Base DN společně s nastavením připojení a přihlašovacími údaji.", "Do you really want to delete the current Server Configuration?" : "Opravdu si přejete smazat současné nastavení serveru?", diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js index d8f825b8288..7ea629e673d 100644 --- a/apps/user_ldap/l10n/el.js +++ b/apps/user_ldap/l10n/el.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Αδυναμία ανίχνευσης Base DN, παρακαλώ να το εισάγετε χειροκίνητα.", "{nthServer}. Server" : "{nthServer}. Διακομιστής", "No object found in the given Base DN. Please revise." : "Δεν βρέθηκε αντικείμενο στο δηλωθέν Base DN. Παρακαλώ αναθεωρήστε.", + "More than 1,000 directory entries available." : "Είναι διαθέσιμες περισσότερες από 1.000 εγγραφές καταλόγου.", " entries available within the provided Base DN" : "διαθέσιμες καταχωρήσεις εντός του δηλωθέντος ", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Παρουσιάστηκε σφάλμα. Παρακαλούμε ελέγξτε το Base DN καθώς και τις ρυθμίσεις και τα διαπιστευτήρια σύνδεσης.", "Do you really want to delete the current Server Configuration?" : "Θέλετε να διαγράψετε τις τρέχουσες ρυθμίσεις του διακομιστή;", diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json index 142ca58d844..338b0b8bad9 100644 --- a/apps/user_ldap/l10n/el.json +++ b/apps/user_ldap/l10n/el.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "Αδυναμία ανίχνευσης Base DN, παρακαλώ να το εισάγετε χειροκίνητα.", "{nthServer}. Server" : "{nthServer}. Διακομιστής", "No object found in the given Base DN. Please revise." : "Δεν βρέθηκε αντικείμενο στο δηλωθέν Base DN. Παρακαλώ αναθεωρήστε.", + "More than 1,000 directory entries available." : "Είναι διαθέσιμες περισσότερες από 1.000 εγγραφές καταλόγου.", " entries available within the provided Base DN" : "διαθέσιμες καταχωρήσεις εντός του δηλωθέντος ", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Παρουσιάστηκε σφάλμα. Παρακαλούμε ελέγξτε το Base DN καθώς και τις ρυθμίσεις και τα διαπιστευτήρια σύνδεσης.", "Do you really want to delete the current Server Configuration?" : "Θέλετε να διαγράψετε τις τρέχουσες ρυθμίσεις του διακομιστή;", diff --git a/apps/user_ldap/l10n/fi_FI.js b/apps/user_ldap/l10n/fi_FI.js index 5091cb1d88e..96ed6a00c7d 100644 --- a/apps/user_ldap/l10n/fi_FI.js +++ b/apps/user_ldap/l10n/fi_FI.js @@ -22,6 +22,8 @@ OC.L10N.register( "Available groups" : "Käytettävissä olevat ryhmät", "Selected groups" : "Valitut ryhmät", "LDAP Filter:" : "LDAP-suodatin:", + "LDAP / AD Username:" : "LDAP-/AD-käyttäjätunnus:", + "LDAP / AD Email Address:" : "LDAP-/AD-sähköpostiosoite:", "Verify settings" : "Vahvista asetukset", "1. Server" : "1. Palvelin", "%s. Server:" : "%s. Palvelin:", @@ -34,6 +36,7 @@ OC.L10N.register( "Password" : "Salasana", "For anonymous access, leave DN and Password empty." : "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", "You can specify Base DN for users and groups in the Advanced tab" : "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", + "Verify settings and count users" : "Vahvista asetukset ja laske käyttäjät", "Saving" : "Tallennetaan", "Back" : "Takaisin", "Continue" : "Jatka", diff --git a/apps/user_ldap/l10n/fi_FI.json b/apps/user_ldap/l10n/fi_FI.json index 54e12650166..e34fefaf93d 100644 --- a/apps/user_ldap/l10n/fi_FI.json +++ b/apps/user_ldap/l10n/fi_FI.json @@ -20,6 +20,8 @@ "Available groups" : "Käytettävissä olevat ryhmät", "Selected groups" : "Valitut ryhmät", "LDAP Filter:" : "LDAP-suodatin:", + "LDAP / AD Username:" : "LDAP-/AD-käyttäjätunnus:", + "LDAP / AD Email Address:" : "LDAP-/AD-sähköpostiosoite:", "Verify settings" : "Vahvista asetukset", "1. Server" : "1. Palvelin", "%s. Server:" : "%s. Palvelin:", @@ -32,6 +34,7 @@ "Password" : "Salasana", "For anonymous access, leave DN and Password empty." : "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ", "You can specify Base DN for users and groups in the Advanced tab" : "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset'-välilehdeltä ", + "Verify settings and count users" : "Vahvista asetukset ja laske käyttäjät", "Saving" : "Tallennetaan", "Back" : "Takaisin", "Continue" : "Jatka", diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js index 4a7b2631b79..a013589cff2 100644 --- a/apps/user_ldap/l10n/fr.js +++ b/apps/user_ldap/l10n/fr.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Impossible de détecter le DN de base, veuillez le spécifier manuellement", "{nthServer}. Server" : "{nthServer}. Serveur", "No object found in the given Base DN. Please revise." : "Aucun objet trouvé dans le DN de base spécifié. Veuillez le vérifier.", + "More than 1,000 directory entries available." : "Il y a plus de 1 000 entrées de répertoire disponibles.", " entries available within the provided Base DN" : "entrées disponibles dans le DN de base spécifié", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Une erreur est survenue. Veuillez vérifier le DN de base, ainsi que les paramètres de connexion et les informations d'identification", "Do you really want to delete the current Server Configuration?" : "Êtes-vous sûr de vouloir effacer la configuration serveur actuelle ?", diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json index 344bbaf7282..0b6c076f0d3 100644 --- a/apps/user_ldap/l10n/fr.json +++ b/apps/user_ldap/l10n/fr.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "Impossible de détecter le DN de base, veuillez le spécifier manuellement", "{nthServer}. Server" : "{nthServer}. Serveur", "No object found in the given Base DN. Please revise." : "Aucun objet trouvé dans le DN de base spécifié. Veuillez le vérifier.", + "More than 1,000 directory entries available." : "Il y a plus de 1 000 entrées de répertoire disponibles.", " entries available within the provided Base DN" : "entrées disponibles dans le DN de base spécifié", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Une erreur est survenue. Veuillez vérifier le DN de base, ainsi que les paramètres de connexion et les informations d'identification", "Do you really want to delete the current Server Configuration?" : "Êtes-vous sûr de vouloir effacer la configuration serveur actuelle ?", diff --git a/apps/user_ldap/l10n/it.js b/apps/user_ldap/l10n/it.js index 88a5ceea447..8bb42e1a72a 100644 --- a/apps/user_ldap/l10n/it.js +++ b/apps/user_ldap/l10n/it.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Impossibile rilevare il DN base, digitalo manualmente.", "{nthServer}. Server" : "{nthServer}. server", "No object found in the given Base DN. Please revise." : "Nessun oggetto trovato nel DN base specificato. Controlla.", + "More than 1,000 directory entries available." : "Più di 1.000 cartelle disponibili.", " entries available within the provided Base DN" : "voci disponibili all'interno del DN base", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Si è verificato un errore. Controlla il DN base, così come le impostazioni di connessione e le credenziali.", "Do you really want to delete the current Server Configuration?" : "Vuoi davvero eliminare la configurazione attuale del server?", diff --git a/apps/user_ldap/l10n/it.json b/apps/user_ldap/l10n/it.json index cb8f6b11d73..73234261016 100644 --- a/apps/user_ldap/l10n/it.json +++ b/apps/user_ldap/l10n/it.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "Impossibile rilevare il DN base, digitalo manualmente.", "{nthServer}. Server" : "{nthServer}. server", "No object found in the given Base DN. Please revise." : "Nessun oggetto trovato nel DN base specificato. Controlla.", + "More than 1,000 directory entries available." : "Più di 1.000 cartelle disponibili.", " entries available within the provided Base DN" : "voci disponibili all'interno del DN base", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Si è verificato un errore. Controlla il DN base, così come le impostazioni di connessione e le credenziali.", "Do you really want to delete the current Server Configuration?" : "Vuoi davvero eliminare la configurazione attuale del server?", diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js index 3ba8bd8f2f3..e138c46e08e 100644 --- a/apps/user_ldap/l10n/ja.js +++ b/apps/user_ldap/l10n/ja.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "ベース DN を検出できませんでした。手動で入力してください。", "{nthServer}. Server" : "{nthServer}. サーバー", "No object found in the given Base DN. Please revise." : "指定されたベース DN でオブジェクトを見つけることができませんでした。修正をお願いします。", + "More than 1,000 directory entries available." : "1,000以上のディレクトリエントリが利用可能です。", " entries available within the provided Base DN" : "入力されたベースDNでエントリーが利用可能", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "エラーが発生しました。ベースDNをチェックし、接続設定と権限についても同様に確認してください。", "Do you really want to delete the current Server Configuration?" : "現在のサーバー設定を本当に削除してもよろしいですか?", diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json index 64d40cd8e4a..ef69c48adcc 100644 --- a/apps/user_ldap/l10n/ja.json +++ b/apps/user_ldap/l10n/ja.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "ベース DN を検出できませんでした。手動で入力してください。", "{nthServer}. Server" : "{nthServer}. サーバー", "No object found in the given Base DN. Please revise." : "指定されたベース DN でオブジェクトを見つけることができませんでした。修正をお願いします。", + "More than 1,000 directory entries available." : "1,000以上のディレクトリエントリが利用可能です。", " entries available within the provided Base DN" : "入力されたベースDNでエントリーが利用可能", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "エラーが発生しました。ベースDNをチェックし、接続設定と権限についても同様に確認してください。", "Do you really want to delete the current Server Configuration?" : "現在のサーバー設定を本当に削除してもよろしいですか?", diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index f546cfd8150..27f6dd9ffc7 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Kon basis DN niet vaststellen, voer de gegevens handmatig in.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "Geen object gevonden in de basis DN. Review instellingen.", + "More than 1,000 directory entries available." : "Meer dan 1000 directory namen beschikbaar.", " entries available within the provided Base DN" : "accounts beschikbaar binnen de provider Basis DN", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Er trad een fout op. Controleer de Basis DN en de verbindingsinstellingen en inloggegevens.", "Do you really want to delete the current Server Configuration?" : "Wilt u werkelijk de huidige Serverconfiguratie verwijderen?", diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index fc58e43347d..c98d7aa64dc 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "Kon basis DN niet vaststellen, voer de gegevens handmatig in.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "Geen object gevonden in de basis DN. Review instellingen.", + "More than 1,000 directory entries available." : "Meer dan 1000 directory namen beschikbaar.", " entries available within the provided Base DN" : "accounts beschikbaar binnen de provider Basis DN", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Er trad een fout op. Controleer de Basis DN en de verbindingsinstellingen en inloggegevens.", "Do you really want to delete the current Server Configuration?" : "Wilt u werkelijk de huidige Serverconfiguratie verwijderen?", diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js index 3254610be2a..e027c930ceb 100644 --- a/apps/user_ldap/l10n/pt_BR.js +++ b/apps/user_ldap/l10n/pt_BR.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Não foi possível detectar a Base DN, por favor entre manualmente.", "{nthServer}. Server" : "Servidor {nthServer}.", "No object found in the given Base DN. Please revise." : "Nenhum objeto encontrado ba Base DN informada. Por favor revise.", + "More than 1,000 directory entries available." : "Mais de 1.000 entradas disponíveis no diretório.", " entries available within the provided Base DN" : "entradas disponíveis na Base DN disponibilizada", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Um erro ocorreu. Por favor verifique a Base DN, e também a conexção e credenciais.", "Do you really want to delete the current Server Configuration?" : "Você quer realmente deletar as atuais Configurações de Servidor?", diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json index de03f9778d0..8251fa082a6 100644 --- a/apps/user_ldap/l10n/pt_BR.json +++ b/apps/user_ldap/l10n/pt_BR.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "Não foi possível detectar a Base DN, por favor entre manualmente.", "{nthServer}. Server" : "Servidor {nthServer}.", "No object found in the given Base DN. Please revise." : "Nenhum objeto encontrado ba Base DN informada. Por favor revise.", + "More than 1,000 directory entries available." : "Mais de 1.000 entradas disponíveis no diretório.", " entries available within the provided Base DN" : "entradas disponíveis na Base DN disponibilizada", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Um erro ocorreu. Por favor verifique a Base DN, e também a conexção e credenciais.", "Do you really want to delete the current Server Configuration?" : "Você quer realmente deletar as atuais Configurações de Servidor?", diff --git a/apps/user_ldap/l10n/sq.js b/apps/user_ldap/l10n/sq.js index 4ec40ef5957..4f0d1d3697c 100644 --- a/apps/user_ldap/l10n/sq.js +++ b/apps/user_ldap/l10n/sq.js @@ -24,6 +24,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "S’u zbulua dot DN Bazë, ju lutemi, jepeni dorazi.", "{nthServer}. Server" : "{nthServer}. Shërbyes", "No object found in the given Base DN. Please revise." : "Në DN Bazë të dhën s’u gjet objekt. Ju lutemi, rishikojeni.", + "More than 1,000 directory entries available." : "Më shumë se 1000 zëra të gatshëm.", " entries available within the provided Base DN" : " zëra të gatshëm brenda DN-së Bazë të dhënë", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ndodhi një gabim. Ju lutemi, kontrolloni DN-në Bazë, sie dhe rregullimet për lidhjen dhe kredencialet.", "Do you really want to delete the current Server Configuration?" : "Doni vërtet të fshihet Formësimi i tanishëm i Shërbyesit?", diff --git a/apps/user_ldap/l10n/sq.json b/apps/user_ldap/l10n/sq.json index 2e50290f18c..6045b61f57d 100644 --- a/apps/user_ldap/l10n/sq.json +++ b/apps/user_ldap/l10n/sq.json @@ -22,6 +22,7 @@ "Could not detect Base DN, please enter it manually." : "S’u zbulua dot DN Bazë, ju lutemi, jepeni dorazi.", "{nthServer}. Server" : "{nthServer}. Shërbyes", "No object found in the given Base DN. Please revise." : "Në DN Bazë të dhën s’u gjet objekt. Ju lutemi, rishikojeni.", + "More than 1,000 directory entries available." : "Më shumë se 1000 zëra të gatshëm.", " entries available within the provided Base DN" : " zëra të gatshëm brenda DN-së Bazë të dhënë", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Ndodhi një gabim. Ju lutemi, kontrolloni DN-në Bazë, sie dhe rregullimet për lidhjen dhe kredencialet.", "Do you really want to delete the current Server Configuration?" : "Doni vërtet të fshihet Formësimi i tanishëm i Shërbyesit?", diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index 4a0299d6e49..46c86f1300b 100644 --- a/build/integration/features/bootstrap/FeatureContext.php +++ b/build/integration/features/bootstrap/FeatureContext.php @@ -562,7 +562,30 @@ class FeatureContext implements Context, SnippetAcceptingContext { * @param \Behat\Gherkin\Node\TableNode|null $formData */ public function createPublicShare($body) { - $this->sendingToWith("POST", "/apps/files_sharing/api/v1/shares", $body); + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v1/shares"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } else { + $options['auth'] = [$this->currentUser, $this->regularUser]; + } + + if ($body instanceof \Behat\Gherkin\Node\TableNode) { + $fd = $body->getRowsHash(); + if (array_key_exists('expireDate', $fd)){ + $dateModification = $fd['expireDate']; + $fd['expireDate'] = date('Y-m-d', strtotime($dateModification)); + } + $options['body'] = $fd; + } + + try { + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + } + $this->lastShareData = $this->response->xml(); } @@ -572,7 +595,12 @@ class FeatureContext implements Context, SnippetAcceptingContext { public function checkPublicSharedFile($filename) { $client = new Client(); $options = []; - $url = $this->lastShareData->data[0]->url; + if (count($this->lastShareData->data->element) > 0){ + $url = $this->lastShareData->data[0]->url; + } + else{ + $url = $this->lastShareData->data->url; + } $fullUrl = $url . "/download"; $options['save_to'] = "./$filename"; $this->response = $client->get($fullUrl, $options); @@ -590,7 +618,13 @@ class FeatureContext implements Context, SnippetAcceptingContext { public function checkPublicSharedFileWithPassword($filename, $password) { $client = new Client(); $options = []; - $token = $this->lastShareData->data[0]->token; + if (count($this->lastShareData->data->element) > 0){ + $token = $this->lastShareData->data[0]->token; + } + else{ + $token = $this->lastShareData->data->token; + } + $fullUrl = substr($this->baseUrl, 0, -4) . "public.php/webdav"; $options['auth'] = [$token, $password]; $options['save_to'] = "./$filename"; @@ -622,6 +656,40 @@ class FeatureContext implements Context, SnippetAcceptingContext { PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } + /** + * @When /^Updating last share with$/ + * @param \Behat\Gherkin\Node\TableNode|null $formData + */ + public function updatingLastShare($body) { + $share_id = $this->lastShareData->data[0]->id; + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares/$share_id"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } else { + $options['auth'] = [$this->currentUser, $this->regularUser]; + } + + if ($body instanceof \Behat\Gherkin\Node\TableNode) { + $fd = $body->getRowsHash(); + if (array_key_exists('expireDate', $fd)){ + $dateModification = $fd['expireDate']; + $fd['expireDate'] = date('Y-m-d', strtotime($dateModification)); + } + $options['body'] = $fd; + } + + try { + $this->response = $client->send($client->createRequest("PUT", $fullUrl, $options)); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + } + + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + public function createShare($user, $path = null, $shareType = null, @@ -669,17 +737,49 @@ class FeatureContext implements Context, SnippetAcceptingContext { } - public function isFieldInResponse($field, $content_expected){ + public function isExpectedUrl($possibleUrl, $finalPart){ + $baseUrlChopped = substr($this->baseUrl, 0, -4); + $endCharacter = strlen($baseUrlChopped) + strlen($finalPart); + return (substr($possibleUrl,0,$endCharacter) == "$baseUrlChopped" . "$finalPart"); + } + + public function isFieldInResponse($field, $contentExpected){ $data = $this->response->xml()->data[0]; - foreach($data as $element) { - if ($content_expected == "A_NUMBER"){ - return is_numeric((string)$element->$field); - } - elseif ($element->$field == $content_expected){ - return True; + if ((string)$field == 'expiration'){ + $contentExpected = date('Y-m-d', strtotime($contentExpected)) . " 00:00:00"; + } + if (count($data->element) > 0){ + foreach($data as $element) { + if ($contentExpected == "A_TOKEN"){ + return (strlen((string)$element->$field) == 15); + } + elseif ($contentExpected == "A_NUMBER"){ + return is_numeric((string)$element->$field); + } + elseif($contentExpected == "AN_URL"){ + return $this->isExpectedUrl((string)$element->$field, "index.php/s/"); + } + elseif ($element->$field == $contentExpected){ + return True; + } + } + + return False; + } else { + if ($contentExpected == "A_TOKEN"){ + return (strlen((string)$data->$field) == 15); + } + elseif ($contentExpected == "A_NUMBER"){ + return is_numeric((string)$data->$field); + } + elseif($contentExpected == "AN_URL"){ + return $this->isExpectedUrl((string)$data->$field, "index.php/s/"); + } + elseif ($data->$field == $contentExpected){ + return True; } + return False; } - return False; } /** @@ -767,6 +867,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { public function checkShareFields($body){ if ($body instanceof \Behat\Gherkin\Node\TableNode) { $fd = $body->getRowsHash(); + foreach($fd as $field => $value) { PHPUnit_Framework_Assert::assertEquals(True, $this->isFieldInResponse($field, $value)); } @@ -786,6 +887,9 @@ class FeatureContext implements Context, SnippetAcceptingContext { for ($i=0; $i<5; $i++){ file_put_contents("../../core/skeleton/" . "textfile" . "$i" . ".txt", "ownCloud test text file\n"); } + if (!file_exists("../../core/skeleton/FOLDER")) { + mkdir("../../core/skeleton/FOLDER", 0777, true); + } } @@ -796,6 +900,9 @@ class FeatureContext implements Context, SnippetAcceptingContext { for ($i=0; $i<5; $i++){ self::removeFile("../../core/skeleton/", "textfile" . "$i" . ".txt"); } + if (!is_dir("../../core/skeleton/FOLDER")) { + rmdir("../../core/skeleton/FOLDER"); + } } /** diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index 36e729d2a13..07c05af2f54 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -46,6 +46,25 @@ Feature: sharing And the HTTP status code should be "200" And Public shared file "welcome.txt" with password "publicpw" can be downloaded + Scenario: Creating a new public share of a folder + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | FOLDER | + | shareType | 3 | + | password | publicpw | + | expireDate | +3 days | + | publicUpload | true | + | permissions | 7 | + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Share fields of last share match with + | id | A_NUMBER | + | permissions | 7 | + | expiration | +3 days | + | url | AN_URL | + | token | A_TOKEN | + Scenario: Creating a new public share with password and adding an expiration date Given user "user0" exists And As an "user0" @@ -53,11 +72,129 @@ Feature: sharing | path | welcome.txt | | shareType | 3 | | password | publicpw | - And Adding expiration date to last share + And Updating last share with + | expireDate | +3 days | Then the OCS status code should be "100" And the HTTP status code should be "200" And Public shared file "welcome.txt" with password "publicpw" can be downloaded + Scenario: Creating a new public share, updating its expiration date and getting its info + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | FOLDER | + | shareType | 3 | + And Updating last share with + | expireDate | +3 days | + And Getting info of last share + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Share fields of last share match with + | id | A_NUMBER | + | item_type | folder | + | item_source | A_NUMBER | + | share_type | 3 | + | file_source | A_NUMBER | + | file_target | /FOLDER | + | permissions | 1 | + | stime | A_NUMBER | + | expiration | +3 days | + | token | A_TOKEN | + | storage | A_NUMBER | + | mail_send | 0 | + | uid_owner | user0 | + | storage_id | home::user0 | + | file_parent | A_NUMBER | + | displayname_owner | user0 | + | url | AN_URL | + + Scenario: Creating a new public share, updating its password and getting its info + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | FOLDER | + | shareType | 3 | + And Updating last share with + | password | publicpw | + And Getting info of last share + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Share fields of last share match with + | id | A_NUMBER | + | item_type | folder | + | item_source | A_NUMBER | + | share_type | 3 | + | file_source | A_NUMBER | + | file_target | /FOLDER | + | permissions | 1 | + | stime | A_NUMBER | + | token | A_TOKEN | + | storage | A_NUMBER | + | mail_send | 0 | + | uid_owner | user0 | + | storage_id | home::user0 | + | file_parent | A_NUMBER | + | displayname_owner | user0 | + | url | AN_URL | + + Scenario: Creating a new public share, updating its permissions and getting its info + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | FOLDER | + | shareType | 3 | + And Updating last share with + | permissions | 7 | + And Getting info of last share + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Share fields of last share match with + | id | A_NUMBER | + | item_type | folder | + | item_source | A_NUMBER | + | share_type | 3 | + | file_source | A_NUMBER | + | file_target | /FOLDER | + | permissions | 7 | + | stime | A_NUMBER | + | token | A_TOKEN | + | storage | A_NUMBER | + | mail_send | 0 | + | uid_owner | user0 | + | storage_id | home::user0 | + | file_parent | A_NUMBER | + | displayname_owner | user0 | + | url | AN_URL | + + Scenario: Creating a new public share, updating publicUpload option and getting its info + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | FOLDER | + | shareType | 3 | + And Updating last share with + | publicUpload | true | + And Getting info of last share + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Share fields of last share match with + | id | A_NUMBER | + | item_type | folder | + | item_source | A_NUMBER | + | share_type | 3 | + | file_source | A_NUMBER | + | file_target | /FOLDER | + | permissions | 7 | + | stime | A_NUMBER | + | token | A_TOKEN | + | storage | A_NUMBER | + | mail_send | 0 | + | uid_owner | user0 | + | storage_id | home::user0 | + | file_parent | A_NUMBER | + | displayname_owner | user0 | + | url | AN_URL | + Scenario: getting all shares of a user using that user Given user "user0" exists And user "user1" exists diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 086b100f0b4..8f6f3b38d9e 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.", "Thank you for your patience." : "Děkujeme za vaši trpělivost.", "You are accessing the server from an untrusted domain." : "Přistupujete na server z nedůvěryhodné domény.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Kontaktujte prosím svého správce. Pokud spravujete tuto instalaci, nastavte \"trusted_domains\" v souboru config/config.php. Příklad konfigurace najdete v souboru config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako správci, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.", "Add \"%s\" as trusted domain" : "Přidat \"%s\" jako důvěryhodnou doménu", "App update required" : "Vyžadována aktualizace aplikace", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index 8f6430785a5..024e00159b3 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktujte prosím správce systému, pokud se tato zpráva objevuje opakovaně nebo nečekaně.", "Thank you for your patience." : "Děkujeme za vaši trpělivost.", "You are accessing the server from an untrusted domain." : "Přistupujete na server z nedůvěryhodné domény.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Kontaktujte prosím svého správce. Pokud spravujete tuto instalaci, nastavte \"trusted_domains\" v souboru config/config.php. Příklad konfigurace najdete v souboru config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "V závislosti na vaší konfiguraci vám může být, jako správci, umožněno použití tlačítka níže k označení této domény jako důvěryhodné.", "Add \"%s\" as trusted domain" : "Přidat \"%s\" jako důvěryhodnou doménu", "App update required" : "Vyžadována aktualizace aplikace", diff --git a/core/l10n/el.js b/core/l10n/el.js index b4a4b2efef7..2f264730565 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Επικοινωνήστε με το διαχειριστή του συστήματος αν αυτό το μήνυμα συνεχίζει να εμφανίζεται ή εμφανίστηκε απρόσμενα.", "Thank you for your patience." : "Σας ευχαριστούμε για την υπομονή σας.", "You are accessing the server from an untrusted domain." : "Η προσπέλαση του διακομιστή γίνεται από μη έμπιστο τομέα.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Παρακαλώ επικοινωνήστε με το διαχειριστή του συστήματος. Αν είστε ο διαχειριστής, ρυθμίστε την επιλογή \"trusted_domain\" στο αρχείο config/config.php. Μπορείτε να βρείτε παράδειγμα στο αρχείο config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Ανάλογα με τις ρυθμίσεις σας, σαν διαχειριστής θα μπορούσατε επίσης να χρησιμοποιήσετε το παρακάτω κουμπί για να εμπιστευθείτε αυτή την περιοχή.", "Add \"%s\" as trusted domain" : "Προσθήκη \"%s\" ως αξιόπιστη περιοχή", "App update required" : "Απαιτείται ενημέρωση εφαρμογής", diff --git a/core/l10n/el.json b/core/l10n/el.json index dfa81965cbc..cafa289fc32 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Επικοινωνήστε με το διαχειριστή του συστήματος αν αυτό το μήνυμα συνεχίζει να εμφανίζεται ή εμφανίστηκε απρόσμενα.", "Thank you for your patience." : "Σας ευχαριστούμε για την υπομονή σας.", "You are accessing the server from an untrusted domain." : "Η προσπέλαση του διακομιστή γίνεται από μη έμπιστο τομέα.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Παρακαλώ επικοινωνήστε με το διαχειριστή του συστήματος. Αν είστε ο διαχειριστής, ρυθμίστε την επιλογή \"trusted_domain\" στο αρχείο config/config.php. Μπορείτε να βρείτε παράδειγμα στο αρχείο config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Ανάλογα με τις ρυθμίσεις σας, σαν διαχειριστής θα μπορούσατε επίσης να χρησιμοποιήσετε το παρακάτω κουμπί για να εμπιστευθείτε αυτή την περιοχή.", "Add \"%s\" as trusted domain" : "Προσθήκη \"%s\" ως αξιόπιστη περιοχή", "App update required" : "Απαιτείται ενημέρωση εφαρμογής", diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index 28b9c98db67..6e4a2c438d9 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Ota yhteys järjestelmän ylläpitäjään, jos tämä viesti ilmenee uudelleen tai odottamatta.", "Thank you for your patience." : "Kiitos kärsivällisyydestäsi.", "You are accessing the server from an untrusted domain." : "Olet yhteydessä palvelimeen epäluotettavasta verkko-osoitteesta.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Ota yhteys ylläpitoon. Jos olet tämän asennuksen ylläpitäjä, määritä \"trusted_domains\"-asetus config/config.php-tiedostossa. Esimerkkimääritys on tarjolla tiedostossa config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Riippuen määrityksistä, ylläpitäjänä saatat kyetä käyttämään alla olevaa painiketta luodaksesi luottamussuhteen tähän toimialueeseen.", "Add \"%s\" as trusted domain" : "Lisää \"%s\" luotetuksi toimialueeksi", "App update required" : "Sovelluksen päivittäminen vaaditaan", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index 1a84873e6cc..bf88973a83c 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Ota yhteys järjestelmän ylläpitäjään, jos tämä viesti ilmenee uudelleen tai odottamatta.", "Thank you for your patience." : "Kiitos kärsivällisyydestäsi.", "You are accessing the server from an untrusted domain." : "Olet yhteydessä palvelimeen epäluotettavasta verkko-osoitteesta.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Ota yhteys ylläpitoon. Jos olet tämän asennuksen ylläpitäjä, määritä \"trusted_domains\"-asetus config/config.php-tiedostossa. Esimerkkimääritys on tarjolla tiedostossa config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Riippuen määrityksistä, ylläpitäjänä saatat kyetä käyttämään alla olevaa painiketta luodaksesi luottamussuhteen tähän toimialueeseen.", "Add \"%s\" as trusted domain" : "Lisää \"%s\" luotetuksi toimialueeksi", "App update required" : "Sovelluksen päivittäminen vaaditaan", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index e25840a7afc..5a73540f141 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Veuillez contacter votre administrateur système si ce message persiste ou apparaît de façon inattendue.", "Thank you for your patience." : "Merci de votre patience.", "You are accessing the server from an untrusted domain." : "Vous accédez au serveur à partir d'un domaine non approuvé.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Veuillez contacter votre administrateur. Si vous être l'administrateur de cette instance, il faut configurer la variable \"trusted_domains\" dans le fichier config/config.php. Un exemple de configuration est fournit dans le fichier config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En fonction de votre configuration, en tant qu'administrateur vous pouvez également utiliser le bouton ci-dessous pour approuver ce domaine.", "Add \"%s\" as trusted domain" : "Ajouter \"%s\" à la liste des domaines approuvés", "App update required" : "Mise à jour de l'application nécessaire", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 0d86fa37d5a..088381169db 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Veuillez contacter votre administrateur système si ce message persiste ou apparaît de façon inattendue.", "Thank you for your patience." : "Merci de votre patience.", "You are accessing the server from an untrusted domain." : "Vous accédez au serveur à partir d'un domaine non approuvé.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Veuillez contacter votre administrateur. Si vous être l'administrateur de cette instance, il faut configurer la variable \"trusted_domains\" dans le fichier config/config.php. Un exemple de configuration est fournit dans le fichier config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En fonction de votre configuration, en tant qu'administrateur vous pouvez également utiliser le bouton ci-dessous pour approuver ce domaine.", "Add \"%s\" as trusted domain" : "Ajouter \"%s\" à la liste des domaines approuvés", "App update required" : "Mise à jour de l'application nécessaire", diff --git a/core/l10n/it.js b/core/l10n/it.js index d95b02b2841..873c8fb4fea 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Contatta il tuo amministratore di sistema se questo messaggio persiste o appare inaspettatamente.", "Thank you for your patience." : "Grazie per la pazienza.", "You are accessing the server from an untrusted domain." : "Stai accedendo al server da un dominio non attendibile.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contatta il tuo amministratore di sistema. Se sei un amministratore di questa istanza, configura l'impostazione \"trusted_domains\" in config/config.php. Una configurazione di esempio è disponibile in config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "In base alla tua configurazione, come amministratore potrai utilizzare anche il pulsante in basso per rendere attendibile questo dominio.", "Add \"%s\" as trusted domain" : "Aggiungi \"%s\" come dominio attendibile", "App update required" : "Aggiornamento dell'applicazione richiesto", diff --git a/core/l10n/it.json b/core/l10n/it.json index 944a615653a..8dffade7400 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contatta il tuo amministratore di sistema se questo messaggio persiste o appare inaspettatamente.", "Thank you for your patience." : "Grazie per la pazienza.", "You are accessing the server from an untrusted domain." : "Stai accedendo al server da un dominio non attendibile.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contatta il tuo amministratore di sistema. Se sei un amministratore di questa istanza, configura l'impostazione \"trusted_domains\" in config/config.php. Una configurazione di esempio è disponibile in config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "In base alla tua configurazione, come amministratore potrai utilizzare anche il pulsante in basso per rendere attendibile questo dominio.", "Add \"%s\" as trusted domain" : "Aggiungi \"%s\" come dominio attendibile", "App update required" : "Aggiornamento dell'applicazione richiesto", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index c1fef991cc5..225948366f6 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に問い合わせてください。", "Thank you for your patience." : "しばらくお待ちください。", "You are accessing the server from an untrusted domain." : "信頼されていないドメインからサーバーにアクセスしています。", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "管理者に問い合わせてください。このサーバーの管理者の場合は、\"trusted_domain\" の設定を config/config.php に設定してください。config/config.sample.php にサンプルの設定方法が記載してあります。", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "環境により、下のボタンで信頼するドメインに追加する必要があるかもしれません。", "Add \"%s\" as trusted domain" : "\"%s\" を信頼するドメイン名に追加", "App update required" : "アプリの更新が必要", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index 99dfb583ccc..21cd77dacbb 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に問い合わせてください。", "Thank you for your patience." : "しばらくお待ちください。", "You are accessing the server from an untrusted domain." : "信頼されていないドメインからサーバーにアクセスしています。", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "管理者に問い合わせてください。このサーバーの管理者の場合は、\"trusted_domain\" の設定を config/config.php に設定してください。config/config.sample.php にサンプルの設定方法が記載してあります。", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "環境により、下のボタンで信頼するドメインに追加する必要があるかもしれません。", "Add \"%s\" as trusted domain" : "\"%s\" を信頼するドメイン名に追加", "App update required" : "アプリの更新が必要", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 44850a9f00b..4c5528163ec 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o seu administrador do sistema se esta mensagem persistir ou aparecer inesperadamente.", "Thank you for your patience." : "Obrigado pela sua paciência.", "You are accessing the server from an untrusted domain." : "Você está acessando o servidor a partir de um domínio não confiável.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor entre em contato com o administrador. Se você é um administrador deste exemplo, configure a definição \"trusted_domains\" em config/config.php. Um exemplo de configuração é fornecido em config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependendo da configuração, como administrador, você também pode ser capaz de usar o botão abaixo para confiar neste domínio.", "Add \"%s\" as trusted domain" : "Adicionar \"%s\" como um domínio confiavel", "App update required" : "Atualização de aplicativo é requerida", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 20300cf2343..023119c0fb1 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte o seu administrador do sistema se esta mensagem persistir ou aparecer inesperadamente.", "Thank you for your patience." : "Obrigado pela sua paciência.", "You are accessing the server from an untrusted domain." : "Você está acessando o servidor a partir de um domínio não confiável.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Por favor entre em contato com o administrador. Se você é um administrador deste exemplo, configure a definição \"trusted_domains\" em config/config.php. Um exemplo de configuração é fornecido em config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Dependendo da configuração, como administrador, você também pode ser capaz de usar o botão abaixo para confiar neste domínio.", "Add \"%s\" as trusted domain" : "Adicionar \"%s\" como um domínio confiavel", "App update required" : "Atualização de aplicativo é requerida", diff --git a/core/l10n/sq.js b/core/l10n/sq.js index 7a3ba05abef..a40e56b9907 100644 --- a/core/l10n/sq.js +++ b/core/l10n/sq.js @@ -269,6 +269,7 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Nëse ky mesazh shfaqet vazhdimisht ose u shfaq papritmas, lidhuni me përgjegjësin e sistemit.", "Thank you for your patience." : "Ju faleminderit për durimin.", "You are accessing the server from an untrusted domain." : "Po hyni në shërbyes nga një përkatësi jo e besuar.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Ju lutemi, lidhuni me përgjegjësin tuaj. Nëse jeni një përgjegjës në këtë instancë, formësoni rregullimin \"trusted_domains\" te config/config.php. Një formësim shembull jepet te config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Në varësi të formësimit tuaj, si administrator mundet gjithashtu të jeni në gjendje të përdorni butonin më poshtë për ta besuar këtë përkatësi.", "Add \"%s\" as trusted domain" : "Shtojeni \"%s\" si përkatësi të besuar", "App update required" : "Lypset përditësim aplikacioni", diff --git a/core/l10n/sq.json b/core/l10n/sq.json index 057510bfe94..4284bb9a40e 100644 --- a/core/l10n/sq.json +++ b/core/l10n/sq.json @@ -267,6 +267,7 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Nëse ky mesazh shfaqet vazhdimisht ose u shfaq papritmas, lidhuni me përgjegjësin e sistemit.", "Thank you for your patience." : "Ju faleminderit për durimin.", "You are accessing the server from an untrusted domain." : "Po hyni në shërbyes nga një përkatësi jo e besuar.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Ju lutemi, lidhuni me përgjegjësin tuaj. Nëse jeni një përgjegjës në këtë instancë, formësoni rregullimin \"trusted_domains\" te config/config.php. Një formësim shembull jepet te config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Në varësi të formësimit tuaj, si administrator mundet gjithashtu të jeni në gjendje të përdorni butonin më poshtë për ta besuar këtë përkatësi.", "Add \"%s\" as trusted domain" : "Shtojeni \"%s\" si përkatësi të besuar", "App update required" : "Lypset përditësim aplikacioni", diff --git a/tests/core/avatar/avatarcontrollertest.php b/tests/core/avatar/avatarcontrollertest.php index 929a4e5f91d..948a432d2ed 100644 --- a/tests/core/avatar/avatarcontrollertest.php +++ b/tests/core/avatar/avatarcontrollertest.php @@ -28,6 +28,10 @@ use OCP\AppFramework\Http; use OCP\Image; use OCP\Files\Folder; use OCP\Files\File; +use OCP\IUser; +use OCP\IAvatar; + +use Test\Traits\UserTrait; /** * Overwrite is_uploaded_file in this namespace to allow proper unit testing of @@ -43,79 +47,53 @@ function is_uploaded_file($filename) { * @package OC\Core\Avatar */ class AvatarControllerTest extends \Test\TestCase { + use UserTrait; /** @var IAppContainer */ private $container; - /** @var string */ - private $user; - /** @var string */ - private $oldUser; /** @var AvatarController */ private $avatarController; - + /** @var IAvatar */ private $avatarMock; - + /** @var IUser */ private $userMock; - + protected function setUp() { + parent::setUp(); + $this->createUser('userid', 'pass'); + $this->loginAsUser('userid'); + $app = new Application; $this->container = $app->getContainer(); $this->container['AppName'] = 'core'; - $this->container['AvatarManager'] = $this->getMockBuilder('OCP\IAvatarManager') - ->disableOriginalConstructor()->getMock(); + $this->container['AvatarManager'] = $this->getMock('OCP\IAvatarManager'); $this->container['Cache'] = $this->getMockBuilder('OC\Cache\File') ->disableOriginalConstructor()->getMock(); - $this->container['L10N'] = $this->getMockBuilder('OCP\IL10N') - ->disableOriginalConstructor()->getMock(); + $this->container['L10N'] = $this->getMock('OCP\IL10N'); $this->container['L10N']->method('t')->will($this->returnArgument(0)); - $this->container['UserManager'] = $this->getMockBuilder('OCP\IUserManager') - ->disableOriginalConstructor()->getMock(); - $this->container['UserSession'] = $this->getMockBuilder('OCP\IUserSession') - ->disableOriginalConstructor()->getMock(); - $this->container['Request'] = $this->getMockBuilder('OCP\IRequest') - ->disableOriginalConstructor()->getMock(); - $this->container['UserFolder'] = $this->getMockBuilder('OCP\Files\Folder') - ->disableOriginalConstructor()->getMock(); - $this->container['Logger'] = $this->getMockBuilder('OCP\ILogger') - ->disableOriginalConstructor()->getMock(); + $this->container['UserManager'] = $this->getMock('OCP\IUserManager'); + $this->container['UserSession'] = $this->getMock('OCP\IUserSession'); + $this->container['Request'] = $this->getMock('OCP\IRequest'); + $this->container['UserFolder'] = $this->getMock('OCP\Files\Folder'); + $this->container['Logger'] = $this->getMock('OCP\ILogger'); - $this->avatarMock = $this->getMockBuilder('OCP\IAvatar') - ->disableOriginalConstructor()->getMock(); - $this->userMock = $this->getMockBuilder('OCP\IUser') - ->disableOriginalConstructor()->getMock(); + $this->avatarMock = $this->getMock('OCP\IAvatar'); + $this->userMock = $this->getMock('OCP\IUser'); $this->avatarController = $this->container['AvatarController']; - // Store current User - $this->oldUser = \OC_User::getUser(); - - // Create a dummy user - $this->user = $this->getUniqueID('user'); - - OC::$server->getUserManager()->createUser($this->user, $this->user); - $this->loginAsUser($this->user); - // Configure userMock - $this->userMock->method('getDisplayName')->willReturn($this->user); - $this->userMock->method('getUID')->willReturn($this->user); + $this->userMock->method('getDisplayName')->willReturn('displayName'); + $this->userMock->method('getUID')->willReturn('userId'); $this->container['UserManager']->method('get') - ->willReturnMap([[$this->user, $this->userMock]]); + ->willReturnMap([['userId', $this->userMock]]); $this->container['UserSession']->method('getUser')->willReturn($this->userMock); } public function tearDown() { - \OC_Util::tearDownFS(); - \OC_User::setUserId(''); - Filesystem::tearDown(); - OC::$server->getUserManager()->get($this->user)->delete(); - \OC_User::setIncognitoMode(false); - - \OC::$server->getSession()->set('public_link_authenticated', ''); - - // Set old user - \OC_User::setUserId($this->oldUser); - \OC_Util::setupFS($this->oldUser); + $this->logout(); + parent::tearDown(); } /** @@ -123,29 +101,32 @@ class AvatarControllerTest extends \Test\TestCase { */ public function testGetAvatarNoAvatar() { $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); - $response = $this->avatarController->getAvatar($this->user, 32); + $response = $this->avatarController->getAvatar('userId', 32); //Comment out until JS is fixed //$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); $this->assertEquals(Http::STATUS_OK, $response->getStatus()); - $this->assertEquals($this->user, $response->getData()['data']['displayname']); + $this->assertEquals('displayName', $response->getData()['data']['displayname']); } /** * Fetch the user's avatar */ public function testGetAvatar() { - $image = new Image(OC::$SERVERROOT.'/tests/data/testimage.jpg'); + $image = $this->getMock('OCP\IImage'); + $image->method('data')->willReturn('image data'); + $image->method('mimeType')->willReturn('image type'); + $this->avatarMock->method('get')->willReturn($image); $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); - $response = $this->avatarController->getAvatar($this->user, 32); + $response = $this->avatarController->getAvatar('userId', 32); $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertArrayHasKey('Content-Type', $response->getHeaders()); + $this->assertEquals('image type', $response->getHeaders()['Content-Type']); - $image2 = new Image($response->getData()); - $this->assertEquals($image->mimeType(), $image2->mimeType()); - $this->assertEquals(crc32($response->getData()), $response->getEtag()); + $this->assertEquals(crc32('image data'), $response->getEtag()); } /** @@ -155,7 +136,7 @@ class AvatarControllerTest extends \Test\TestCase { $this->avatarMock->method('get')->willReturn(null); $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); - $response = $this->avatarController->getAvatar($this->user . 'doesnotexist', 32); + $response = $this->avatarController->getAvatar('userDoesnotexist', 32); //Comment out until JS is fixed //$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); @@ -173,7 +154,7 @@ class AvatarControllerTest extends \Test\TestCase { $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); - $this->avatarController->getAvatar($this->user, 32); + $this->avatarController->getAvatar('userId', 32); } /** @@ -186,7 +167,7 @@ class AvatarControllerTest extends \Test\TestCase { $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); - $this->avatarController->getAvatar($this->user, 0); + $this->avatarController->getAvatar('userId', 0); } /** @@ -199,7 +180,7 @@ class AvatarControllerTest extends \Test\TestCase { $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); - $this->avatarController->getAvatar($this->user, 2049); + $this->avatarController->getAvatar('userId', 2049); } /** |