• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/app.php
  • Класс: BitrixRestAppTable
  • Вызов: AppTable::onAfterAdd
static function onAfterAdd(MainEntityEvent $event)
{
	EventController::onAddApp($event);
	$data = $event->getParameters();
	if(!static::$skipRemoteUpdate)
	{
		if(
			$data['fields']['STATUS'] === static::STATUS_LOCAL
			&& OAuthService::getEngine()->isRegistered()
		)
		{
			try
			{
				$appFields = array(
					'TITLE' => $data['fields']['APP_NAME'],
					'REDIRECT_URI' => $data['fields']['URL'],
					'SCOPE' => $data['fields']['SCOPE'],
				);

				$clientData = OAuthService::getEngine()
					->getClient()
					->addApplication($appFields);
			}
			catch(MainSystemException $e)
			{
				$clientData = array(
					"error" => $e->getCode(),
					"error_description" => $e->getMessage(),
				);
			}

			if(is_array($clientData))
			{
				if($clientData['result'])
				{
					static::$skipRemoteUpdate = true;

					static::clearClientCache($clientData['result']['client_id']);

					$updateResult = static::update($data['id'], array(
						'CLIENT_ID' => $clientData['result']['client_id'],
						'CLIENT_SECRET' => $clientData['result']['client_secret'],
						'STATUS' => static::STATUS_LOCAL,
						'SHARED_KEY' => md5(CRestUtil::getMemberId().$clientData['result']['client_secret']),
						'CODE' => $clientData['result']['client_id'],
					));
					static::$skipRemoteUpdate = false;

					if($updateResult->isSuccess())
					{
						return true;
					}
					else
					{
						$clientData = array('error' => $updateResult->getErrorMessages());
					}
				}
			}
			else
			{
				$clientData = array('error' => 'Unknown error');
			}

			static::$skipRemoteUpdate = true;
			static::delete($data['id']);
			static::$skipRemoteUpdate = false;

			throw new OAuthException($clientData);
		}
	}

	if($data['fields']['STATUS'] !== static::STATUS_LOCAL)
	{
		BitrixRestEngineAccess::getActiveEntity(true);
	}

	return true;
}