aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/comments/l10n/pl.js3
-rw-r--r--apps/comments/l10n/pl.json3
-rw-r--r--apps/dav/lib/Connector/Sabre/Auth.php21
-rw-r--r--apps/dav/lib/Connector/Sabre/Exception/PasswordLoginForbidden.php54
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/AuthTest.php19
-rw-r--r--apps/federatedfilesharing/l10n/pl.js1
-rw-r--r--apps/federatedfilesharing/l10n/pl.json1
-rw-r--r--apps/files/l10n/pl.js20
-rw-r--r--apps/files/l10n/pl.json20
-rw-r--r--apps/files_external/js/settings.js4
-rw-r--r--apps/files_external/lib/Lib/Storage/Google.php4
-rw-r--r--apps/files_external/templates/settings.php6
-rw-r--r--apps/files_sharing/appinfo/app.php6
-rw-r--r--apps/files_sharing/lib/Helper.php12
-rw-r--r--apps/files_sharing/lib/SharedMount.php2
-rw-r--r--apps/systemtags/l10n/ca.js21
-rw-r--r--apps/systemtags/l10n/ca.json21
-rw-r--r--apps/updatenotification/l10n/ca.js14
-rw-r--r--apps/updatenotification/l10n/ca.json14
-rw-r--r--apps/updatenotification/l10n/pl.js4
-rw-r--r--apps/updatenotification/l10n/pl.json4
-rw-r--r--apps/updatenotification/l10n/sl.js1
-rw-r--r--apps/updatenotification/l10n/sl.json1
-rw-r--r--core/l10n/pl.js18
-rw-r--r--core/l10n/pl.json18
-rw-r--r--lib/l10n/sl.js2
-rw-r--r--lib/l10n/sl.json2
-rw-r--r--lib/private/AllConfig.php6
-rw-r--r--lib/private/AppFramework/Middleware/Security/CORSMiddleware.php9
-rw-r--r--lib/private/Authentication/Exceptions/PasswordLoginForbiddenException.php29
-rw-r--r--lib/private/Authentication/Token/DefaultTokenMapper.php1
-rw-r--r--lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php1
-rw-r--r--lib/private/Repair.php2
-rw-r--r--lib/private/User/Session.php37
-rw-r--r--settings/l10n/pl.js18
-rw-r--r--settings/l10n/pl.json18
-rw-r--r--tests/lib/AppFramework/Middleware/Security/CORSMiddlewareTest.php25
-rw-r--r--tests/lib/User/SessionTest.php10
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() {