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],