diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js
index 2286477750..747a7245a5 100644
--- a/apps/files/js/tagsplugin.js
+++ b/apps/files/js/tagsplugin.js
@@ -103,17 +103,17 @@
return t('files', 'Add to favorites');
},
mime: 'all',
- order: -23,
+ order: -100,
permissions: OC.PERMISSION_READ,
iconClass: function(fileName, context) {
var $file = context.$file;
var isFavorite = $file.data('favorite') === true;
if (isFavorite) {
- return 'icon-starred';
+ return 'icon-star-dark';
}
- return 'icon-star';
+ return 'icon-starred';
},
actionHandler: function(fileName, context) {
var $favoriteMarkEl = context.$file.find('.favorite-mark');
diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js
index fc6276a6e4..0c770e4a1d 100644
--- a/apps/files/l10n/hu.js
+++ b/apps/files/l10n/hu.js
@@ -16,6 +16,7 @@ OC.L10N.register(
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nincs elég szabad hely. A feltöltés mérete {size1}, de csak ennyi hely van: {size2}.",
"Target folder \"{dir}\" does not exist any more" : "A cél mappa már nem létezik: \"{dir}\"",
"Not enough free space" : "Nincs elég szabad hely",
+ "Uploading …" : "Feltöltés...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Actions" : "Műveletek",
diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json
index 1e235bf5c4..9e7d724c06 100644
--- a/apps/files/l10n/hu.json
+++ b/apps/files/l10n/hu.json
@@ -14,6 +14,7 @@
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Nincs elég szabad hely. A feltöltés mérete {size1}, de csak ennyi hely van: {size2}.",
"Target folder \"{dir}\" does not exist any more" : "A cél mappa már nem létezik: \"{dir}\"",
"Not enough free space" : "Nincs elég szabad hely",
+ "Uploading …" : "Feltöltés...",
"…" : "...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})",
"Actions" : "Műveletek",
diff --git a/apps/files_sharing/css/sharetabview.scss b/apps/files_sharing/css/sharetabview.scss
index cb2bb46335..880226e7d1 100644
--- a/apps/files_sharing/css/sharetabview.scss
+++ b/apps/files_sharing/css/sharetabview.scss
@@ -41,17 +41,6 @@
padding: 18px 0 18px 36px;
}
-/* fix clickable area because in the share tab popover the label is inside the actual menu item*/
-#shareWithList .popovermenu .shareOption {
- padding-right: 0 !important;
-}
-/* fix clickable area because in the share tab popover the label is inside the actual menu item*/
-.shareTabView .popovermenu label {
- width: 100%;
- display: inline-block;
- padding: 0 10px 0 0 !important;
-}
-
.shareTabView label {
white-space: nowrap;
}
@@ -100,11 +89,6 @@
opacity: .5;
}
-#shareWithList .shareOption.menuitem > label:before {
- /* Checkboxes positionning */
- margin: 0 12px !important;
-}
-
#shareWithList .unshare {
padding: 1px 6px;
vertical-align: text-bottom;
diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php
index ed9ad33417..700ac22080 100644
--- a/apps/files_sharing/lib/Controller/ShareController.php
+++ b/apps/files_sharing/lib/Controller/ShareController.php
@@ -458,6 +458,10 @@ class ShareController extends Controller {
if ($files_list === null) {
$files_list = [$files];
}
+ // Just in case $files is a single int like '1234'
+ if (!is_array($files_list)) {
+ $files_list = [$files_list];
+ }
}
$userFolder = $this->rootFolder->getUserFolder($share->getShareOwner());
diff --git a/core/css/apps.scss b/core/css/apps.scss
index 4f17c91764..159982e0bf 100644
--- a/core/css/apps.scss
+++ b/core/css/apps.scss
@@ -864,6 +864,12 @@ kbd {
width: 16px;
padding: 0 10px;
}
+ > input.checkbox + label {
+ padding: 0 !important;
+ &::before {
+ margin: -2px 12px 0;
+ }
+ }
}
[class^='icon-'],
[class*=' icon-']{
diff --git a/core/css/icons.scss b/core/css/icons.scss
index 6d855381fa..c8f61c1422 100644
--- a/core/css/icons.scss
+++ b/core/css/icons.scss
@@ -348,6 +348,10 @@ img, object, video, button, textarea, input, select {
background-image: url('../img/actions/star.svg?v=1');
}
+.icon-star-dark {
+ background-image: url('../img/actions/star-dark.svg?v=1');
+}
+
.icon-starred {
&:hover, &:focus {
background-image: url('../img/actions/star.svg?v=1');
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index cea600bf59..709ac7c50e 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -224,6 +224,7 @@ return array(
'OCP\\Lock\\ILockingProvider' => $baseDir . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => $baseDir . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => $baseDir . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Mail\\IAttachment' => $baseDir . '/lib/public/Mail/IAttachment.php',
'OCP\\Mail\\IEMailTemplate' => $baseDir . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => $baseDir . '/lib/public/Mail/IMailer.php',
'OCP\\Mail\\IMessage' => $baseDir . '/lib/public/Mail/IMessage.php',
@@ -706,6 +707,7 @@ return array(
'OC\\Log\\File' => $baseDir . '/lib/private/Log/File.php',
'OC\\Log\\Rotate' => $baseDir . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => $baseDir . '/lib/private/Log/Syslog.php',
+ 'OC\\Mail\\Attachment' => $baseDir . '/lib/private/Mail/Attachment.php',
'OC\\Mail\\EMailTemplate' => $baseDir . '/lib/private/Mail/EMailTemplate.php',
'OC\\Mail\\Mailer' => $baseDir . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => $baseDir . '/lib/private/Mail/Message.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index f476777e66..7ba734aac8 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -254,6 +254,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\Lock\\ILockingProvider' => __DIR__ . '/../../..' . '/lib/public/Lock/ILockingProvider.php',
'OCP\\Lock\\LockedException' => __DIR__ . '/../../..' . '/lib/public/Lock/LockedException.php',
'OCP\\Lockdown\\ILockdownManager' => __DIR__ . '/../../..' . '/lib/public/Lockdown/ILockdownManager.php',
+ 'OCP\\Mail\\IAttachment' => __DIR__ . '/../../..' . '/lib/public/Mail/IAttachment.php',
'OCP\\Mail\\IEMailTemplate' => __DIR__ . '/../../..' . '/lib/public/Mail/IEMailTemplate.php',
'OCP\\Mail\\IMailer' => __DIR__ . '/../../..' . '/lib/public/Mail/IMailer.php',
'OCP\\Mail\\IMessage' => __DIR__ . '/../../..' . '/lib/public/Mail/IMessage.php',
@@ -736,6 +737,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Log\\File' => __DIR__ . '/../../..' . '/lib/private/Log/File.php',
'OC\\Log\\Rotate' => __DIR__ . '/../../..' . '/lib/private/Log/Rotate.php',
'OC\\Log\\Syslog' => __DIR__ . '/../../..' . '/lib/private/Log/Syslog.php',
+ 'OC\\Mail\\Attachment' => __DIR__ . '/../../..' . '/lib/private/Mail/Attachment.php',
'OC\\Mail\\EMailTemplate' => __DIR__ . '/../../..' . '/lib/private/Mail/EMailTemplate.php',
'OC\\Mail\\Mailer' => __DIR__ . '/../../..' . '/lib/private/Mail/Mailer.php',
'OC\\Mail\\Message' => __DIR__ . '/../../..' . '/lib/private/Mail/Message.php',
diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php
index 0577093712..c9cb6f246d 100644
--- a/lib/private/Files/Storage/Local.php
+++ b/lib/private/Files/Storage/Local.php
@@ -408,10 +408,11 @@ class Local extends \OC\Files\Storage\Common {
* @param IStorage $sourceStorage
* @param string $sourceInternalPath
* @param string $targetInternalPath
+ * @param bool $preserveMtime
* @return bool
*/
public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) {
- if ($sourceStorage->instanceOfStorage('\OC\Files\Storage\Local')) {
+ if ($sourceStorage->instanceOfStorage(Local::class)) {
if ($sourceStorage->instanceOfStorage(Jail::class)) {
/**
* @var \OC\Files\Storage\Wrapper\Jail $sourceStorage
diff --git a/lib/private/Mail/Attachment.php b/lib/private/Mail/Attachment.php
new file mode 100644
index 0000000000..7b85ad1dbb
--- /dev/null
+++ b/lib/private/Mail/Attachment.php
@@ -0,0 +1,78 @@
+
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see .
+ *
+ */
+
+namespace OC\Mail;
+
+use OCP\Mail\IAttachment;
+
+/**
+ * Class Attachment
+ *
+ * @package OC\Mail
+ * @since 13.0.0
+ */
+class Attachment implements IAttachment {
+
+ /** @var \Swift_Mime_Attachment */
+ protected $swiftAttachment;
+
+ public function __construct(\Swift_Mime_Attachment $attachment) {
+ $this->swiftAttachment = $attachment;
+ }
+
+ /**
+ * @param string $filename
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setFilename($filename) {
+ $this->swiftAttachment->setFilename($filename);
+ return $this;
+ }
+
+ /**
+ * @param string $contentType
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setContentType($contentType) {
+ $this->swiftAttachment->setContentType($contentType);
+ return $this;
+ }
+
+ /**
+ * @param string $body
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setBody($body) {
+ $this->swiftAttachment->setBody($body);
+ return $this;
+ }
+
+ /**
+ * @return \Swift_Mime_Attachment
+ */
+ public function getSwiftAttachment() {
+ return $this->swiftAttachment;
+ }
+
+}
diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php
index 43fdb07b81..ad59d640b3 100644
--- a/lib/private/Mail/Mailer.php
+++ b/lib/private/Mail/Mailer.php
@@ -26,6 +26,7 @@ use OCP\Defaults;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
+use OCP\Mail\IAttachment;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\ILogger;
@@ -91,6 +92,27 @@ class Mailer implements IMailer {
return new Message(new \Swift_Message());
}
+ /**
+ * @param string|null $data
+ * @param string|null $filename
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachment($data = null, $filename = null, $contentType = null) {
+ return new Attachment(\Swift_Attachment::newInstance($data, $filename, $contentType));
+ }
+
+ /**
+ * @param string $path
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachmentFromPath($path, $contentType = null) {
+ return new Attachment(\Swift_Attachment::fromPath($path, $contentType));
+ }
+
/**
* Creates a new email template object
*
diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php
index b4d1e4dbe7..dcd4a66e99 100644
--- a/lib/private/Mail/Message.php
+++ b/lib/private/Mail/Message.php
@@ -23,6 +23,7 @@
namespace OC\Mail;
+use OCP\Mail\IAttachment;
use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMessage;
use Swift_Message;
@@ -43,6 +44,17 @@ class Message implements IMessage {
$this->swiftMessage = $swiftMessage;
}
+ /**
+ * @param IAttachment $attachment
+ * @return $this
+ * @since 13.0.0
+ */
+ public function attach(IAttachment $attachment) {
+ /** @var Attachment $attachment */
+ $this->swiftMessage->attach($attachment->getSwiftAttachment());
+ return $this;
+ }
+
/**
* SwiftMailer does currently not work with IDN domains, this function therefore converts the domains
* FIXME: Remove this once SwiftMailer supports IDN
diff --git a/lib/public/IRequest.php b/lib/public/IRequest.php
index 98d8f5bb83..262b595acc 100644
--- a/lib/public/IRequest.php
+++ b/lib/public/IRequest.php
@@ -68,6 +68,11 @@ interface IRequest {
*/
const USER_AGENT_CLIENT_ANDROID = '/^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/';
+ /**
+ * @since 13.0.0
+ */
+ const USER_AGENT_TALK_ANDROID = '/^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk v.*$/';
+
/**
* @since 9.1.0
*/
@@ -78,6 +83,11 @@ interface IRequest {
*/
const USER_AGENT_CLIENT_IOS = '/^Mozilla\/5\.0 \(iOS\) (ownCloud|Nextcloud)\-iOS.*$/';
+ /**
+ * @since 13.0.0
+ */
+ const USER_AGENT_TALK_IOS = '/^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk v.*$/';
+
/**
* @param string $name
*
diff --git a/lib/public/Mail/IAttachment.php b/lib/public/Mail/IAttachment.php
new file mode 100644
index 0000000000..32348e7a30
--- /dev/null
+++ b/lib/public/Mail/IAttachment.php
@@ -0,0 +1,53 @@
+
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see .
+ *
+ */
+
+namespace OCP\Mail;
+
+/**
+ * Interface IAttachment
+ *
+ * @package OCP\Mail
+ * @since 13.0.0
+ */
+interface IAttachment {
+
+ /**
+ * @param string $filename
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setFilename($filename);
+
+ /**
+ * @param string $contentType
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setContentType($contentType);
+
+ /**
+ * @param string $body
+ * @return $this
+ * @since 13.0.0
+ */
+ public function setBody($body);
+
+}
diff --git a/lib/public/Mail/IMailer.php b/lib/public/Mail/IMailer.php
index 35189c22a6..1009654825 100644
--- a/lib/public/Mail/IMailer.php
+++ b/lib/public/Mail/IMailer.php
@@ -53,6 +53,23 @@ interface IMailer {
*/
public function createMessage();
+ /**
+ * @param string|null $data
+ * @param string|null $filename
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachment($data = null, $filename = null, $contentType = null);
+
+ /**
+ * @param string $path
+ * @param string|null $contentType
+ * @return IAttachment
+ * @since 13.0.0
+ */
+ public function createAttachmentFromPath($path, $contentType = null);
+
/**
* Creates a new email template object
*
diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php
index 20e4ea19c4..e82b4ff93a 100644
--- a/lib/public/Mail/IMessage.php
+++ b/lib/public/Mail/IMessage.php
@@ -22,12 +22,20 @@
namespace OCP\Mail;
/**
- * Class Message
+ * Interface IMessage
*
* @package OCP\Mail
* @since 13.0.0
*/
interface IMessage {
+
+ /**
+ * @param IAttachment $attachment
+ * @return $this
+ * @since 13.0.0
+ */
+ public function attach(IAttachment $attachment);
+
/**
* Set the from address of this message.
*
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index be3aaf1ce4..6ffc87058f 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -68,7 +68,7 @@ OC.L10N.register(
"Your email address on %s was changed by an administrator." : "Deine E-Mail-Adresse auf %s wurde von einen Administrator geändert.",
"Email address for %1$s changed on %2$s" : "E-Mail-Adresse für %1$s geändert auf %2$s",
"Email address changed for %s" : "E-Mail-Adresse geändert für %s",
- "The new email address is %s" : "Die neue E-Mail-Adressel lautet %s",
+ "The new email address is %s" : "Die neue E-Mail-Adresse lautet %s",
"Your %s account was created" : "Dein %s-Konto wurde erstellt",
"Welcome aboard" : "Willkommen an Bord",
"Welcome aboard %s" : "Willkommen an Bord %s",
@@ -101,7 +101,7 @@ OC.L10N.register(
"Enable" : "Aktivieren",
"Enabling app …" : "Aktiviere App…",
"Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten",
- "Error: This app can not be enabled because it makes the server unstable" : "ehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
+ "Error: This app can not be enabled because it makes the server unstable" : "Fehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
"Error: Could not disable broken app" : " Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden ",
"Error while disabling broken app" : "Beim Deaktivieren der defekten App ist ein Fehler aufgetreten",
"No app updates available" : "Keine App-Aktualisierungen verfügbar",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index a386f77b42..939caad194 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -66,7 +66,7 @@
"Your email address on %s was changed by an administrator." : "Deine E-Mail-Adresse auf %s wurde von einen Administrator geändert.",
"Email address for %1$s changed on %2$s" : "E-Mail-Adresse für %1$s geändert auf %2$s",
"Email address changed for %s" : "E-Mail-Adresse geändert für %s",
- "The new email address is %s" : "Die neue E-Mail-Adressel lautet %s",
+ "The new email address is %s" : "Die neue E-Mail-Adresse lautet %s",
"Your %s account was created" : "Dein %s-Konto wurde erstellt",
"Welcome aboard" : "Willkommen an Bord",
"Welcome aboard %s" : "Willkommen an Bord %s",
@@ -99,7 +99,7 @@
"Enable" : "Aktivieren",
"Enabling app …" : "Aktiviere App…",
"Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten",
- "Error: This app can not be enabled because it makes the server unstable" : "ehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
+ "Error: This app can not be enabled because it makes the server unstable" : "Fehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
"Error: Could not disable broken app" : " Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden ",
"Error while disabling broken app" : "Beim Deaktivieren der defekten App ist ein Fehler aufgetreten",
"No app updates available" : "Keine App-Aktualisierungen verfügbar",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index e883366c16..336a438402 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -68,7 +68,7 @@ OC.L10N.register(
"Your email address on %s was changed by an administrator." : "Ihre E-Mail-Adresse auf %s wurde von einem Administrator geändert.",
"Email address for %1$s changed on %2$s" : "E-Mail-Adresse für %1$s geändert auf %2$s",
"Email address changed for %s" : "E-Mail-Adresse geändert für %s",
- "The new email address is %s" : "Die neue E-Mail-Adressel lautet %s",
+ "The new email address is %s" : "Die neue E-Mail-Adresse lautet %s",
"Your %s account was created" : "Ihr %s-Konto wurde erstellt",
"Welcome aboard" : "Willkommen an Bord",
"Welcome aboard %s" : "Willkommen an Bord %s",
@@ -101,7 +101,7 @@ OC.L10N.register(
"Enable" : "Aktivieren",
"Enabling app …" : "Aktiviere App…",
"Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten",
- "Error: This app can not be enabled because it makes the server unstable" : "ehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
+ "Error: This app can not be enabled because it makes the server unstable" : "Fehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
"Error: Could not disable broken app" : " Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden ",
"Error while disabling broken app" : "Beim Deaktivieren der defekten App ist ein Fehler aufgetreten",
"No app updates available" : "Keine App-Aktualisierungen verfügbar",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 352f00107c..b6485921b4 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -66,7 +66,7 @@
"Your email address on %s was changed by an administrator." : "Ihre E-Mail-Adresse auf %s wurde von einem Administrator geändert.",
"Email address for %1$s changed on %2$s" : "E-Mail-Adresse für %1$s geändert auf %2$s",
"Email address changed for %s" : "E-Mail-Adresse geändert für %s",
- "The new email address is %s" : "Die neue E-Mail-Adressel lautet %s",
+ "The new email address is %s" : "Die neue E-Mail-Adresse lautet %s",
"Your %s account was created" : "Ihr %s-Konto wurde erstellt",
"Welcome aboard" : "Willkommen an Bord",
"Welcome aboard %s" : "Willkommen an Bord %s",
@@ -99,7 +99,7 @@
"Enable" : "Aktivieren",
"Enabling app …" : "Aktiviere App…",
"Error while enabling app" : "Beim Aktivieren der App ist ein Fehler aufgetreten",
- "Error: This app can not be enabled because it makes the server unstable" : "ehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
+ "Error: This app can not be enabled because it makes the server unstable" : "Fehler: Diese App kann nicht aktiviert werden, da sie den Server instabil macht. ",
"Error: Could not disable broken app" : " Fehler: Die beschädigte Anwendung konnte nicht deaktiviert werden ",
"Error while disabling broken app" : "Beim Deaktivieren der defekten App ist ein Fehler aufgetreten",
"No app updates available" : "Keine App-Aktualisierungen verfügbar",
diff --git a/tests/lib/LoggerTest.php b/tests/lib/LoggerTest.php
index da9cedc9f5..3a30bbd1d3 100644
--- a/tests/lib/LoggerTest.php
+++ b/tests/lib/LoggerTest.php
@@ -138,6 +138,32 @@ class LoggerTest extends TestCase {
}
}
+ /**
+ * @dataProvider userAndPasswordData
+ */
+ public function testDetectclosure($user, $password) {
+ $a = function($user, $password) {
+ throw new \Exception('test');
+ };
+
+ try {
+ $a($user, $password);
+ } catch (\Exception $e) {
+ $this->logger->logException($e);
+ }
+ $logLines = $this->getLogs();
+
+ foreach($logLines as $logLine) {
+ $log = explode('\n', $logLine);
+ unset($log[1]); // Remove `testDetectclosure(` because we are not testing this here, but the closure on stack trace 0
+ $logLine = implode('\n', $log);
+
+ $this->assertNotContains($user, $logLine);
+ $this->assertNotContains($password, $logLine);
+ $this->assertContains('{closure}(*** sensitive parameters replaced ***)', $logLine);
+ }
+ }
+
public function dataGetLogClass() {
return [
['file', \OC\Log\File::class],