files_external: Make sure the correct user context is used in substitution of variables

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl 2019-07-24 11:53:53 +02:00 committed by Backportbot
parent ad3efd6efb
commit 40cf574df9
4 changed files with 75 additions and 27 deletions

View File

@ -34,7 +34,7 @@ trait SimpleSubstitutionTrait {
* @var string the placeholder without $ prefix
* @since 16.0.0
*/
private $placeholder;
protected $placeholder;
/** @var string */
protected $sanitizedPlaceholder;

View File

@ -0,0 +1,66 @@
<?php
/**
* @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @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\Files_External\Config;
use OCP\IRequest;
use OCP\IUserSession;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Share\IManager as ShareManager;
class UserContext {
/** @var IUserSession */
private $session;
/** @var ShareManager */
private $shareManager;
/** @var IRequest */
private $request;
public function __construct(IUserSession $session, ShareManager $manager, IRequest $request) {
$this->session = $session;
$this->shareManager = $manager;
$this->request = $request;
}
public function getSession(): IUserSession {
return $this->session;
}
protected function getUserId(): ?string {
if($this->session && $this->session->getUser() !== null) {
return $this->session->getUser()->getUID();
}
try {
$shareToken = $this->request->getParam('token');
$share = $this->shareManager->getShareByToken($shareToken);
return $share->getShareOwner();
} catch (ShareNotFound $e) {}
return null;
}
}

View File

@ -23,31 +23,20 @@
namespace OCA\Files_External\Config;
use OCP\IUserSession;
class UserPlaceholderHandler implements IConfigHandler {
class UserPlaceholderHandler extends UserContext implements IConfigHandler {
use SimpleSubstitutionTrait;
/** @var IUserSession */
private $session;
public function __construct(IUserSession $session) {
$this->session = $session;
$this->placeholder = 'user';
}
/**
* @param mixed $optionValue
* @return mixed the same type as $optionValue
* @since 16.0.0
*/
public function handle($optionValue) {
$user = $this->session->getUser();
if($user === null) {
$this->placeholder = 'user';
$uid = $this->getUserId();
if($uid === null) {
return $optionValue;
}
$uid = $user->getUID();
return $this->processInput($optionValue, $uid);
}
}

View File

@ -25,20 +25,12 @@ namespace OCA\User_LDAP\Handler;
use OCA\Files_External\Config\IConfigHandler;
use OCA\Files_External\Config\SimpleSubstitutionTrait;
use OCA\Files_External\Config\UserContext;
use OCA\User_LDAP\User_Proxy;
use OCP\IUserSession;
class ExtStorageConfigHandler implements IConfigHandler {
class ExtStorageConfigHandler extends UserContext implements IConfigHandler {
use SimpleSubstitutionTrait;
/** @var IUserSession */
private $session;
public function __construct(IUserSession $session) {
$this->placeholder = 'home';
$this->session = $session;
}
/**
* @param mixed $optionValue
* @return mixed the same type as $optionValue
@ -46,7 +38,8 @@ class ExtStorageConfigHandler implements IConfigHandler {
* @throws \Exception
*/
public function handle($optionValue) {
$user = $this->session->getUser();
$this->placeholder = 'home';
$user = $this->getSession()->getUser();
if($user === null) {
return $optionValue;
}