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:
parent
ad3efd6efb
commit
40cf574df9
|
@ -34,7 +34,7 @@ trait SimpleSubstitutionTrait {
|
|||
* @var string the placeholder without $ prefix
|
||||
* @since 16.0.0
|
||||
*/
|
||||
private $placeholder;
|
||||
protected $placeholder;
|
||||
|
||||
/** @var string */
|
||||
protected $sanitizedPlaceholder;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue