. * */ namespace OCA\Deck\Controller; use OCA\Deck\Service\SessionService; use OCA\Deck\Service\PermissionService; use OCA\Deck\Db\BoardMapper; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\ApiController; use OCP\IRequest; use OCA\Deck\Db\Acl; class SessionController extends ApiController { private SessionService $sessionService; private PermissionService $permissionService; private BoardMapper $boardMapper; public function __construct($appName, IRequest $request, SessionService $sessionService, PermissionService $permissionService, BoardMapper $boardMapper ) { parent::__construct($appName, $request); $this->sessionService = $sessionService; $this->permissionService = $permissionService; $this->boardMapper = $boardMapper; } /** * @NoAdminRequired */ public function create(int $boardId): DataResponse { $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ); $session = $this->sessionService->initSession($boardId); return new DataResponse([ 'token' => $session->getToken(), ]); } /** * notifies the server that the session is still active * @NoAdminRequired * @param $boardId */ public function sync($boardId, $token): DataResponse { $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ); try { $this->sessionService->syncSession($boardId, $token); return new DataResponse([]); } catch (DoesNotExistException $e) { return new DataResponse([], 403); } } /** * delete a session if existing * @NoAdminRequired * @param $boardId * @return bool */ public function close($boardId, $token) { $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ); $this->sessionService->closeSession((int)$boardId, $token); return true; } }