diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index 6aa9784e2bd..4e7664420d4 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -19,6 +19,7 @@ use OCP\IConfig; use OCP\IDBConnection; use OCP\IGroup; use OCP\IRequest; +use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserBackend; use OCP\IUserManager; @@ -37,6 +38,7 @@ use OCP\User\Events\UserCreatedEvent; use OCP\UserInterface; use OCP\Util; use Psr\Log\LoggerInterface; +use RuntimeException; /** * Class Manager @@ -70,6 +72,9 @@ class Manager extends PublicEmitter implements IUserManager { private DisplayNameCache $displayNameCache; + // IURLGenerator can't be injected through DI + private ?IURLGenerator $urlGenerator; + // This constructor can't autoload any class requiring a DB connection. public function __construct( private IConfig $config, @@ -862,4 +867,25 @@ class Manager extends PublicEmitter implements IUserManager { public function getExistingUser(string $userId, ?string $displayName = null): IUser { return new LazyUser($userId, $this, $displayName); } + + + #[\Override] + public function getAvatarUrlLight(string $userId, int $size): string { + $url = ($this->urlGenerator ??= Server::get(IURLGenerator::class))->linkToRouteAbsolute('core.avatar.getAvatar', ['userId' => $userId, 'size' => $size]); + if ($url === '') { + throw new RuntimeException('The URL is empty.'); + } + + return $url; + } + + #[\Override] + public function getAvatarUrlDark(string $userId, int $size): string { + $url = ($this->urlGenerator ??= Server::get(IURLGenerator::class))->linkToRouteAbsolute('core.avatar.getAvatarDark', ['userId' => $userId, 'size' => $size]); + if ($url === '') { + throw new RuntimeException('The URL is empty.'); + } + + return $url; + } } diff --git a/lib/public/IUserManager.php b/lib/public/IUserManager.php index 4d4006282aa..f19685903ba 100644 --- a/lib/public/IUserManager.php +++ b/lib/public/IUserManager.php @@ -266,4 +266,19 @@ interface IUserManager { * @since 33.0.0 */ public function getExistingUser(string $userId, ?string $displayName = null): IUser; + + + /** + * @param 64|512 $size + * @return non-empty-string + * @since 34.0.0 + */ + public function getAvatarUrlLight(string $userId, int $size): string; + + /** + * @param 64|512 $size + * @return non-empty-string + * @since 34.0.0 + */ + public function getAvatarUrlDark(string $userId, int $size): string; } diff --git a/tests/lib/User/ManagerTest.php b/tests/lib/User/ManagerTest.php index 65166836d34..acb35bf7cf7 100644 --- a/tests/lib/User/ManagerTest.php +++ b/tests/lib/User/ManagerTest.php @@ -733,4 +733,12 @@ class ManagerTest extends TestCase { $this->assertEquals('nobody', $user->getUID()); $this->assertEquals('None', $user->getDisplayName()); } + + public function testGetAvatarUrlLight(): void { + $this->assertEquals('http://localhost/index.php/avatar/userid/64', $this->manager->getAvatarUrlLight('userid', 64)); + } + + public function testGetAvatarUrlDark(): void { + $this->assertEquals('http://localhost/index.php/avatar/userid/64/dark', $this->manager->getAvatarUrlDark('userid', 64)); + } }