Skip to content
SCIMUser.php 1.96 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
		$externalId = $this->config->getUserValue($targetUserObject->getUID(), 'SCIMServiceProvider', 'ExternalId', '');
		$email = $targetUserObject->getSystemEMailAddress();
Pierre Ozoux's avatar
Pierre Ozoux committed

		$SCIMUser = [
			'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,
				'created' => '1970-01-01T00:00:00.000Z',
				'lastModified' => '1970-01-01T00:00:00.000Z'
			],
			'userName' => $userId,
			'displayName' => $targetUserObject->getDisplayName(),
Pierre Ozoux's avatar
Pierre Ozoux committed
			'active' => $enabled
		];
		if ($externalId !== '') {
			$SCIMUser['externalId'] = $externalId;
		}
		if ($email !== null) {
Pierre Ozoux's avatar
Pierre Ozoux committed
			$SCIMUser['emails'] = [ // todo if no emails
Pierre Ozoux's avatar
Pierre Ozoux committed
				[
					'primary' => true,
Pierre Ozoux's avatar
Pierre Ozoux committed
					'value' => $email
Pierre Ozoux's avatar
Pierre Ozoux committed
				]
Pierre Ozoux's avatar
Pierre Ozoux committed
			];
		}

		return $SCIMUser;
Pierre Ozoux's avatar
Pierre Ozoux committed
	}
Pierre Ozoux's avatar
Pierre Ozoux committed

	/**
	 * Sets externalId on user
	 *
	 * @param string $userId
	 * @param string $externalId
	 * @throws Exception
	 */
	public function setExternalId(string $userId, string $externalId) {
		$this->config->setUserValue($userId, 'SCIMServiceProvider', 'ExternalId', $externalId);
	}

Pierre Ozoux's avatar
Pierre Ozoux committed
}