Skip to content
SCIMUser.php 1.46 KiB
Newer Older
Pierre Ozoux's avatar
Pierre Ozoux committed
<?php

declare(strict_types=1);

Pierre Ozoux's avatar
Pierre Ozoux committed
namespace OCA\SCIMServiceProvider\Service;
Pierre Ozoux's avatar
Pierre Ozoux committed

use OCP\IConfig;
use OCP\IUserManager;

Pierre Ozoux's avatar
Pierre Ozoux committed
class SCIMUser {
Pierre Ozoux's avatar
Pierre Ozoux committed
	/** @var IUserManager */
	protected $userManager;
	/** @var IConfig */
	protected $config;

Pierre Ozoux's avatar
Pierre Ozoux committed
	public function __construct(IUserManager $userManager,
								IConfig $config) {
Pierre Ozoux's avatar
Pierre Ozoux committed
		$this->userManager = $userManager;
		$this->config = $config;
	}

	/**
Pierre Ozoux's avatar
Pierre Ozoux committed
	 * creates an object with all user data
Pierre Ozoux's avatar
Pierre Ozoux committed
	 *
	 * @param string $userId
	 * @param bool $includeScopes
	 * @return array
Pierre Ozoux's avatar
Pierre Ozoux committed
	 * @throws Exception
Pierre Ozoux's avatar
Pierre Ozoux committed
	 */
Pierre Ozoux's avatar
Pierre Ozoux committed
	public function get(string $userId): array {
Pierre Ozoux's avatar
Pierre Ozoux committed
		// Check if the target user exists
		$targetUserObject = $this->userManager->get($userId);
		if ($targetUserObject === null) {
Pierre Ozoux's avatar
Pierre Ozoux committed
			return [];
Pierre Ozoux's avatar
Pierre Ozoux committed
		}

		$enabled = $this->config->getUserValue($targetUserObject->getUID(), 'core', 'enabled', 'true') === 'true';

Pierre Ozoux's avatar
Pierre Ozoux committed
		return [
			'schemas' => ["urn:ietf:params:scim:schemas:core:2.0:User"],
			'id' => $userId,
Pierre Ozoux's avatar
Pierre Ozoux committed
			'name' => [
				'formatted' => $targetUserObject->getDisplayName()
			],
			'meta' => [
Pierre Ozoux's avatar
Pierre Ozoux committed
				'resourceType' => 'User',
				'location' => '/Users/' . $userId,
Pierre Ozoux's avatar
Pierre Ozoux committed
				'created' => '2022-04-28T18:27:17.783Z', // todo
				'lastModified' => '2022-04-28T18:27:17.783Z' // todo
			],
			'userName' => $userId,
			'displayName' => $targetUserObject->getDisplayName(),
			'emails' => [ // todo if no emails
Pierre Ozoux's avatar
Pierre Ozoux committed
				[
					'primary' => true,
					'value' => $targetUserObject->getSystemEMailAddress()
Pierre Ozoux's avatar
Pierre Ozoux committed
				]
Pierre Ozoux's avatar
Pierre Ozoux committed
			],
Pierre Ozoux's avatar
Pierre Ozoux committed
			'externalId' => '1234', // todo
			'active' => $enabled
		];
Pierre Ozoux's avatar
Pierre Ozoux committed
	}
}