diff --git a/lib/Controller/SessionController.php b/lib/Controller/SessionController.php index 0a294106874..e14c1ef705e 100644 --- a/lib/Controller/SessionController.php +++ b/lib/Controller/SessionController.php @@ -26,10 +26,13 @@ namespace OCA\Text\Controller; use OCA\Text\Service\ApiService; +use OCA\Text\Service\SessionService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\Response; use OCP\IRequest; +use OCP\IUserManager; +use OCP\IUserSession; class SessionController extends Controller { @@ -38,9 +41,28 @@ class SessionController extends Controller { */ private $apiService; - public function __construct(string $appName, IRequest $request, ApiService $apiService) { + /** + * @var SessionService + */ + private $sessionService; + + /** + * @var IUserManager + */ + private $userManager; + + /** + * @var IUserSession + */ + private $userSession; + + + public function __construct(string $appName, IRequest $request, ApiService $apiService, SessionService $sessionService, IUserManager $userManager, IUserSession $userSession) { parent::__construct($appName, $request); $this->apiService = $apiService; + $this->sessionService = $sessionService; + $this->userManager = $userManager; + $this->userSession = $userSession; } /** @@ -71,6 +93,7 @@ public function close(int $documentId, int $sessionId, string $sessionToken): Da * @PublicPage */ public function push(int $documentId, int $sessionId, string $sessionToken, int $version, array $steps): DataResponse { + $this->loginSessionUser($documentId, $sessionId, $sessionToken); return $this->apiService->push($documentId, $sessionId, $sessionToken, $version, $steps); } @@ -79,6 +102,16 @@ public function push(int $documentId, int $sessionId, string $sessionToken, int * @PublicPage */ public function sync(int $documentId, int $sessionId, string $sessionToken, int $version = 0, string $autosaveContent = null, bool $force = false, bool $manualSave = false): DataResponse { + $this->loginSessionUser($documentId, $sessionId, $sessionToken); return $this->apiService->sync($documentId, $sessionId, $sessionToken, $version, $autosaveContent, $force, $manualSave); } + + private function loginSessionUser(int $documentId, int $sessionId, string $sessionToken) { + $currentSession = $this->sessionService->getSession($documentId, $sessionId, $sessionToken); + $user = $this->userManager->get($currentSession->getUserId()); + if ($user !== null) { + $this->userSession->setUser($user); + } + } + }