diff --git a/lib/Controller/OcsApiController.php b/lib/Controller/OcsApiController.php index 2ab4f1ac..421a845f 100644 --- a/lib/Controller/OcsApiController.php +++ b/lib/Controller/OcsApiController.php @@ -14,10 +14,12 @@ use OCP\AppFramework\Http\Attribute\OpenAPI; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCSController; +use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\IRootFolder; use OCP\Files\NotPermittedException; use OCP\IRequest; use OCP\IUserManager; +use OCP\User\Events\UserFirstTimeLoggedInEvent; class OcsApiController extends OCSController { @@ -26,6 +28,8 @@ public function __construct( private IRootFolder $root, private UserMapper $userMapper, private IUserManager $userManager, + private IEventDispatcher $eventDispatcher, + private IConfig $config, ) { parent::__construct(Application::APP_ID, $request); } @@ -65,12 +69,19 @@ public function createUser( $user->setQuota($quota); } - $userFolder = $this->root->getUserFolder($user->getUID()); - try { - // copy skeleton - \OC_Util::copySkeleton($user->getUID(), $userFolder); - } catch (NotPermittedException $ex) { - // read only uses + // Slighly incorrect, but this event trigger the creation of the file skeleton and + // the contact book entry. + $this->eventDispatcher->dispatchTyped(new UserFirstTimeLoggedInEvent($user)); + + /** Replace with ServerVersion once we depend on NC 31 */ + if (version_compare($this->config->getSystemValueString('version', '0.0.0'), '34.0.0', '<')) { + $userFolder = $this->root->getUserFolder($user->getUID()); + try { + // copy skeleton + \OC_Util::copySkeleton($user->getUID(), $userFolder); + } catch (NotPermittedException $ex) { + // read only uses + } } return new DataResponse(['user_id' => $user->getUID()]); diff --git a/lib/User/Backend.php b/lib/User/Backend.php index 9e120c16..985c4d95 100644 --- a/lib/User/Backend.php +++ b/lib/User/Backend.php @@ -28,7 +28,6 @@ use OCP\EventDispatcher\GenericEvent; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\IRootFolder; -use OCP\Files\ISetupManager; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\IConfig; @@ -456,11 +455,12 @@ private function checkFirstLogin(string $userId): bool { if ($firstLogin) { /** Replace with ServerVersion once we depend on NC 31 */ if (version_compare($this->config->getSystemValueString('version', '0.0.0'), '34.0.0', '>=')) { - Server::get(ISetupManager::class)->setupForUser($user); - } else { - \OC_Util::setupFS($userId); + $this->eventDispatcher->dispatchTyped(new UserFirstTimeLoggedInEvent($user)); + return $firstLogin; } + \OC_Util::setupFS($userId); + try { // trigger creation of user home and /files folder $userFolder = Server::get(IRootFolder::class)->getUserFolder($userId);