Add logic for getting the user from the rss token to the Manager
This commit is contained in:
parent
4c9c73bef9
commit
b95d12700c
|
@ -28,8 +28,34 @@ namespace OC;
|
|||
use OCP\Activity\IConsumer;
|
||||
use OCP\Activity\IExtension;
|
||||
use OCP\Activity\IManager;
|
||||
use OCP\IConfig;
|
||||
use OCP\IRequest;
|
||||
use OCP\IUserSession;
|
||||
|
||||
class ActivityManager implements IManager {
|
||||
/** @var IRequest */
|
||||
protected $request;
|
||||
|
||||
/** @var IUserSession */
|
||||
protected $session;
|
||||
|
||||
/** @var IConfig */
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* constructor of the controller
|
||||
*
|
||||
* @param IRequest $request
|
||||
* @param IUserSession $session
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct(IRequest $request,
|
||||
IUserSession $session,
|
||||
IConfig $config) {
|
||||
$this->request = $request;
|
||||
$this->session = $session;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @var \Closure[]
|
||||
|
@ -348,4 +374,43 @@ class ActivityManager implements IManager {
|
|||
|
||||
return array(' and ((' . implode(') or (', $conditions) . '))', $parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user we need to use
|
||||
*
|
||||
* Either the user is logged in, or we try to get it from the token
|
||||
*
|
||||
* @return string
|
||||
* @throws \UnexpectedValueException If the token is invalid, does not exist or is not unique
|
||||
*/
|
||||
public function getCurrentUserId() {
|
||||
if (!$this->session->isLoggedIn()) {
|
||||
return $this->getUserFromToken();
|
||||
} else {
|
||||
return $this->session->getUser()->getUID();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the user for the token
|
||||
*
|
||||
* @return string
|
||||
* @throws \UnexpectedValueException If the token is invalid, does not exist or is not unique
|
||||
*/
|
||||
protected function getUserFromToken() {
|
||||
$token = (string) $this->request->getParam('token', '');
|
||||
if (strlen($token) !== 30) {
|
||||
throw new \UnexpectedValueException('The token is invalid');
|
||||
}
|
||||
|
||||
$users = $this->config->getUsersForUserValue('activity', 'rsstoken', $token);
|
||||
|
||||
if (sizeof($users) !== 1) {
|
||||
// No unique user found
|
||||
throw new \UnexpectedValueException('The token is invalid');
|
||||
}
|
||||
|
||||
// Token found login as that user
|
||||
return array_shift($users);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,8 +223,12 @@ class Server extends SimpleContainer implements IServerContainer {
|
|||
new ArrayCache()
|
||||
);
|
||||
});
|
||||
$this->registerService('ActivityManager', function ($c) {
|
||||
return new ActivityManager();
|
||||
$this->registerService('ActivityManager', function (Server $c) {
|
||||
return new ActivityManager(
|
||||
$c->getRequest(),
|
||||
$c->getUserSession(),
|
||||
$c->getConfig()
|
||||
);
|
||||
});
|
||||
$this->registerService('AvatarManager', function ($c) {
|
||||
return new AvatarManager();
|
||||
|
|
|
@ -136,4 +136,14 @@ interface IManager {
|
|||
* @return array
|
||||
*/
|
||||
function getQueryForFilter($filter);
|
||||
|
||||
/**
|
||||
* Get the user we need to use
|
||||
*
|
||||
* Either the user is logged in, or we try to get it from the token
|
||||
*
|
||||
* @return string
|
||||
* @throws \UnexpectedValueException If the token is invalid, does not exist or is not unique
|
||||
*/
|
||||
public function getCurrentUserId();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue