summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/lib/Controller/ShareAPIController.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/lib/Controller/ShareAPIController.php')
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php33
1 files changed, 31 insertions, 2 deletions
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index 33782d21b5f..bda0047e66c 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -30,6 +30,7 @@ declare(strict_types=1);
namespace OCA\Files_Sharing\Controller;
use OCA\Files\Helper;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\AppFramework\OCS\OCSException;
@@ -81,6 +82,8 @@ class ShareAPIController extends OCSController {
private $lockedNode;
/** @var IConfig */
private $config;
+ /** @var IAppManager */
+ private $appManager;
/**
* Share20OCS constructor.
@@ -95,6 +98,7 @@ class ShareAPIController extends OCSController {
* @param string $userId
* @param IL10N $l10n
* @param IConfig $config
+ * @param IAppManager $appManager
*/
public function __construct(
string $appName,
@@ -106,7 +110,8 @@ class ShareAPIController extends OCSController {
IURLGenerator $urlGenerator,
string $userId,
IL10N $l10n,
- IConfig $config
+ IConfig $config,
+ IAppManager $appManager
) {
parent::__construct($appName, $request);
@@ -119,6 +124,7 @@ class ShareAPIController extends OCSController {
$this->currentUser = $userId;
$this->l = $l10n;
$this->config = $config;
+ $this->appManager = $appManager;
}
/**
@@ -206,6 +212,7 @@ class ShareAPIController extends OCSController {
} else if ($share->getShareType() === Share::SHARE_TYPE_EMAIL) {
$result['share_with'] = $share->getSharedWith();
$result['password'] = $share->getPassword();
+ $result['send_password_by_talk'] = $share->getSendPasswordByTalk();
$result['share_with_displayname'] = $this->getDisplayNameFromAddressBook($share->getSharedWith(), 'EMAIL');
$result['token'] = $share->getToken();
} else if ($share->getShareType() === Share::SHARE_TYPE_CIRCLE) {
@@ -328,6 +335,7 @@ class ShareAPIController extends OCSController {
* @param string $shareWith
* @param string $publicUpload
* @param string $password
+ * @param bool $sendPasswordByTalk
* @param string $expireDate
*
* @return DataResponse
@@ -345,6 +353,7 @@ class ShareAPIController extends OCSController {
string $shareWith = null,
string $publicUpload = 'false',
string $password = '',
+ string $sendPasswordByTalk = null,
string $expireDate = ''
): DataResponse {
$share = $this->shareManager->newShare();
@@ -485,6 +494,14 @@ class ShareAPIController extends OCSController {
$share->setPermissions($permissions);
}
$share->setSharedWith($shareWith);
+
+ if ($sendPasswordByTalk === 'true') {
+ if (!$this->appManager->isEnabledForUser('spreed')) {
+ throw new OCSForbiddenException($this->l->t('Sharing %s sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled', [$path->getPath()]));
+ }
+
+ $share->setSendPasswordByTalk(true);
+ }
} else if ($shareType === Share::SHARE_TYPE_CIRCLE) {
if (!\OC::$server->getAppManager()->isEnabledForUser('circles') || !class_exists('\OCA\Circles\ShareByCircleProvider')) {
throw new OCSNotFoundException($this->l->t('You cannot share to a Circle if the app is not enabled'));
@@ -697,6 +714,7 @@ class ShareAPIController extends OCSController {
* @param string $id
* @param int $permissions
* @param string $password
+ * @param string $sendPasswordByTalk
* @param string $publicUpload
* @param string $expireDate
* @param string $note
@@ -711,6 +729,7 @@ class ShareAPIController extends OCSController {
string $id,
int $permissions = null,
string $password = null,
+ string $sendPasswordByTalk = null,
string $publicUpload = null,
string $expireDate = null,
string $note = null
@@ -727,7 +746,7 @@ class ShareAPIController extends OCSController {
throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist'));
}
- if ($permissions === null && $password === null && $publicUpload === null && $expireDate === null && $note === null) {
+ if ($permissions === null && $password === null && $sendPasswordByTalk === null && $publicUpload === null && $expireDate === null && $note === null) {
throw new OCSBadRequestException($this->l->t('Wrong or no update parameter given'));
}
@@ -816,6 +835,16 @@ class ShareAPIController extends OCSController {
} else if ($password !== null) {
$share->setPassword($password);
}
+
+ if ($sendPasswordByTalk === 'true') {
+ if (!$this->appManager->isEnabledForUser('spreed')) {
+ throw new OCSForbiddenException($this->l->t('Sharing sending the password by Nextcloud Talk failed because Nextcloud Talk is not enabled'));
+ }
+
+ $share->setSendPasswordByTalk(true);
+ } else {
+ $share->setSendPasswordByTalk(false);
+ }
}
if ($expireDate === '') {