. * */ namespace OCA\Deck\Controller; use OCA\Deck\Db\Acl; use OCA\Deck\Db\BoardMapper; use OCA\Deck\Service\PermissionService; use OCA\Deck\Service\SessionService; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCSController; use OCP\IRequest; class SessionController extends OCSController { 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(int $boardId, string $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([], 404); } } /** * delete a session if existing * @NoAdminRequired * @NoCSRFRequired * @param $boardId */ public function close(int $boardId, string $token) { $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ); $this->sessionService->closeSession($boardId, $token); return new DataResponse(); } }