]> source.dussan.org Git - nextcloud-server.git/commitdiff
setting to disable sending password by mail
authorBjoern Schiessle <bjoern@schiessle.org>
Thu, 30 Mar 2017 13:23:44 +0000 (15:23 +0200)
committerBjoern Schiessle <bjoern@schiessle.org>
Mon, 3 Apr 2017 08:29:33 +0000 (10:29 +0200)
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
apps/sharebymail/appinfo/info.xml
apps/sharebymail/js/settings-admin.js [new file with mode: 0644]
apps/sharebymail/lib/Settings/Admin.php [new file with mode: 0644]
apps/sharebymail/lib/Settings/SettingsManager.php [new file with mode: 0644]
apps/sharebymail/lib/ShareByMailProvider.php
apps/sharebymail/templates/settings-admin.php [new file with mode: 0644]
apps/sharebymail/tests/ShareByMailProviderTest.php
lib/private/Share20/ProviderFactory.php

index 5528f6158d9b567470912742e06d1e360c349621..ab50ef03694e870a3a59feaf5651e0e4a82bde3c 100644 (file)
@@ -5,7 +5,7 @@
     <description>Share provider which allows you to share files by mail</description>
     <licence>AGPL</licence>
     <author>Bjoern Schiessle</author>
-    <version>1.1.0</version>
+    <version>1.2.0</version>
     <namespace>ShareByMail</namespace>
     <category>other</category>
     <dependencies>
         <filesystem/>
     </types>
 
+    <settings>
+        <admin>OCA\ShareByMail\Settings\Admin</admin>
+    </settings>
+
     <activity>
         <providers>
             <provider>OCA\ShareByMail\Activity</provider>
diff --git a/apps/sharebymail/js/settings-admin.js b/apps/sharebymail/js/settings-admin.js
new file mode 100644 (file)
index 0000000..7b43123
--- /dev/null
@@ -0,0 +1,30 @@
+/**
+ * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+$(function() {
+
+       $('#sendPasswordMail').on('change', function() {
+               var status = 'no';
+               if ($(this).is(':checked')) {
+                       status = 'yes';
+               }
+               OC.AppConfig.setValue('sharebymail', 'sendpasswordmail', status);
+       });
+
+});
diff --git a/apps/sharebymail/lib/Settings/Admin.php b/apps/sharebymail/lib/Settings/Admin.php
new file mode 100644 (file)
index 0000000..b6e7e5d
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCA\ShareByMail\Settings;
+
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Settings\ISettings;
+
+class Admin implements ISettings {
+
+       /** @var SettingsManager */
+       private $settingsManager;
+
+       public function __construct(SettingsManager $settingsManager) {
+               $this->settingsManager = $settingsManager;
+       }
+
+       /**
+        * @return TemplateResponse
+        */
+       public function getForm() {
+
+               $parameters = [
+                       'sendPasswordMail' => $this->settingsManager->sendPasswordByMail()
+               ];
+
+               return new TemplateResponse('sharebymail', 'settings-admin', $parameters, '');
+       }
+
+       /**
+        * @return string the section ID, e.g. 'sharing'
+        */
+       public function getSection() {
+               return 'sharing';
+       }
+
+       /**
+        * @return int whether the form should be rather on the top or bottom of
+        * the admin section. The forms are arranged in ascending order of the
+        * priority values. It is required to return a value between 0 and 100.
+        *
+        * E.g.: 70
+        */
+       public function getPriority() {
+               return 40;
+       }
+
+}
diff --git a/apps/sharebymail/lib/Settings/SettingsManager.php b/apps/sharebymail/lib/Settings/SettingsManager.php
new file mode 100644 (file)
index 0000000..205b253
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace OCA\ShareByMail\Settings;
+
+
+use OCP\IConfig;
+
+class SettingsManager {
+
+       /** @var IConfig */
+       private $config;
+
+       private $defaultSetting = 'yes';
+
+       public function __construct(IConfig $config) {
+               $this->config = $config;
+       }
+
+       /**
+        * should the password for a mail share be send to the recipient
+        *
+        * @return bool
+        */
+       public function sendPasswordByMail() {
+               $sendPasswordByMail = $this->config->getAppValue('sharebymail', 'sendpasswordmail', $this->defaultSetting);
+               return $sendPasswordByMail === 'yes';
+       }
+
+}
index 415011d2d6d798d686fef9232373690a5e383b95..332f1c0cf7492e8a1cc3d28e03d39cfd0dda676b 100644 (file)
@@ -23,6 +23,7 @@ namespace OCA\ShareByMail;
 
 use OC\HintException;
 use OC\Share20\Exception\InvalidShare;
+use OCA\ShareByMail\Settings\SettingsManager;
 use OCP\Activity\IManager;
 use OCP\DB\QueryBuilder\IQueryBuilder;
 use OCP\Files\Folder;
@@ -76,6 +77,9 @@ class ShareByMailProvider implements IShareProvider {
        /** @var IManager  */
        private $activityManager;
 
+       /** @var SettingsManager */
+       private $settingsManager;
+
        /**
         * Return the identifier of this provider.
         *
@@ -97,6 +101,7 @@ class ShareByMailProvider implements IShareProvider {
         * @param IMailer $mailer
         * @param IURLGenerator $urlGenerator
         * @param IManager $activityManager
+        * @param SettingsManager $settingsManager
         */
        public function __construct(
                IDBConnection $connection,
@@ -107,7 +112,8 @@ class ShareByMailProvider implements IShareProvider {
                ILogger $logger,
                IMailer $mailer,
                IURLGenerator $urlGenerator,
-               IManager $activityManager
+               IManager $activityManager,
+               SettingsManager $settingsManager
        ) {
                $this->dbConnection = $connection;
                $this->secureRandom = $secureRandom;
@@ -118,6 +124,7 @@ class ShareByMailProvider implements IShareProvider {
                $this->mailer = $mailer;
                $this->urlGenerator = $urlGenerator;
                $this->activityManager = $activityManager;
+               $this->settingsManager = $settingsManager;
        }
 
        /**
@@ -299,6 +306,11 @@ class ShareByMailProvider implements IShareProvider {
         * @param string $shareWith
         */
        protected function sendPassword($filename, $initiator, $shareWith, $password) {
+
+               if ($this->settingsManager->sendPasswordByMail() === false) {
+                       return;
+               }
+
                $initiatorUser = $this->userManager->get($initiator);
                $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
                $subject = (string)$this->l->t('Password to access »%s« shared to you by %s', [$filename, $initiatorDisplayName]);
diff --git a/apps/sharebymail/templates/settings-admin.php b/apps/sharebymail/templates/settings-admin.php
new file mode 100644 (file)
index 0000000..c4e4108
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+/** @var array $_ */
+use OCA\Federation\TrustedServers;
+
+/** @var \OCP\IL10N $l */
+script('sharebymail', 'settings-admin');
+?>
+<div id="ncShareByMailSettings" class="section">
+       <h2><?php p($l->t('Share by mail')); ?></h2>
+       <em><?php p($l->t('Send a personalized link to a file or folder by mail.')); ?></em>
+
+       <p>
+               <input id="sendPasswordMail" type="checkbox" class="checkbox" <?php if($_['sendPasswordMail']) p('checked'); ?> />
+               <label for="sendPasswordMail"><?php p($l->t('Send password by mail')); ?></label>
+       </p>
+
+</div>
+
index 013507fd35f2ab4099addf81ab8fe36ff8673e66..4ec62dc1a0302acac64d7f0eda01e3bb36a54a01 100644 (file)
@@ -24,6 +24,7 @@ namespace OCA\ShareByMail\Tests;
 
 
 use OC\HintException;
+use OCA\ShareByMail\Settings\SettingsManager;
 use OCA\ShareByMail\ShareByMailProvider;
 use OCP\Files\IRootFolder;
 use OCP\IDBConnection;
@@ -80,6 +81,9 @@ class ShareByMailProviderTest extends TestCase {
        /** @var  \OCP\Activity\IManager | \PHPUnit_Framework_MockObject_MockObject */
        private $activityManager;
 
+       /** @var  SettingsManager | \PHPUnit_Framework_MockObject_MockObject */
+       private $settingsManager;
+
        public function setUp() {
                parent::setUp();
 
@@ -99,6 +103,7 @@ class ShareByMailProviderTest extends TestCase {
                $this->urlGenerator = $this->getMockBuilder('\OCP\IUrlGenerator')->getMock();
                $this->share = $this->getMockBuilder('\OCP\Share\IShare')->getMock();
                $this->activityManager = $this->getMockBuilder('OCP\Activity\IManager')->getMock();
+               $this->settingsManager = $this->getMockBuilder(SettingsManager::class)->disableOriginalConstructor()->getMock();
 
                $this->userManager->expects($this->any())->method('userExists')->willReturn(true);
        }
@@ -140,7 +145,8 @@ class ShareByMailProviderTest extends TestCase {
                        $this->logger,
                        $this->mailer,
                        $this->urlGenerator,
-                       $this->activityManager
+                       $this->activityManager,
+                       $this->settingsManager
                );
 
        }
index 1a39cfbf33787c0d188b269dc02d9c87fa5ca53a..b411f42b26243302accc124bf40b71a4f5f4d1e2 100644 (file)
@@ -28,6 +28,7 @@ use OCA\FederatedFileSharing\DiscoveryManager;
 use OCA\FederatedFileSharing\FederatedShareProvider;
 use OCA\FederatedFileSharing\Notifications;
 use OCA\FederatedFileSharing\TokenHandler;
+use OCA\ShareByMail\Settings\SettingsManager;
 use OCA\ShareByMail\ShareByMailProvider;
 use OCP\Share\IProviderFactory;
 use OC\Share20\Exception\ProviderException;
@@ -149,18 +150,19 @@ class ProviderFactory implements IProviderFactory {
                                return null;
                        }
 
-                       $l = $this->serverContainer->getL10N('sharebymail');
+                       $settingsManager = new SettingsManager($this->serverContainer->getConfig());
 
                        $this->shareByMailProvider = new ShareByMailProvider(
                                $this->serverContainer->getDatabaseConnection(),
                                $this->serverContainer->getSecureRandom(),
                                $this->serverContainer->getUserManager(),
                                $this->serverContainer->getLazyRootFolder(),
-                               $l,
+                               $this->serverContainer->getL10N('sharebymail'),
                                $this->serverContainer->getLogger(),
                                $this->serverContainer->getMailer(),
                                $this->serverContainer->getURLGenerator(),
-                               $this->serverContainer->getActivityManager()
+                               $this->serverContainer->getActivityManager(),
+                               $settingsManager
                        );
                }