diff options
38 files changed, 402 insertions, 50 deletions
diff --git a/apps/comments/l10n/pl.js b/apps/comments/l10n/pl.js index d5e3f4b3320..d4a492e1da2 100644 --- a/apps/comments/l10n/pl.js +++ b/apps/comments/l10n/pl.js @@ -14,7 +14,10 @@ OC.L10N.register( "Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}", "{count} unread comments" : "{count} nieprzeczytanych komentarzy", "Comment" : "Komentarz", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>", + "You commented" : "Skomentowałeś/łaś", "%1$s commented" : "%1$s skomentował", + "You commented on %2$s" : "Skomentowałeś/łaś %2$s", "%1$s commented on %2$s" : "%1$s skomentował %2$s" }, "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/comments/l10n/pl.json b/apps/comments/l10n/pl.json index 28bbf20817f..78e9f0ff210 100644 --- a/apps/comments/l10n/pl.json +++ b/apps/comments/l10n/pl.json @@ -12,7 +12,10 @@ "Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}", "{count} unread comments" : "{count} nieprzeczytanych komentarzy", "Comment" : "Komentarz", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>", + "You commented" : "Skomentowałeś/łaś", "%1$s commented" : "%1$s skomentował", + "You commented on %2$s" : "Skomentowałeś/łaś %2$s", "%1$s commented on %2$s" : "%1$s skomentował %2$s" },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/dav/lib/Connector/Sabre/Auth.php b/apps/dav/lib/Connector/Sabre/Auth.php index 51f0acbe2ee..82c2711b560 100644 --- a/apps/dav/lib/Connector/Sabre/Auth.php +++ b/apps/dav/lib/Connector/Sabre/Auth.php @@ -31,8 +31,10 @@ namespace OCA\DAV\Connector\Sabre; use Exception; use OC\AppFramework\Http\Request; +use OC\Authentication\Exceptions\PasswordLoginForbiddenException; use OC\Authentication\TwoFactorAuth\Manager; use OC\User\Session; +use OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden; use OCP\IRequest; use OCP\ISession; use Sabre\DAV\Auth\Backend\AbstractBasic; @@ -115,14 +117,19 @@ class Auth extends AbstractBasic { return true; } else { \OC_Util::setupFS(); //login hooks may need early access to the filesystem - if($this->userSession->logClientIn($username, $password, $this->request)) { - \OC_Util::setupFS($this->userSession->getUser()->getUID()); - $this->session->set(self::DAV_AUTHENTICATED, $this->userSession->getUser()->getUID()); + try { + if ($this->userSession->logClientIn($username, $password, $this->request)) { + \OC_Util::setupFS($this->userSession->getUser()->getUID()); + $this->session->set(self::DAV_AUTHENTICATED, $this->userSession->getUser()->getUID()); + $this->session->close(); + return true; + } else { + $this->session->close(); + return false; + } + } catch (PasswordLoginForbiddenException $ex) { $this->session->close(); - return true; - } else { - $this->session->close(); - return false; + throw new PasswordLoginForbidden(); } } } diff --git a/apps/dav/lib/Connector/Sabre/Exception/PasswordLoginForbidden.php b/apps/dav/lib/Connector/Sabre/Exception/PasswordLoginForbidden.php new file mode 100644 index 00000000000..6537da3d56d --- /dev/null +++ b/apps/dav/lib/Connector/Sabre/Exception/PasswordLoginForbidden.php @@ -0,0 +1,54 @@ +<?php + +/** + * @author Christoph Wurst <christoph@owncloud.com> + * + * @copyright Copyright (c) 2016, 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\Exception; + +use DOMElement; +use Sabre\DAV\Server; +use Sabre\DAV\Exception\NotAuthenticated; + +class PasswordLoginForbidden extends NotAuthenticated { + + const NS_OWNCLOUD = 'http://owncloud.org/ns'; + + public function getHTTPCode() { + return 401; + } + + /** + * This method allows the exception to include additional information + * into the WebDAV error response + * + * @param Server $server + * @param DOMElement $errorNode + * @return void + */ + public function serialize(Server $server, DOMElement $errorNode) { + + // set ownCloud namespace + $errorNode->setAttribute('xmlns:o', self::NS_OWNCLOUD); + + $error = $errorNode->ownerDocument->createElementNS('o:', 'o:hint', 'password login forbidden'); + $errorNode->appendChild($error); + } + +} diff --git a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php index 147a0c2b8c5..9564298f23a 100644 --- a/apps/dav/tests/unit/Connector/Sabre/AuthTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/AuthTest.php @@ -208,6 +208,25 @@ class AuthTest extends TestCase { $this->assertFalse($this->invokePrivate($this->auth, 'validateUserPass', ['MyTestUser', 'MyTestPassword'])); } + /** + * @expectedException \OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden + */ + public function testValidateUserPassWithPasswordLoginForbidden() { + $this->userSession + ->expects($this->once()) + ->method('isLoggedIn') + ->will($this->returnValue(false)); + $this->userSession + ->expects($this->once()) + ->method('logClientIn') + ->with('MyTestUser', 'MyTestPassword') + ->will($this->throwException(new \OC\Authentication\Exceptions\PasswordLoginForbiddenException())); + $this->session + ->expects($this->once()) + ->method('close'); + + $this->invokePrivate($this->auth, 'validateUserPass', ['MyTestUser', 'MyTestPassword']); + } public function testAuthenticateAlreadyLoggedInWithoutCsrfTokenForNonGet() { $request = $this->getMockBuilder('Sabre\HTTP\RequestInterface') diff --git a/apps/federatedfilesharing/l10n/pl.js b/apps/federatedfilesharing/l10n/pl.js index 1d8b949c74a..4f65f44553e 100644 --- a/apps/federatedfilesharing/l10n/pl.js +++ b/apps/federatedfilesharing/l10n/pl.js @@ -1,6 +1,7 @@ OC.L10N.register( "federatedfilesharing", { + "Federated sharing" : "Sfederowane udostępnianie", "Sharing %s failed, because this item is already shared with %s" : "Współdzielenie %s nie powiodło się, ponieważ element jest już współdzielony z %s", "File is already shared with %s" : "Plik jest już współdzielony z %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Współdzielenie %s nie powiodło się, nie można odnaleźć %s. Prawdopobnie serwer nie jest teraz osiągalny.", diff --git a/apps/federatedfilesharing/l10n/pl.json b/apps/federatedfilesharing/l10n/pl.json index c44eecbeeb7..7b43ed3fce1 100644 --- a/apps/federatedfilesharing/l10n/pl.json +++ b/apps/federatedfilesharing/l10n/pl.json @@ -1,4 +1,5 @@ { "translations": { + "Federated sharing" : "Sfederowane udostępnianie", "Sharing %s failed, because this item is already shared with %s" : "Współdzielenie %s nie powiodło się, ponieważ element jest już współdzielony z %s", "File is already shared with %s" : "Plik jest już współdzielony z %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Współdzielenie %s nie powiodło się, nie można odnaleźć %s. Prawdopobnie serwer nie jest teraz osiągalny.", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index a366c6a967c..c5273a36ebd 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Zła ścieżka.", "Files" : "Pliki", "All files" : "Wszystkie pliki", + "File could not be found" : "Nie można odnaleźć pliku", "Home" : "Dom", "Close" : "Zamknij", "Favorites" : "Ulubione", @@ -32,8 +33,15 @@ OC.L10N.register( "Could not get result from server." : "Nie można uzyskać wyniku z serwera.", "Uploading..." : "Wgrywanie....", "..." : "...", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Pozostało {hours}:{minutes}:{seconds} hour{plural_s} ", + "{hours}:{minutes}h" : "{hours}:{minutes}godz.", + "{minutes}:{seconds} minute{plural_s} left" : "Pozostało {minutes}:{seconds} minute{plural_s}", + "{minutes}:{seconds}m" : "{minutes}:{seconds}min.", "{seconds} second{plural_s} left" : "Pozostało sekund: {seconds}", "{seconds}s" : "{seconds} s", + "Any moment now..." : "Jeszcze chwilę...", + "Soon..." : "Wkrótce...", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})", "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", "Actions" : "Akcje", "Download" : "Pobierz", @@ -49,6 +57,10 @@ OC.L10N.register( "This directory is unavailable, please check the logs or contact the administrator" : "Ten folder jest niedostępny, proszę sprawdzić logi lub skontaktować się z administratorem.", "Could not move \"{file}\", target exists" : "Nie można było przenieść „{file}” – plik o takiej nazwie już istnieje", "Could not move \"{file}\"" : "Nie można było przenieść \"{file}\"", + "{newName} already exists" : "{newName} już istnieje", + "Could not rename \"{fileName}\", it does not exist any more" : "Nie można zmienić nazwy \"{fileName}\", plik nie istnieje", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nazwa \"{targetName}\" jest juz używana w folderze \"{dir}\". Proszę wybrać inną nazwę.", + "Could not rename \"{fileName}\"" : "Nie można zmienić nazwy \"{fileName}\"", "Could not create file \"{file}\"" : "Nie można było utworzyć pliku \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Nie można było utworzyć pliku \"{file}\", ponieważ ten plik już istnieje.", "Could not create folder \"{dir}\"" : "Nie można utworzyć folderu „{dir}”", @@ -71,8 +83,10 @@ OC.L10N.register( "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", "Path" : "Ścieżka", + "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów"], "Favorited" : "Ulubione", "Favorite" : "Ulubione", + "Local link" : "Lokalny odnośnik", "Folder" : "Folder", "New folder" : "Nowy folder", "{newname} already exists" : "{newname} już istnieje", @@ -80,6 +94,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Wystąpił błąd podczas aktualizacji tagów", "A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>", "A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ogranicz powiadomienia o utworzeniu i zmianach do swoich <strong>ulubionych plkow</strong> <em>(Tylko w strumieniu aktywności)</em>", "A file or folder has been <strong>deleted</strong>" : "Plik lub folder został <strong>usunięty</strong>", "A file or folder has been <strong>restored</strong>" : "Plik lub folder został <strong>przywrócy</strong>", "You created %1$s" : "Utworzyłeś %1$s", @@ -99,15 +114,20 @@ OC.L10N.register( "Maximum upload size" : "Maksymalny rozmiar wysyłanego pliku", "max. possible: " : "maks. możliwy:", "Save" : "Zapisz", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Z PHP-FPM zastosowanie zmian może zająć 5 minut.", + "Missing permissions to edit from here." : "Brakuje uprawnień do edycji.", "Settings" : "Ustawienia", "Show hidden files" : "Pokaż ukryte pliki", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Użyj tego adresu aby uzyskać <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dostęp do swoich plików poprzez WebDAV</a>", "No files in here" : "Brak plików", + "Upload some content or sync with your devices!" : "Wgraj coś, albo wykonaj synchronizację ze swoimi urządzeniami.", "No entries found in this folder" : "Brak wpisów w tym folderze", "Select all" : "Wybierz wszystko", "Upload too large" : "Ładowany plik jest za duży", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.", "No favorites" : "Brak ulubionych", + "Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj", "Text file" : "Plik tekstowy", "New text file.txt" : "Nowy plik tekstowy.txt" }, diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index 05b65b2f84a..c0be569faf6 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -19,6 +19,7 @@ "Invalid directory." : "Zła ścieżka.", "Files" : "Pliki", "All files" : "Wszystkie pliki", + "File could not be found" : "Nie można odnaleźć pliku", "Home" : "Dom", "Close" : "Zamknij", "Favorites" : "Ulubione", @@ -30,8 +31,15 @@ "Could not get result from server." : "Nie można uzyskać wyniku z serwera.", "Uploading..." : "Wgrywanie....", "..." : "...", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Pozostało {hours}:{minutes}:{seconds} hour{plural_s} ", + "{hours}:{minutes}h" : "{hours}:{minutes}godz.", + "{minutes}:{seconds} minute{plural_s} left" : "Pozostało {minutes}:{seconds} minute{plural_s}", + "{minutes}:{seconds}m" : "{minutes}:{seconds}min.", "{seconds} second{plural_s} left" : "Pozostało sekund: {seconds}", "{seconds}s" : "{seconds} s", + "Any moment now..." : "Jeszcze chwilę...", + "Soon..." : "Wkrótce...", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} z {totalSize} ({bitrate})", "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", "Actions" : "Akcje", "Download" : "Pobierz", @@ -47,6 +55,10 @@ "This directory is unavailable, please check the logs or contact the administrator" : "Ten folder jest niedostępny, proszę sprawdzić logi lub skontaktować się z administratorem.", "Could not move \"{file}\", target exists" : "Nie można było przenieść „{file}” – plik o takiej nazwie już istnieje", "Could not move \"{file}\"" : "Nie można było przenieść \"{file}\"", + "{newName} already exists" : "{newName} już istnieje", + "Could not rename \"{fileName}\", it does not exist any more" : "Nie można zmienić nazwy \"{fileName}\", plik nie istnieje", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nazwa \"{targetName}\" jest juz używana w folderze \"{dir}\". Proszę wybrać inną nazwę.", + "Could not rename \"{fileName}\"" : "Nie można zmienić nazwy \"{fileName}\"", "Could not create file \"{file}\"" : "Nie można było utworzyć pliku \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Nie można było utworzyć pliku \"{file}\", ponieważ ten plik już istnieje.", "Could not create folder \"{dir}\"" : "Nie można utworzyć folderu „{dir}”", @@ -69,8 +81,10 @@ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Miejsce dla {owner} jest na wyczerpaniu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", "Path" : "Ścieżka", + "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtów"], "Favorited" : "Ulubione", "Favorite" : "Ulubione", + "Local link" : "Lokalny odnośnik", "Folder" : "Folder", "New folder" : "Nowy folder", "{newname} already exists" : "{newname} już istnieje", @@ -78,6 +92,7 @@ "An error occurred while trying to update the tags" : "Wystąpił błąd podczas aktualizacji tagów", "A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>", "A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Ogranicz powiadomienia o utworzeniu i zmianach do swoich <strong>ulubionych plkow</strong> <em>(Tylko w strumieniu aktywności)</em>", "A file or folder has been <strong>deleted</strong>" : "Plik lub folder został <strong>usunięty</strong>", "A file or folder has been <strong>restored</strong>" : "Plik lub folder został <strong>przywrócy</strong>", "You created %1$s" : "Utworzyłeś %1$s", @@ -97,15 +112,20 @@ "Maximum upload size" : "Maksymalny rozmiar wysyłanego pliku", "max. possible: " : "maks. możliwy:", "Save" : "Zapisz", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Z PHP-FPM zastosowanie zmian może zająć 5 minut.", + "Missing permissions to edit from here." : "Brakuje uprawnień do edycji.", "Settings" : "Ustawienia", "Show hidden files" : "Pokaż ukryte pliki", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Użyj tego adresu aby uzyskać <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dostęp do swoich plików poprzez WebDAV</a>", "No files in here" : "Brak plików", + "Upload some content or sync with your devices!" : "Wgraj coś, albo wykonaj synchronizację ze swoimi urządzeniami.", "No entries found in this folder" : "Brak wpisów w tym folderze", "Select all" : "Wybierz wszystko", "Upload too large" : "Ładowany plik jest za duży", "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Pliki, które próbujesz przesłać, przekraczają maksymalną dopuszczalną wielkość.", "No favorites" : "Brak ulubionych", + "Files and folders you mark as favorite will show up here" : "Pliki i katalogi, które oznaczysz jako ulubione wyświetlą się tutaj", "Text file" : "Plik tekstowy", "New text file.txt" : "Nowy plik tekstowy.txt" },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 2477f513db3..d210c158ec1 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -854,7 +854,7 @@ MountConfigListView.prototype = _.extend({ this.configureAuthMechanism($tr, storageConfig.authMechanism, onCompletion); if (storageConfig.backendOptions) { - $td.children().each(function() { + $td.find('input, select').each(function() { var input = $(this); var val = storageConfig.backendOptions[input.data('parameter')]; if (val !== undefined) { @@ -1001,7 +1001,7 @@ MountConfigListView.prototype = _.extend({ newElement = $('<input type="password" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" placeholder="'+ trimmedPlaceholder+'" />'); } else if (placeholder.type === MountConfigListView.ParameterTypes.BOOLEAN) { var checkboxId = _.uniqueId('checkbox_'); - newElement = $('<input type="checkbox" id="'+checkboxId+'" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" /><label for="'+checkboxId+'">'+ trimmedPlaceholder+'</label>'); + newElement = $('<div><label><input type="checkbox" id="'+checkboxId+'" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" />'+ trimmedPlaceholder+'</label></div>'); } else if (placeholder.type === MountConfigListView.ParameterTypes.HIDDEN) { newElement = $('<input type="hidden" class="'+classes.join(' ')+'" data-parameter="'+parameter+'" />'); } else { diff --git a/apps/files_external/lib/Lib/Storage/Google.php b/apps/files_external/lib/Lib/Storage/Google.php index 96f12800c10..0b617aafe9d 100644 --- a/apps/files_external/lib/Lib/Storage/Google.php +++ b/apps/files_external/lib/Lib/Storage/Google.php @@ -168,11 +168,11 @@ class Google extends \OC\Files\Storage\Common { $path = trim($path, '/'); $this->driveFiles[$path] = $file; if ($file === false) { - // Set all child paths as false + // Remove all children $len = strlen($path); foreach ($this->driveFiles as $key => $file) { if (substr($key, 0, $len) === $path) { - $this->driveFiles[$key] = false; + unset($this->driveFiles[$key]); } } } diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php index c9cc40b0ba0..6662f637039 100644 --- a/apps/files_external/templates/settings.php +++ b/apps/files_external/templates/settings.php @@ -51,13 +51,17 @@ break; case DefinitionParameter::VALUE_BOOLEAN: ?> <?php $checkboxId = uniqid("checkbox_"); ?> + <div> + <label> <input type="checkbox" id="<?php p($checkboxId); ?>" <?php if (!empty($classes)): ?> class="checkbox <?php p(implode(' ', $classes)); ?>"<?php endif; ?> data-parameter="<?php p($parameter->getName()); ?>" <?php if ($value === true): ?> checked="checked"<?php endif; ?> /> - <label for="<?php p($checkboxId); ?>"><?php p($placeholder); ?></label> + <?php p($placeholder); ?> + </label> + </div> <?php break; case DefinitionParameter::VALUE_HIDDEN: ?> diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 5740574ec4c..c6ae6903eec 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -32,14 +32,14 @@ $l = \OC::$server->getL10N('files_sharing'); \OC::$CLASSPATH['OC_Share_Backend_Folder'] = 'files_sharing/lib/share/folder.php'; \OC::$CLASSPATH['OC\Files\Storage\Shared'] = 'files_sharing/lib/sharedstorage.php'; -$application = new \OCA\Files_Sharing\AppInfo\Application(); -$application->registerMountProviders(); - \OCA\Files_Sharing\Helper::registerHooks(); \OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); \OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); +$application = new \OCA\Files_Sharing\AppInfo\Application(); +$application->registerMountProviders(); + $eventDispatcher = \OC::$server->getEventDispatcher(); $eventDispatcher->addListener( 'OCA\Files::loadAdditionalScripts', diff --git a/apps/files_sharing/lib/Helper.php b/apps/files_sharing/lib/Helper.php index e4640f82eb6..2353a281b7e 100644 --- a/apps/files_sharing/lib/Helper.php +++ b/apps/files_sharing/lib/Helper.php @@ -277,19 +277,23 @@ class Helper { /** * get default share folder * + * @param \OC\Files\View * @return string */ - public static function getShareFolder() { + public static function getShareFolder($view = null) { + if ($view === null) { + $view = Filesystem::getView(); + } $shareFolder = \OC::$server->getConfig()->getSystemValue('share_folder', '/'); $shareFolder = Filesystem::normalizePath($shareFolder); - if (!Filesystem::file_exists($shareFolder)) { + if (!$view->file_exists($shareFolder)) { $dir = ''; $subdirs = explode('/', $shareFolder); foreach ($subdirs as $subdir) { $dir = $dir . '/' . $subdir; - if (!Filesystem::is_dir($dir)) { - Filesystem::mkdir($dir); + if (!$view->is_dir($dir)) { + $view->mkdir($dir); } } } diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 83527053f43..2b066bd2d94 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -81,7 +81,7 @@ class SharedMount extends MountPoint implements MoveableMount { $parent = dirname($share->getTarget()); if (!$this->recipientView->is_dir($parent)) { - $parent = Helper::getShareFolder(); + $parent = Helper::getShareFolder($this->recipientView); } $newMountPoint = $this->generateUniqueTarget( diff --git a/apps/systemtags/l10n/ca.js b/apps/systemtags/l10n/ca.js index 20ec2d4edb1..46d9d409662 100644 --- a/apps/systemtags/l10n/ca.js +++ b/apps/systemtags/l10n/ca.js @@ -2,6 +2,27 @@ OC.L10N.register( "systemtags", { "Tags" : "Etiquetes", + "Tagged files" : "Fitxers marcats", + "Select tags to filter by" : "Selecciona les marques per filtrar-ne", + "Please select tags to filter by" : "Si us plau selecciona les marques per filtrar-ne", + "No files found for the selected tags" : "No s'han trobat fitxers per les marques sel·leccionades", + "<strong>System tags</strong> for a file have been modified" : "Les <strong>Marques de Sistema</strong> d'un fitxer s'han modificat", + "You assigned system tag %3$s" : "Has assignat la marca de sistema %3$s", + "%1$s assigned system tag %3$s" : "%1$s ha assignat la marca de sistema %3$s", + "You unassigned system tag %3$s" : "Has des-assignat la marca de sistema %3$s", + "%1$s unassigned system tag %3$s" : "%1$s ha des-assignat la marca de sistema %3$s", + "You created system tag %2$s" : "Has creat la marca de sistema %2$s", + "%1$s created system tag %2$s" : "%1$s ha creat la marca de sistema %2$s", + "You deleted system tag %2$s" : "Has esborrat la marca de sistema %2$s", + "%1$s deleted system tag %2$s" : "%1$s ha esborrat la marca de sistema %2$s", + "You updated system tag %3$s to %2$s" : "Has actualitzat les marques de sistema de la %3$s a la %2$s", + "%1$s updated system tag %3$s to %2$s" : "%1$s ha actualitzat les marques de sistema de la %3$s a la %2$s", + "You assigned system tag %3$s to %2$s" : "Has assignat les marques de sistema de la %3$s a la %2$s", + "%1$s assigned system tag %3$s to %2$s" : "%1$s ha assignat les marques de sistema de la %3$s a la %2$s", + "You unassigned system tag %3$s from %2$s" : "Has des-assignat les marques de sistema de la %3$s a la %2$s", + "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha des-assignat les marques de sistema de la %3$s a la %2$s", + "%s (restricted)" : "%s (restringit)", + "%s (invisible)" : "%s (invisible)", "No files in here" : "No hi ha arxius", "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", "Name" : "Nom", diff --git a/apps/systemtags/l10n/ca.json b/apps/systemtags/l10n/ca.json index 87c8c678761..9bb1d6fba83 100644 --- a/apps/systemtags/l10n/ca.json +++ b/apps/systemtags/l10n/ca.json @@ -1,5 +1,26 @@ { "translations": { "Tags" : "Etiquetes", + "Tagged files" : "Fitxers marcats", + "Select tags to filter by" : "Selecciona les marques per filtrar-ne", + "Please select tags to filter by" : "Si us plau selecciona les marques per filtrar-ne", + "No files found for the selected tags" : "No s'han trobat fitxers per les marques sel·leccionades", + "<strong>System tags</strong> for a file have been modified" : "Les <strong>Marques de Sistema</strong> d'un fitxer s'han modificat", + "You assigned system tag %3$s" : "Has assignat la marca de sistema %3$s", + "%1$s assigned system tag %3$s" : "%1$s ha assignat la marca de sistema %3$s", + "You unassigned system tag %3$s" : "Has des-assignat la marca de sistema %3$s", + "%1$s unassigned system tag %3$s" : "%1$s ha des-assignat la marca de sistema %3$s", + "You created system tag %2$s" : "Has creat la marca de sistema %2$s", + "%1$s created system tag %2$s" : "%1$s ha creat la marca de sistema %2$s", + "You deleted system tag %2$s" : "Has esborrat la marca de sistema %2$s", + "%1$s deleted system tag %2$s" : "%1$s ha esborrat la marca de sistema %2$s", + "You updated system tag %3$s to %2$s" : "Has actualitzat les marques de sistema de la %3$s a la %2$s", + "%1$s updated system tag %3$s to %2$s" : "%1$s ha actualitzat les marques de sistema de la %3$s a la %2$s", + "You assigned system tag %3$s to %2$s" : "Has assignat les marques de sistema de la %3$s a la %2$s", + "%1$s assigned system tag %3$s to %2$s" : "%1$s ha assignat les marques de sistema de la %3$s a la %2$s", + "You unassigned system tag %3$s from %2$s" : "Has des-assignat les marques de sistema de la %3$s a la %2$s", + "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha des-assignat les marques de sistema de la %3$s a la %2$s", + "%s (restricted)" : "%s (restringit)", + "%s (invisible)" : "%s (invisible)", "No files in here" : "No hi ha arxius", "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", "Name" : "Nom", diff --git a/apps/updatenotification/l10n/ca.js b/apps/updatenotification/l10n/ca.js index 5f6db3199a6..10e7328cb07 100644 --- a/apps/updatenotification/l10n/ca.js +++ b/apps/updatenotification/l10n/ca.js @@ -1,7 +1,19 @@ OC.L10N.register( "updatenotification", { + "Update notifications" : "Notificacions d'actualització", "{version} is available. Get more information on how to update." : "Hi ha disponible la versió {version}. Obtingueu més informació sobre com actualitzar.", - "Updater" : "Actualitzador" + "Updated channel" : "Canal actualitzat", + "ownCloud core" : "Nucli d'ownCloud", + "Update for %1$s to version %2$s is available." : "L'actualització per %1$s a la versió %2$s està disponible.", + "Updater" : "Actualitzador", + "A new version is available: %s" : "Una nova versió està disponible: %s", + "Open updater" : "Obrir actualitzador", + "Your version is up to date." : "La teva versió està actualitzada.", + "Checked on %s" : "Comprovat en %s", + "Update channel:" : "Actualitzar canal:", + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Sempre podràs actualitzar a una versió més recent / canal experimental. Però mai es pot fer un \"downgrade\" a un canal més estable.", + "Notify members of the following groups about available updates:" : "Notificar als membres dels següents grups sobre les actualitzacions disponibles:", + "Only notification for app updates are available, because the selected update channel for ownCloud itself does not allow notifications." : "Només notificació d'actualitzacions d'aplicacions estan disponibles, degut a que el canal d'actualització per ownCloud seleccionat no permet les notificacions." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/updatenotification/l10n/ca.json b/apps/updatenotification/l10n/ca.json index 74b1a731e90..673db0accd8 100644 --- a/apps/updatenotification/l10n/ca.json +++ b/apps/updatenotification/l10n/ca.json @@ -1,5 +1,17 @@ { "translations": { + "Update notifications" : "Notificacions d'actualització", "{version} is available. Get more information on how to update." : "Hi ha disponible la versió {version}. Obtingueu més informació sobre com actualitzar.", - "Updater" : "Actualitzador" + "Updated channel" : "Canal actualitzat", + "ownCloud core" : "Nucli d'ownCloud", + "Update for %1$s to version %2$s is available." : "L'actualització per %1$s a la versió %2$s està disponible.", + "Updater" : "Actualitzador", + "A new version is available: %s" : "Una nova versió està disponible: %s", + "Open updater" : "Obrir actualitzador", + "Your version is up to date." : "La teva versió està actualitzada.", + "Checked on %s" : "Comprovat en %s", + "Update channel:" : "Actualitzar canal:", + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Sempre podràs actualitzar a una versió més recent / canal experimental. Però mai es pot fer un \"downgrade\" a un canal més estable.", + "Notify members of the following groups about available updates:" : "Notificar als membres dels següents grups sobre les actualitzacions disponibles:", + "Only notification for app updates are available, because the selected update channel for ownCloud itself does not allow notifications." : "Només notificació d'actualitzacions d'aplicacions estan disponibles, degut a que el canal d'actualització per ownCloud seleccionat no permet les notificacions." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/pl.js b/apps/updatenotification/l10n/pl.js index d86fdf3c243..ffeb1b0601f 100644 --- a/apps/updatenotification/l10n/pl.js +++ b/apps/updatenotification/l10n/pl.js @@ -12,6 +12,8 @@ OC.L10N.register( "Your version is up to date." : "Posiadasz aktualną wersję.", "Checked on %s" : "Sprawdzone na %s", "Update channel:" : "Kanał aktualizacji:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Możesz zawsze zaktualizować swoją wersję do nowego / ekperymentalnego kanału. Jednakże nie możesz powrócić do poprzedniej stabilniejszej wersji. " + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Możesz zawsze zaktualizować swoją wersję do nowego / ekperymentalnego kanału. Jednakże nie możesz powrócić do poprzedniej stabilniejszej wersji. ", + "Notify members of the following groups about available updates:" : "Powiadom członków następujących grup o dostępnych aktualizacjach: ", + "Only notification for app updates are available, because the selected update channel for ownCloud itself does not allow notifications." : "Tylko powiadomienia o aktualizacjach aplikacji są dostępne, gdyż wybrany kanał aktualizacji ownCloud nie zezwala na powiadomienia. " }, "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/updatenotification/l10n/pl.json b/apps/updatenotification/l10n/pl.json index b5d7132d9f0..6f03b0105bf 100644 --- a/apps/updatenotification/l10n/pl.json +++ b/apps/updatenotification/l10n/pl.json @@ -10,6 +10,8 @@ "Your version is up to date." : "Posiadasz aktualną wersję.", "Checked on %s" : "Sprawdzone na %s", "Update channel:" : "Kanał aktualizacji:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Możesz zawsze zaktualizować swoją wersję do nowego / ekperymentalnego kanału. Jednakże nie możesz powrócić do poprzedniej stabilniejszej wersji. " + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Możesz zawsze zaktualizować swoją wersję do nowego / ekperymentalnego kanału. Jednakże nie możesz powrócić do poprzedniej stabilniejszej wersji. ", + "Notify members of the following groups about available updates:" : "Powiadom członków następujących grup o dostępnych aktualizacjach: ", + "Only notification for app updates are available, because the selected update channel for ownCloud itself does not allow notifications." : "Tylko powiadomienia o aktualizacjach aplikacji są dostępne, gdyż wybrany kanał aktualizacji ownCloud nie zezwala na powiadomienia. " },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/sl.js b/apps/updatenotification/l10n/sl.js index 12ba787e5e4..a59a58731fb 100644 --- a/apps/updatenotification/l10n/sl.js +++ b/apps/updatenotification/l10n/sl.js @@ -4,6 +4,7 @@ OC.L10N.register( "Update notifications" : "Posodobi obvestila", "{version} is available. Get more information on how to update." : "Na voljo je nova različica {version}. Na voljo je več podrobnosti o nadgradnji.", "Updated channel" : "Posodobljen kanal", + "ownCloud core" : "Jedro ownCloud", "Update for %1$s to version %2$s is available." : "Posodobitev %1$s na različico %2$s je na voljo.", "Updater" : "Posodabljalnik", "A new version is available: %s" : "Na voljo je nova različica: %s", diff --git a/apps/updatenotification/l10n/sl.json b/apps/updatenotification/l10n/sl.json index ecc0e3519d4..c96c9666fb1 100644 --- a/apps/updatenotification/l10n/sl.json +++ b/apps/updatenotification/l10n/sl.json @@ -2,6 +2,7 @@ "Update notifications" : "Posodobi obvestila", "{version} is available. Get more information on how to update." : "Na voljo je nova različica {version}. Na voljo je več podrobnosti o nadgradnji.", "Updated channel" : "Posodobljen kanal", + "ownCloud core" : "Jedro ownCloud", "Update for %1$s to version %2$s is available." : "Posodobitev %1$s na različico %2$s je na voljo.", "Updater" : "Posodabljalnik", "A new version is available: %s" : "Na voljo je nova različica: %s", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 0a83da4f4c9..3b284163b4f 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -13,6 +13,7 @@ OC.L10N.register( "No valid crop data provided" : "Brak danych do przycięcia", "Crop is not square" : "Przycięcie nie jest prostokątem", "Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny", + "Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł", "Couldn't send reset email. Please make sure your username is correct." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.", "%s password reset" : "%s reset hasła", "Couldn't send reset email. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Skontaktuj się z administratorem.", @@ -25,8 +26,11 @@ OC.L10N.register( "Error unfavoriting" : "Błąd przy usuwaniu z ulubionych", "Couldn't send mail to following users: %s " : "Nie można było wysłać wiadomości do następujących użytkowników: %s", "Preparing update" : "Przygotowuję aktualizację", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Ostrzeżenie naprawiania:", "Repair error: " : "Błąd naprawiania:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Użyj aktualizatora z linii poleceń, ponieważ automatyczna aktualizacja jest zablokowana w config.php.", + "[%d / %d]: Checking table %s" : "[%d / %d]: Sprawdzanie tabeli %s", "Turned on maintenance mode" : "Włączony tryb konserwacji", "Turned off maintenance mode" : "Wyłączony tryb konserwacji", "Maintenance mode is kept active" : "Tryb konserwacji pozostaje aktywny", @@ -91,6 +95,7 @@ OC.L10N.register( "Oct." : "Paź.", "Nov." : "Lis.", "Dec." : "Gru.", + "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Sprawdzenie spójności kodu nie wykazało problemów. Więcej informacji…</a>", "Settings" : "Ustawienia", "Problem loading page, reloading in 5 seconds" : "Błąd podczas ładowania strony, odświeżanie w ciągu 5 sekund.", "Saving..." : "Zapisywanie...", @@ -123,6 +128,8 @@ OC.L10N.register( "So-so password" : "Mało skomplikowane hasło", "Good password" : "Dobre hasło", "Strong password" : "Mocne hasło", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Serwer WWW nie jest jeszcze na tyle poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Serwer WWW nie jest poprawnie skonfigurowany, aby wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentacji</a>.", "Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera", "Shared" : "Udostępniono", "Shared with {recipients}" : "Współdzielony z {recipients}", @@ -158,6 +165,8 @@ OC.L10N.register( "change" : "zmiany", "delete" : "usuń", "access control" : "kontrola dostępu", + "Could not unshare" : "Nie udało się usunąć udostępnienia", + "No users or groups found for {search}" : "Nie znaleziono użytkowników lub grup dla {search}", "No users found for {search}" : "Nie znaleziono użytkowników dla {search}", "An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.", "Share" : "Udostępnij", @@ -165,9 +174,12 @@ OC.L10N.register( "Share with users…" : "Współdziel z użytkownikami...", "Share with users, groups or remote users…" : "Współdziel z użytkownikami, grupami lub zdalnym użytkownikiem...", "Share with users or groups…" : "Współdziel z użytkownikami lub grupami...", + "Share with users or remote users…" : "Współdziel z użytkownikami lub zdalnymi użytkownikami...", "Error removing share" : "Błąd podczas usuwania współdzielenia", "Warning" : "Ostrzeżenie", "Error while sending notification" : "Błąd podczas wysyłania powiadomienia", + "Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje", + "restricted" : "ograniczone", "invisible" : "niewidoczny", "Delete" : "Usuń", "Rename" : "Zmień nazwę", @@ -259,6 +271,11 @@ OC.L10N.register( "This means only administrators can use the instance." : "To oznacza, że tylko administratorzy mogą w tej chwili używać aplikacji.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Skontaktuj się z administratorem, jeśli ten komunikat pojawił się nieoczekiwanie lub wyświetla się ciągle.", "Thank you for your patience." : "Dziękuję za cierpliwość.", + "Two-step verification" : "Weryfikacja dwuskładnikowa", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Dla Twojego konta uruchomiono wzmocnioną ochronę. Uwierzytelnij przy pomocy drugiego składnika.", + "Cancel login" : "Anuluj logowanie", + "Please authenticate using the selected factor." : "Uwierzytelnij przy pomocy wybranego składnika", + "An error occured while verifying the token" : "Wystąpił błąd podczas weryfikacji tokena", "You are accessing the server from an untrusted domain." : "Dostajesz się do serwera z niezaufanej domeny.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "W zależności od konfiguracji, jako administrator możesz także użyć poniższego przycisku aby zaufać tej domenie.", "Add \"%s\" as trusted domain" : "Dodaj \"%s\" jako domenę zaufaną", @@ -272,6 +289,7 @@ OC.L10N.register( "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby uniknąć timeout-ów przy większych instalacjach, możesz zamiast tego uruchomić następującą komendę w katalogu Twojej instalacji:", "Detailed logs" : "Szczegółowe logi", "Update needed" : "Wymagana aktualizacja", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Aby uzyskać pomoc, zajrzyj do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentacji</a>.", "This page will refresh itself when the %s instance is available again." : "Strona odświeży się gdy instancja %s będzie ponownie dostępna." }, "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/core/l10n/pl.json b/core/l10n/pl.json index d839ef91846..6833611713d 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -11,6 +11,7 @@ "No valid crop data provided" : "Brak danych do przycięcia", "Crop is not square" : "Przycięcie nie jest prostokątem", "Couldn't reset password because the token is invalid" : "Nie można zresetować hasła, ponieważ token jest niepoprawny", + "Couldn't reset password because the token is expired" : "Nie można zresetować hasła, ponieważ token wygasł", "Couldn't send reset email. Please make sure your username is correct." : "Nie mogę wysłać maila resetującego. Sprawdź czy nazwa użytkownika jest poprawna.", "%s password reset" : "%s reset hasła", "Couldn't send reset email. Please contact your administrator." : "Nie mogę wysłać maila resetującego. Skontaktuj się z administratorem.", @@ -23,8 +24,11 @@ "Error unfavoriting" : "Błąd przy usuwaniu z ulubionych", "Couldn't send mail to following users: %s " : "Nie można było wysłać wiadomości do następujących użytkowników: %s", "Preparing update" : "Przygotowuję aktualizację", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Ostrzeżenie naprawiania:", "Repair error: " : "Błąd naprawiania:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Użyj aktualizatora z linii poleceń, ponieważ automatyczna aktualizacja jest zablokowana w config.php.", + "[%d / %d]: Checking table %s" : "[%d / %d]: Sprawdzanie tabeli %s", "Turned on maintenance mode" : "Włączony tryb konserwacji", "Turned off maintenance mode" : "Wyłączony tryb konserwacji", "Maintenance mode is kept active" : "Tryb konserwacji pozostaje aktywny", @@ -89,6 +93,7 @@ "Oct." : "Paź.", "Nov." : "Lis.", "Dec." : "Gru.", + "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Sprawdzenie spójności kodu nie wykazało problemów. Więcej informacji…</a>", "Settings" : "Ustawienia", "Problem loading page, reloading in 5 seconds" : "Błąd podczas ładowania strony, odświeżanie w ciągu 5 sekund.", "Saving..." : "Zapisywanie...", @@ -121,6 +126,8 @@ "So-so password" : "Mało skomplikowane hasło", "Good password" : "Dobre hasło", "Strong password" : "Mocne hasło", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Serwer WWW nie jest jeszcze na tyle poprawnie skonfigurowany, aby umożliwić synchronizację plików, ponieważ interfejs WebDAV wydaje się być uszkodzony.", + "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Serwer WWW nie jest poprawnie skonfigurowany, aby wyświetlić \"{url}\". Więcej informacji można znaleźć w naszej <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentacji</a>.", "Error occurred while checking server setup" : "Pojawił się błąd podczas sprawdzania ustawień serwera", "Shared" : "Udostępniono", "Shared with {recipients}" : "Współdzielony z {recipients}", @@ -156,6 +163,8 @@ "change" : "zmiany", "delete" : "usuń", "access control" : "kontrola dostępu", + "Could not unshare" : "Nie udało się usunąć udostępnienia", + "No users or groups found for {search}" : "Nie znaleziono użytkowników lub grup dla {search}", "No users found for {search}" : "Nie znaleziono użytkowników dla {search}", "An error occurred. Please try again" : "Wystąpił błąd. Proszę spróbować ponownie.", "Share" : "Udostępnij", @@ -163,9 +172,12 @@ "Share with users…" : "Współdziel z użytkownikami...", "Share with users, groups or remote users…" : "Współdziel z użytkownikami, grupami lub zdalnym użytkownikiem...", "Share with users or groups…" : "Współdziel z użytkownikami lub grupami...", + "Share with users or remote users…" : "Współdziel z użytkownikami lub zdalnymi użytkownikami...", "Error removing share" : "Błąd podczas usuwania współdzielenia", "Warning" : "Ostrzeżenie", "Error while sending notification" : "Błąd podczas wysyłania powiadomienia", + "Non-existing tag #{tag}" : "Znacznik #{tag} nie istnieje", + "restricted" : "ograniczone", "invisible" : "niewidoczny", "Delete" : "Usuń", "Rename" : "Zmień nazwę", @@ -257,6 +269,11 @@ "This means only administrators can use the instance." : "To oznacza, że tylko administratorzy mogą w tej chwili używać aplikacji.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Skontaktuj się z administratorem, jeśli ten komunikat pojawił się nieoczekiwanie lub wyświetla się ciągle.", "Thank you for your patience." : "Dziękuję za cierpliwość.", + "Two-step verification" : "Weryfikacja dwuskładnikowa", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Dla Twojego konta uruchomiono wzmocnioną ochronę. Uwierzytelnij przy pomocy drugiego składnika.", + "Cancel login" : "Anuluj logowanie", + "Please authenticate using the selected factor." : "Uwierzytelnij przy pomocy wybranego składnika", + "An error occured while verifying the token" : "Wystąpił błąd podczas weryfikacji tokena", "You are accessing the server from an untrusted domain." : "Dostajesz się do serwera z niezaufanej domeny.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "W zależności od konfiguracji, jako administrator możesz także użyć poniższego przycisku aby zaufać tej domenie.", "Add \"%s\" as trusted domain" : "Dodaj \"%s\" jako domenę zaufaną", @@ -270,6 +287,7 @@ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby uniknąć timeout-ów przy większych instalacjach, możesz zamiast tego uruchomić następującą komendę w katalogu Twojej instalacji:", "Detailed logs" : "Szczegółowe logi", "Update needed" : "Wymagana aktualizacja", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Aby uzyskać pomoc, zajrzyj do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentacji</a>.", "This page will refresh itself when the %s instance is available again." : "Strona odświeży się gdy instancja %s będzie ponownie dostępna." },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/lib/l10n/sl.js b/lib/l10n/sl.js index e8e861af3c4..5e0e1fbcdbd 100644 --- a/lib/l10n/sl.js +++ b/lib/l10n/sl.js @@ -157,7 +157,7 @@ OC.L10N.register( "Please check that the data directory contains a file \".ocdata\" in its root." : "Preverite, ali je v korenu podatkovne mape datoteka \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Ni mogoče pridobiti zaklepa %d na \"%s\".", "Storage unauthorized. %s" : "Dostop do shrambe ni overjen. %s", - "Storage incomplete configuration. %s" : "Nepopolna konfiguracija shrambe. %s", + "Storage incomplete configuration. %s" : "Nepopolna nastavitev shrambe. %s", "Storage connection error. %s" : "Napaka povezave do shrambe. %s", "Storage not available" : "Shramba ni na voljo", "Storage connection timeout. %s" : "Povezava do shrambe je časovno potekla. %s" diff --git a/lib/l10n/sl.json b/lib/l10n/sl.json index a05d62b1c39..48c9f69a86d 100644 --- a/lib/l10n/sl.json +++ b/lib/l10n/sl.json @@ -155,7 +155,7 @@ "Please check that the data directory contains a file \".ocdata\" in its root." : "Preverite, ali je v korenu podatkovne mape datoteka \".ocdata\".", "Could not obtain lock type %d on \"%s\"." : "Ni mogoče pridobiti zaklepa %d na \"%s\".", "Storage unauthorized. %s" : "Dostop do shrambe ni overjen. %s", - "Storage incomplete configuration. %s" : "Nepopolna konfiguracija shrambe. %s", + "Storage incomplete configuration. %s" : "Nepopolna nastavitev shrambe. %s", "Storage connection error. %s" : "Napaka povezave do shrambe. %s", "Storage not available" : "Shramba ni na voljo", "Storage connection timeout. %s" : "Povezava do shrambe je časovno potekla. %s" diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php index e082cea3305..c8b2009fcc7 100644 --- a/lib/private/AllConfig.php +++ b/lib/private/AllConfig.php @@ -27,6 +27,7 @@ */ namespace OC; +use OC\Cache\CappedMemoryCache; use OCP\IDBConnection; use OCP\PreConditionNotMetException; @@ -58,14 +59,15 @@ class AllConfig implements \OCP\IConfig { * - deleteAllUserValues * - deleteAppFromAllUsers * - * @var array $userCache + * @var CappedMemoryCache $userCache */ - private $userCache = array(); + private $userCache; /** * @param SystemConfig $systemConfig */ function __construct(SystemConfig $systemConfig) { + $this->userCache = new CappedMemoryCache(); $this->systemConfig = $systemConfig; } diff --git a/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php b/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php index 69bfeb5e9bb..32a507623e3 100644 --- a/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/CORSMiddleware.php @@ -26,6 +26,7 @@ namespace OC\AppFramework\Middleware\Security; use OC\AppFramework\Middleware\Security\Exceptions\SecurityException; use OC\AppFramework\Utility\ControllerMethodReflector; +use OC\Authentication\Exceptions\PasswordLoginForbiddenException; use OC\User\Session; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; @@ -89,8 +90,12 @@ class CORSMiddleware extends Middleware { $pass = $this->request->server['PHP_AUTH_PW']; $this->session->logout(); - if(!$this->session->logClientIn($user, $pass, $this->request)) { - throw new SecurityException('CORS requires basic auth', Http::STATUS_UNAUTHORIZED); + try { + if (!$this->session->logClientIn($user, $pass, $this->request)) { + throw new SecurityException('CORS requires basic auth', Http::STATUS_UNAUTHORIZED); + } + } catch (PasswordLoginForbiddenException $ex) { + throw new SecurityException('Password login forbidden, use token instead', Http::STATUS_UNAUTHORIZED); } } } diff --git a/lib/private/Authentication/Exceptions/PasswordLoginForbiddenException.php b/lib/private/Authentication/Exceptions/PasswordLoginForbiddenException.php new file mode 100644 index 00000000000..2e9f9534dbd --- /dev/null +++ b/lib/private/Authentication/Exceptions/PasswordLoginForbiddenException.php @@ -0,0 +1,29 @@ +<?php + +/** + * @author Christoph Wurst <christoph@owncloud.com> + * + * @copyright Copyright (c) 2016, 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 OC\Authentication\Exceptions; + +use Exception; + +class PasswordLoginForbiddenException extends Exception { + +} diff --git a/lib/private/Authentication/Token/DefaultTokenMapper.php b/lib/private/Authentication/Token/DefaultTokenMapper.php index c56a513b94c..9450ed6b9f3 100644 --- a/lib/private/Authentication/Token/DefaultTokenMapper.php +++ b/lib/private/Authentication/Token/DefaultTokenMapper.php @@ -77,6 +77,7 @@ class DefaultTokenMapper extends Mapper { ->execute(); $data = $result->fetch(); + $result->closeCursor(); if ($data === false) { throw new DoesNotExistException('token does not exist'); } diff --git a/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php b/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php index 1f31e849446..5c72bfaa57c 100644 --- a/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php +++ b/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php @@ -39,6 +39,7 @@ class ExcludeFileByNameFilterIterator extends \RecursiveFilterIterator { '.DS_Store', // Mac OS X 'Thumbs.db', // Microsoft Windows '.directory', // Dolphin (KDE) + '.webapp', // Gentoo/Funtoo & derivatives use a tool known as webapp-config to manager wep-apps. ]; /** diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 96731fa9dfd..2b33dc413b4 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -137,7 +137,7 @@ class Repair implements IOutput{ new SharePropagation(\OC::$server->getConfig()), new RemoveOldShares(\OC::$server->getDatabaseConnection()), new AvatarPermissions(\OC::$server->getDatabaseConnection()), - new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getRootFolder()), + new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getLazyRootFolder()), ]; } diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index 0cebb3e0613..4e9c827448d 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -33,6 +33,7 @@ namespace OC\User; use OC; use OC\Authentication\Exceptions\InvalidTokenException; use OC\Authentication\Exceptions\PasswordlessTokenException; +use OC\Authentication\Exceptions\PasswordLoginForbiddenException; use OC\Authentication\Token\IProvider; use OC\Authentication\Token\IToken; use OC\Hooks\Emitter; @@ -350,17 +351,16 @@ class Session implements IUserSession, Emitter { * @param string $password * @param IRequest $request * @throws LoginException + * @throws PasswordLoginForbiddenException * @return boolean */ public function logClientIn($user, $password, IRequest $request) { $isTokenPassword = $this->isTokenPassword($password); if (!$isTokenPassword && $this->isTokenAuthEnforced()) { - // TODO: throw LoginException instead (https://github.com/owncloud/core/pull/24616) - return false; + throw new PasswordLoginForbiddenException(); } if (!$isTokenPassword && $this->isTwoFactorEnforced($user)) { - // TODO: throw LoginException instead (https://github.com/owncloud/core/pull/24616) - return false; + throw new PasswordLoginForbiddenException(); } if (!$this->login($user, $password) ) { $users = $this->manager->getByEmail($user); @@ -442,19 +442,22 @@ class Session implements IUserSession, Emitter { */ public function tryBasicAuthLogin(IRequest $request) { if (!empty($request->server['PHP_AUTH_USER']) && !empty($request->server['PHP_AUTH_PW'])) { - $result = $this->logClientIn($request->server['PHP_AUTH_USER'], $request->server['PHP_AUTH_PW'], $request); - if ($result === true) { - /** - * Add DAV authenticated. This should in an ideal world not be - * necessary but the iOS App reads cookies from anywhere instead - * only the DAV endpoint. - * This makes sure that the cookies will be valid for the whole scope - * @see https://github.com/owncloud/core/issues/22893 - */ - $this->session->set( - Auth::DAV_AUTHENTICATED, $this->getUser()->getUID() - ); - return true; + try { + if ($this->logClientIn($request->server['PHP_AUTH_USER'], $request->server['PHP_AUTH_PW'], $request)) { + /** + * Add DAV authenticated. This should in an ideal world not be + * necessary but the iOS App reads cookies from anywhere instead + * only the DAV endpoint. + * This makes sure that the cookies will be valid for the whole scope + * @see https://github.com/owncloud/core/issues/22893 + */ + $this->session->set( + Auth::DAV_AUTHENTICATED, $this->getUser()->getUID() + ); + return true; + } + } catch (PasswordLoginForbiddenException $ex) { + // Nothing to do } } return false; diff --git a/settings/l10n/pl.js b/settings/l10n/pl.js index 79adbb02948..7278c7aa73b 100644 --- a/settings/l10n/pl.js +++ b/settings/l10n/pl.js @@ -30,8 +30,10 @@ OC.L10N.register( "Unable to change full name" : "Nie można zmienić pełnej nazwy", "Security & setup warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji", "Sharing" : "Udostępnianie", + "Server-side encryption" : "Szyfrowanie po stronie serwera", "External Storage" : "Zewnętrzna zasoby dyskowe", "Cron" : "Cron", + "Email server" : "Serwer pocztowy", "Log" : "Logi", "Updates" : "Aktualizacje", "Couldn't remove app." : "Nie można usunąć aplikacji.", @@ -43,6 +45,8 @@ OC.L10N.register( "Couldn't update app." : "Nie można uaktualnić aplikacji.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Add trusted domain" : "Dodaj zaufaną domenę", + "Migration in progress. Please wait until the migration is finished" : "Trwa migracja. Proszę poczekać, aż migracja dobiegnie końca.", + "Migration started …" : "Migracja rozpoczęta...", "Sending..." : "Wysyłam...", "All" : "Wszystkie", "No apps found for your version" : "Nie znaleziono aplikacji dla twojej wersji", @@ -58,8 +62,12 @@ OC.L10N.register( "Uninstalling ...." : "Odinstalowywanie....", "Error while uninstalling app" : "Błąd przy odinstalowywaniu aplikacji", "Uninstall" : "Odinstaluj", + "Error while loading browser sessions and device tokens" : "Błąd podczas ładowania sesji przeglądarek i tokenów urządzeń", + "Error while creating device token" : "Błąd podczas tworzenia tokena urządzenia.", + "Error while deleting the token" : "Błąd podczas usuwania tokena.", "Valid until {date}" : "Ważny do {date}", "Delete" : "Usuń", + "An error occurred: {message}" : "Wystąpił błąd: {message}", "Select a profile picture" : "Wybierz zdjęcie profilu", "Very weak password" : "Bardzo słabe hasło", "Weak password" : "Słabe hasło", @@ -68,6 +76,7 @@ OC.L10N.register( "Strong password" : "Mocne hasło", "Groups" : "Grupy", "Unable to delete {objName}" : "Nie można usunąć {objName}", + "Error creating group: {message}" : "Błąd podczas tworzenia grupy: {message}", "A valid group name must be provided" : "Należy podać prawidłową nazwę grupy", "deleted {groupName}" : "usunięto {groupName}", "undo" : "cofnij", @@ -77,10 +86,15 @@ OC.L10N.register( "add group" : "dodaj grupę", "Changing the password will result in data loss, because data recovery is not available for this user" : "Zmiana hasła spowoduje utratę danych, ponieważ odzyskiwanie danych nie jest włączone dla tego użytkownika", "A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika", + "Error creating user: {message}" : "Błąd podczas tworzenia użytkownika: {message}", "A valid password must be provided" : "Należy podać prawidłowe hasło", "A valid email must be provided" : "Podaj poprawny adres email", "__language_name__" : "polski", "Unlimited" : "Bez limitu", + "Personal info" : "Informacje osobiste", + "Sessions" : "Sesje", + "Devices" : "Urządzenia", + "Sync clients" : "Klienty synchronizacji", "Everything (fatal issues, errors, warnings, info, debug)" : "Wszystko (Informacje, ostrzeżenia, błędy i poważne problemy, debug)", "Info, warnings, errors and fatal issues" : "Informacje, ostrzeżenia, błędy i poważne problemy", "Warnings, errors and fatal issues" : "Ostrzeżenia, błędy i poważne problemy", @@ -117,7 +131,11 @@ OC.L10N.register( "Execute one task with each page loaded" : "Wykonuj jedno zadanie wraz z każdą wczytaną stroną", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php jest zarejestrowany w serwisie webcron do uruchamiania cron.php raz na 15 minut przez http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Użyj systemowej usługi cron do wywoływania cron.php co 15 minut.", + "Enable server-side encryption" : "Włącz szyfrowanie po stronie serwera", + "Be aware that encryption always increases the file size." : "Należy pamiętać, że szyfrowanie zawsze zwiększa rozmiar pliku.", + "This is the final warning: Do you really want to enable encryption?" : "To ostatnie ostrzeżenie: Czy na pewno chcesz włączyć szyfrowanie?", "Enable encryption" : "Włącz szyfrowanie", + "Select default encryption module:" : "Wybierz domyślny moduł szyfrujący:", "This is used for sending out notifications." : "To jest używane do wysyłania powiadomień", "Send mode" : "Tryb wysyłki", "Encryption" : "Szyfrowanie", diff --git a/settings/l10n/pl.json b/settings/l10n/pl.json index a4608e9cd26..cc7022746ca 100644 --- a/settings/l10n/pl.json +++ b/settings/l10n/pl.json @@ -28,8 +28,10 @@ "Unable to change full name" : "Nie można zmienić pełnej nazwy", "Security & setup warnings" : "Ostrzeżenia bezpieczeństwa i konfiguracji", "Sharing" : "Udostępnianie", + "Server-side encryption" : "Szyfrowanie po stronie serwera", "External Storage" : "Zewnętrzna zasoby dyskowe", "Cron" : "Cron", + "Email server" : "Serwer pocztowy", "Log" : "Logi", "Updates" : "Aktualizacje", "Couldn't remove app." : "Nie można usunąć aplikacji.", @@ -41,6 +43,8 @@ "Couldn't update app." : "Nie można uaktualnić aplikacji.", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Czy jesteś pewien/pewna że chcesz dodać \"{domain}\" jako zaufaną domenę?", "Add trusted domain" : "Dodaj zaufaną domenę", + "Migration in progress. Please wait until the migration is finished" : "Trwa migracja. Proszę poczekać, aż migracja dobiegnie końca.", + "Migration started …" : "Migracja rozpoczęta...", "Sending..." : "Wysyłam...", "All" : "Wszystkie", "No apps found for your version" : "Nie znaleziono aplikacji dla twojej wersji", @@ -56,8 +60,12 @@ "Uninstalling ...." : "Odinstalowywanie....", "Error while uninstalling app" : "Błąd przy odinstalowywaniu aplikacji", "Uninstall" : "Odinstaluj", + "Error while loading browser sessions and device tokens" : "Błąd podczas ładowania sesji przeglądarek i tokenów urządzeń", + "Error while creating device token" : "Błąd podczas tworzenia tokena urządzenia.", + "Error while deleting the token" : "Błąd podczas usuwania tokena.", "Valid until {date}" : "Ważny do {date}", "Delete" : "Usuń", + "An error occurred: {message}" : "Wystąpił błąd: {message}", "Select a profile picture" : "Wybierz zdjęcie profilu", "Very weak password" : "Bardzo słabe hasło", "Weak password" : "Słabe hasło", @@ -66,6 +74,7 @@ "Strong password" : "Mocne hasło", "Groups" : "Grupy", "Unable to delete {objName}" : "Nie można usunąć {objName}", + "Error creating group: {message}" : "Błąd podczas tworzenia grupy: {message}", "A valid group name must be provided" : "Należy podać prawidłową nazwę grupy", "deleted {groupName}" : "usunięto {groupName}", "undo" : "cofnij", @@ -75,10 +84,15 @@ "add group" : "dodaj grupę", "Changing the password will result in data loss, because data recovery is not available for this user" : "Zmiana hasła spowoduje utratę danych, ponieważ odzyskiwanie danych nie jest włączone dla tego użytkownika", "A valid username must be provided" : "Należy podać prawidłową nazwę użytkownika", + "Error creating user: {message}" : "Błąd podczas tworzenia użytkownika: {message}", "A valid password must be provided" : "Należy podać prawidłowe hasło", "A valid email must be provided" : "Podaj poprawny adres email", "__language_name__" : "polski", "Unlimited" : "Bez limitu", + "Personal info" : "Informacje osobiste", + "Sessions" : "Sesje", + "Devices" : "Urządzenia", + "Sync clients" : "Klienty synchronizacji", "Everything (fatal issues, errors, warnings, info, debug)" : "Wszystko (Informacje, ostrzeżenia, błędy i poważne problemy, debug)", "Info, warnings, errors and fatal issues" : "Informacje, ostrzeżenia, błędy i poważne problemy", "Warnings, errors and fatal issues" : "Ostrzeżenia, błędy i poważne problemy", @@ -115,7 +129,11 @@ "Execute one task with each page loaded" : "Wykonuj jedno zadanie wraz z każdą wczytaną stroną", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php jest zarejestrowany w serwisie webcron do uruchamiania cron.php raz na 15 minut przez http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Użyj systemowej usługi cron do wywoływania cron.php co 15 minut.", + "Enable server-side encryption" : "Włącz szyfrowanie po stronie serwera", + "Be aware that encryption always increases the file size." : "Należy pamiętać, że szyfrowanie zawsze zwiększa rozmiar pliku.", + "This is the final warning: Do you really want to enable encryption?" : "To ostatnie ostrzeżenie: Czy na pewno chcesz włączyć szyfrowanie?", "Enable encryption" : "Włącz szyfrowanie", + "Select default encryption module:" : "Wybierz domyślny moduł szyfrujący:", "This is used for sending out notifications." : "To jest używane do wysyłania powiadomień", "Send mode" : "Tryb wysyłki", "Encryption" : "Szyfrowanie", diff --git a/tests/lib/AppFramework/Middleware/Security/CORSMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/CORSMiddlewareTest.php index a398dc2320c..54d2831d25f 100644 --- a/tests/lib/AppFramework/Middleware/Security/CORSMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/Security/CORSMiddlewareTest.php @@ -164,6 +164,31 @@ class CORSMiddlewareTest extends \Test\TestCase { * @CORS * @expectedException \OC\AppFramework\Middleware\Security\Exceptions\SecurityException */ + public function testCORSShouldFailIfPasswordLoginIsForbidden() { + $request = new Request( + ['server' => [ + 'PHP_AUTH_USER' => 'user', + 'PHP_AUTH_PW' => 'pass' + ]], + $this->getMock('\OCP\Security\ISecureRandom'), + $this->getMock('\OCP\IConfig') + ); + $this->session->expects($this->once()) + ->method('logout'); + $this->session->expects($this->once()) + ->method('logClientIn') + ->with($this->equalTo('user'), $this->equalTo('pass')) + ->will($this->throwException(new \OC\Authentication\Exceptions\PasswordLoginForbiddenException)); + $this->reflector->reflect($this, __FUNCTION__); + $middleware = new CORSMiddleware($request, $this->reflector, $this->session); + + $middleware->beforeController($this, __FUNCTION__, new Response()); + } + + /** + * @CORS + * @expectedException \OC\AppFramework\Middleware\Security\Exceptions\SecurityException + */ public function testCORSShouldNotAllowCookieAuth() { $request = new Request( ['server' => [ diff --git a/tests/lib/User/SessionTest.php b/tests/lib/User/SessionTest.php index 28f6b6a5377..7a34d42a2bc 100644 --- a/tests/lib/User/SessionTest.php +++ b/tests/lib/User/SessionTest.php @@ -306,6 +306,9 @@ class SessionTest extends \Test\TestCase { $userSession->login('foo', 'bar'); } + /** + * @expectedException \OC\Authentication\Exceptions\PasswordLoginForbiddenException + */ public function testLogClientInNoTokenPasswordWith2fa() { $manager = $this->getMockBuilder('\OC\User\Manager') ->disableOriginalConstructor() @@ -329,7 +332,7 @@ class SessionTest extends \Test\TestCase { ->with('token_auth_enforced', false) ->will($this->returnValue(true)); - $this->assertFalse($userSession->logClientIn('john', 'doe', $request)); + $userSession->logClientIn('john', 'doe', $request); } public function testLogClientInWithTokenPassword() { @@ -371,6 +374,9 @@ class SessionTest extends \Test\TestCase { $this->assertTrue($userSession->logClientIn('john', 'doe', $request)); } + /** + * @expectedException \OC\Authentication\Exceptions\PasswordLoginForbiddenException + */ public function testLogClientInNoTokenPasswordNo2fa() { $manager = $this->getMockBuilder('\OC\User\Manager') ->disableOriginalConstructor() @@ -399,7 +405,7 @@ class SessionTest extends \Test\TestCase { ->with('john') ->will($this->returnValue(true)); - $this->assertFalse($userSession->logClientIn('john', 'doe', $request)); + $userSession->logClientIn('john', 'doe', $request); } public function testRememberLoginValidToken() { |