Add logic for getting the user from the rss token to the Manager

This commit is contained in:
Joas Schilling 2015-03-25 15:18:11 +01:00
parent 4c9c73bef9
commit b95d12700c
3 changed files with 81 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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();
}