13 return file_exists(
$_SERVER[
"DOCUMENT_ROOT"] .
"/bitrix/modules/main/classes/general/update_db_updater.php");
24 $prefix = COption::GetOptionString(
"main",
"auth_controller_prefix",
"controller");
26 ($prefix !=
'' && str_starts_with(mb_strtolower(
$arParams[
"LOGIN"]), $prefix .
'\\'))
28 ($prefix ==
'' && !str_contains(
$arParams[
"LOGIN"],
"\\"))
44 $oResponse = $oRequest->SendWithCheck();
50 if (!$oResponse->OK())
57 $arUser = $oResponse->arParameters[
'USER_INFO'];
60 COption::GetOptionString(
"main",
"auth_controller_sso",
"N") ==
"Y"
61 && mb_strpos(
$arParams[
"LOGIN"],
"\\") > 0
70 $oResponse = $oRequest->SendWithCheck();
76 if (!$oResponse->OK())
83 $arUser = $oResponse->arParameters[
'USER_INFO'];
86 COption::GetOptionString(
"controller",
"auth_controller_enabled",
"N") ===
"Y"
87 && mb_strpos(
$arParams[
"LOGIN"],
"\\") > 0
88 && CModule::IncludeModule(
"controller")
95 $url = mb_strtolower(trim(
$site,
" \t\r\n./"));
96 if (!str_starts_with(
$url,
"http://") && !str_starts_with(
$url,
"https://"))
101 $dbr_mem = CControllerMember::GetList(
105 "=DISCONNECTED" =>
"N",
109 $ar_mem = $dbr_mem->Fetch();
122 $arUser =
$res[
'USER_INFO'];
123 if (is_array($arUser))
125 $arUser[
"CONTROLLER_ADMIN"] =
"N";
127 if (isset(
$res[
"FORMAT_DATE"]))
129 $FORMAT_DATE =
$res[
"FORMAT_DATE"];
140 if (is_array($arUser) && mb_strtolower($arUser[
'LOGIN']) == mb_strtolower(
$login))
144 if ($arUser[
"NAME"] ==
'' && $arUser[
"SECOND_NAME"] ==
'')
146 if (preg_match(
"/^(.+)@/", $arUser[
"LOGIN"], $match))
148 $arUser[
"NAME"] = $match[1];
152 $arUser[
"NAME"] = $arUser[
"LOGIN"];
158 $arUser[
'LOGIN'] =
$site .
"\\" . $arUser[
'LOGIN'];
163 if ($arUser[
"CONTROLLER_ADMIN"] ==
"Y")
165 AddEventHandler(
"main",
"OnAfterUserLogin", [
"CControllerClient",
"OnAfterUserLogin"]);
174 && class_exists(
"\\Bitrix\\Controller\\AuthLogTable")
178 \Bitrix\Controller\AuthLogTable::logSiteToControllerAuth(
183 $arUser[
'NAME'] .
' ' . $arUser[
'LAST_NAME'] .
' (' . $arUser[
'LOGIN'] .
')'
196 if (
$arParams[
"CONTROLLER_ADMIN"] ===
"Y")
198 $USER->SetControllerAdmin();
216 && $FORMAT_DATE !==
false
222 $arFields[
'EXTERNAL_AUTH_ID'] =
"__controller";
224 $dbr_user = CUser::GetList(
'',
'', [
225 "LOGIN_EQUAL_EXACT" =>
$arFields[
"LOGIN"],
226 "EXTERNAL_AUTH_ID" =>
"__controller",
228 if ($ar_user = $dbr_user->Fetch())
230 $USER_ID = $ar_user[
"ID"];
234 $arFields[
"GROUP_ID"] = CUser::GetUserGroup($USER_ID);
235 foreach (
$arFields[
"GROUPS_TO_DELETE"] as $group_id)
240 $p = array_search($group_id,
$arFields[
"GROUP_ID"]);
247 foreach (
$arFields[
"GROUPS_TO_ADD"] as $group_id)
270 if (!$oUser->Update($USER_ID,
$arFields))
314 CUser::SetUserGroup($ADMIN_ID, [1]);
317 ->setUserId($ADMIN_ID)
321 $USER->SetControllerAdmin();
337 ->setUserId($USER_ID)
351 "ID" =>
"__controller",
352 "NAME" =>
GetMessage(
"MAIN_CMEMBER_AUTH_TYPE"),
367 "PERSONAL_PROFESSION",
420 if (!($oResponse = $oRequest->SendWithCheck()))
425 if (!$oResponse->OK())
428 $GLOBALS[
"APPLICATION"]->ThrowException($e);
438 COption::SetOptionString(
"main",
"controller_member_id", $member_id);
441 COption::SetOptionString(
"main",
"controller_member_secret_id", $member_secret_id);
444 COption::SetOptionString(
"main",
"controller_ticket", time() .
"|" . $ticket_id .
"|" . $controller_url);
445 COption::SetOptionString(
"main",
"controller_url", $controller_url);
447 return [$member_id, $member_secret_id, $ticket_id];
450 public static function JoinToControllerEx($controller_url, $controller_login, $controller_password, $arMemberParams = [])
452 if (COption::GetOptionString(
"main",
"controller_member",
"N") ==
"Y")
457 if ($arMemberParams[
"URL"] ==
'')
459 $arMemberParams[
"URL"] =
$_SERVER[
'HTTP_HOST'];
467 "member_secret_id" => $member_secret_id,
468 "ticket_id" => $ticket_id,
469 "admin_login" => $controller_login,
470 "admin_password" => $controller_password,
471 "url" => $arMemberParams[
"URL"],
472 "name" => $arMemberParams[
"NAME"],
473 "contact_person" => $arMemberParams[
"CONTACT_PERSON"],
474 "email" => $arMemberParams[
"EMAIL"],
475 "shared_kernel" => ($arMemberParams[
"SHARED_KERNEL"] ?
"Y" :
"N"),
478 if ($arMemberParams[
"CONTROLLER_GROUP"] > 0)
480 $arVars[
'group_id'] = $arMemberParams[
"CONTROLLER_GROUP"];
484 if (!($oResponse = $oRequest->Send()))
489 if (!$oResponse->OK())
492 $GLOBALS[
"APPLICATION"]->ThrowException($e);
496 COption::SetOptionString(
"main",
"controller_member",
"Y");
499 $USER->UpdateSessionData(
$USER->getContext());
504 public static function JoinToController($controller_url, $controller_login, $controller_password, $site_url =
false, $controller_group =
false, $site_name =
false, $bSharedKernel =
false)
508 "NAME" => $site_name,
509 "SHARED_KERNEL" => $bSharedKernel,
510 "CONTROLLER_GROUP" => $controller_group,
518 if (COption::GetOptionString(
"main",
"controller_member",
"N") !=
"Y")
526 "admin_login" => $controller_login,
527 "admin_password" => $controller_password,
531 if (!($oResponse = $oRequest->SendWithCheck()))
536 if (!$oResponse->OK())
539 $GLOBALS[
"APPLICATION"]->ThrowException($e);
543 COption::SetOptionString(
"main",
"controller_member",
"N");
549 if (COption::GetOptionString(
"main",
"controller_member",
"N") !=
"Y")
557 $oResponse = $oRequest->SendWithCheck();
561 throw new \Bitrix\Main\SystemException(
"CControllerClient::UpdateCounters: unknown error");
563 elseif (!$oResponse->OK())
565 throw new \Bitrix\Main\SystemException(
"CControllerClient::UpdateCounters: " . $oResponse->text);
568 return "CControllerClient::UpdateCounters();";
575 if (COption::GetOptionString(
"main",
"controller_member",
"N") !=
"Y")
583 "event_name" => $eventName,
586 $oResponse = $oRequest->SendWithCheck();
588 if (!$oResponse || !$oResponse->OK())
594 $errorMessage .=
' http headers: [' . $oResponse->httpHeaders .
']';
595 if ($oResponse->text)
597 $errorMessage .=
' http body: [' . substr($oResponse->text, 0, 200) .
']';
604 trigger_error(
'CControllerClient::ExecuteEvent(' . $eventName .
'):' .
$errorMessage, E_USER_WARNING);
607 return $oResponse->arParameters[
'result'];
612 $disconnect_command = COption::GetOptionString(
"main",
"~controller_disconnect_command",
"");
613 if ($disconnect_command <>
'')
615 eval($disconnect_command);
617 COption::SetOptionString(
"main",
"controller_member",
"N");
622 static $arCachedData;
623 if (!isset($arCachedData) || $bRefresh)
625 $arCachedData = unserialize(COption::GetOptionString(
"main",
"~controller_backup",
""), [
'allowed_classes' =>
false]);
628 return $arCachedData;
633 COption::SetOptionString(
"main",
"~controller_backup", serialize($arBackup));
642 $arBackup[
"options"][
$module_id][$option_id] = COption::GetOptionString(
$module_id, $option_id,
"");
645 COption::SetOptionString(
$module_id, $option_id, $value);
654 unset($arBackup[
"options"][
$module_id][$option_id]);
664 $arm = CModule::_GetCache();
670 if (!isset($arBackup[
"modules"]))
672 $arBackup[
"modules"] = $arInstalled;
678 if (!($oModule = CModule::CreateModuleObject(
$module_id)))
685 if (!method_exists($oModule,
"InstallDB") || $oModule->InstallDB() ===
false)
702 if (isset($arBackup[
"modules"]))
705 $arWasInstalled = $arBackup[
"modules"];
707 $arNowInstalled = [];
708 $arm = CModule::_GetCache();
723 unset($arWasInstalled[array_search(
$module_id, $arWasInstalled)]);
733 unset($arBackup[
"modules"]);
746 $old_settings = $arBackup[
"security"][$group_code];
747 if (!isset($old_settings))
752 foreach ($old_settings as
$module_id => $level)
760 unset($arBackup[
"security"][$group_code][
$module_id]);
772 if ($ar_task = $dbr_task->Fetch())
774 if ($ar_task[
'SYS'] ==
'Y')
778 $ID = $ar_task[
'ID'];
784 "BINDING" =>
'module',
799 $arBackup[
'security_task'][] =
$ID;
819 foreach ($arPermissions as
$module_id => $level)
829 if (is_array($arSubGroups))
831 $arSubordGroupID = [];
832 foreach ($arSubGroups as $sub_group_id)
835 if ($sub_group_id > 0)
837 $arSubordGroupID[] = $sub_group_id;
841 if (!
is_set($arBackup[
"security_subord_groups"], $group_code))
857 if (!is_array($arBackup))
862 if (is_array($arBackup[
"security"]))
864 foreach ($arBackup[
"security"] as $group_code => $perms)
866 if (in_array($group_code, $arExcludeGroups))
878 if (isset($arBackup[
"security_subord_groups"][$group_code]))
883 unset($arBackup[
"security"][$group_code]);
884 unset($arBackup[
"security_subord_groups"][$group_code]);
887 if (empty($arBackup[
"security"]))
889 unset($arBackup[
"security"]);
901 if (!is_array($arBackup))
906 if (is_array($arBackup[
"options"]))
910 foreach (
$options as $option_id => $option_value)
912 COption::SetOptionString(
$module_id, $option_id, $option_value);
918 if (is_array($arBackup[
'security_task']))
920 foreach ($arBackup[
'security_task'] as $task_id)
936 public static function RunCommand($command, $oRequest, $oResponse)
939 return eval($command);
970 && defined($this->debug_const)
971 && constant($this->debug_const) ===
true
993 if ($this->debug_file_const && defined($this->debug_file_const))
995 return (
string)constant($this->debug_file_const);
999 return $_SERVER[
'DOCUMENT_ROOT'] .
'/bitrix/controller_logs/';
1011 if ($this->session_id)
1013 return $this->session_id .
".log";
1040 ignore_user_abort(
true);
1043 file_put_contents(
$filename, date(
"Y-m-d H:i:s") .
" - " . (is_array($sText) ? print_r($sText,
true) : $sText) .
"\n----------\n", FILE_APPEND | LOCK_EX);
1045 ignore_user_abort(
false);
1061 $arParameters = unserialize($parameters, [
'allowed_classes' =>
false]);
1106 $hash = implode(
"|", func_get_args());
1107 $md5hash = md5(
$hash);
1109 if ($md5hash != $this->hash)
1132 $hash = implode(
"|", func_get_args());
1133 $this->hash = md5(
$hash);
1160 $this->member_id =
$_REQUEST[
'member_id'];
1161 $this->session_id =
$_REQUEST[
'session_id'];
1162 $this->operation =
$_REQUEST[
'operation'];
1171 $this->encoding =
$_REQUEST[
'encoding'];
1176 $this->strParameters = base64_decode(
$_REQUEST[
'parameters']);
1194 return parent::Check($this->operation, $this->strParameters, $this->secret_id);
1204 parent::Sign($this->operation, serialize($this->arParameters), $this->secret_id);
1214 return !empty($_POST);
1228 $result =
"operation=" . $this->operation .
1229 "&version=" . $this->
version .
1230 "&session_id=" . $this->session_id .
1231 "&member_id=" . urlencode($this->member_id) .
1234 if (is_array($this->arParameters))
1236 $result .=
"¶meters=" . urlencode(base64_encode(serialize($this->arParameters)));
1240 $result .=
"&hash=" . urlencode($this->hash);
1253 if (mb_strpos(
$url,
"?") > 0)
1267 __FILE__ .
":" . __LINE__,
1268 "Request by redirect",
1289 $server_name = mb_strtolower(trim(
$url,
"/ \r\n\t"));
1290 if (str_starts_with($server_name,
'http://'))
1292 $server_name = substr($server_name, 7);
1294 elseif (str_starts_with($server_name,
'https://'))
1296 $server_name = substr($server_name, 8);
1300 if (preg_match(
'/.+:([0-9]+)$/', $server_name,
$matches))
1303 $server_name = substr($server_name, 0, 0 - strlen($server_port) - 1);
1308 $bUseProxy = ($proxy_url <>
'' && $proxy_port <>
'');
1311 $proxy_url = COption::GetOptionString(
"main",
"controller_proxy_url",
"");
1312 $proxy_port = COption::GetOptionString(
"main",
"controller_proxy_port",
"");
1313 $bUseProxy = ($proxy_url <>
'' && $proxy_port <>
'');
1319 $proxy_port = intval($proxy_port);
1320 if ($proxy_port <= 0)
1325 $requestIP = $proxy_url;
1326 $requestPort = $proxy_port;
1331 $requestPort = $server_port;
1335 $requestIP = $server_name;
1336 $requestPort = $server_port;
1339 $conn = @fsockopen(($requestPort == 443 ?
'ssl://' :
'') . $requestIP, $requestPort, $errno, $errstr, 30);
1345 __FILE__ .
":" . __LINE__,
1346 "We can't send request to the $server_name:$server_port from member#" . $this->member_id,
1348 "errstr" => $errstr,
1355 $strError =
GetMessage(
"MAIN_CMEMBER_ERR5") . $server_name .
":" . $server_port .
" (" . $errstr .
")";
1367 $strRequest =
"POST http://" . $server_name .
":" . $server_port .
$page .
" HTTP/1.0\r\n";
1369 $proxy_user = COption::GetOptionString(
"main",
"controller_proxy_user",
"");
1370 $proxy_password = COption::GetOptionString(
"main",
"controller_proxy_password",
"");
1371 if ($proxy_user <>
'')
1373 $strRequest .=
"Proxy-Authorization: Basic " . base64_encode($proxy_user .
":" . $proxy_password) .
"\r\n";
1378 $strRequest =
"POST " .
$page .
" HTTP/1.0\r\n";
1380 $strRequest .=
"User-Agent: BitrixControllerMember\r\n";
1381 $strRequest .=
"Accept: */*\r\n";
1382 $strRequest .=
"Host: " . $server_name .
"\r\n";
1383 $strRequest .=
"Accept-Language: en\r\n";
1384 $strRequest .=
"Content-type: application/x-www-form-urlencoded\r\n";
1385 $strRequest .=
"Content-length: " . mb_strlen($strVars) .
"\r\n\r\n";
1386 $strRequest .= $strVars .
"\r\n";
1391 __FILE__ .
":" . __LINE__,
1392 "We send request to the $server_name:$server_port from member#" . $this->member_id,
1393 "strVars" => $strVars,
1398 fputs($conn, $strRequest);
1401 while (($line = fgets($conn, 4096)) && $line !=
"\r\n")
1407 while ($line = fread($conn, 4096))
1415 $packet_result->httpHeaders = $header;
1417 $packet_result->ParseResult(
$result);
1422 __FILE__ .
":" . __LINE__,
1423 "We get response from $server_name:$server_port to member#" . $packet_result->member_id,
1424 "secret_id" => $this->secret_id,
1426 "Packet security check" => ($packet_result->Check() ?
"passed" :
"failed"),
1427 "Packet" => $packet_result,
1431 return $packet_result;
1454 if (is_object($oPacket))
1456 $vars = get_object_vars($oPacket);
1457 foreach ($vars as
$name => $value)
1459 if (!in_array(
$name, $arExclude))
1461 $this->
$name = $value;
1479 return parent::Check($this->status, $this->text, $this->strParameters, $this->secret_id);
1489 parent::Sign($this->status, $this->text, serialize($this->arParameters), $this->secret_id);
1495 return (str_starts_with($this->status,
"2"));
1502 $pairs = explode(
'&', trim(
$result,
" \n\r\t"));
1503 foreach ($pairs as $pair)
1505 [
$name, $value] = explode(
'=', $pair, 2);
1506 $ar_result[
$name] = $value;
1509 $this->session_id = urldecode($ar_result[
'session_id']);
1510 $this->member_id = urldecode($ar_result[
'member_id']);
1511 $this->hash = urldecode($ar_result[
'hash']);
1512 $this->status = urldecode($ar_result[
'status']);
1513 $this->text = urldecode($ar_result[
'text']);
1515 if (isset($ar_result[
'encoding']))
1517 $this->encoding = urldecode($ar_result[
'encoding']);
1520 $this->strParameters = base64_decode(urldecode($ar_result[
'parameters']));
1525 if (isset($ar_result[
'encoding']))
1534 $this->
version = $ar_result[
'version'];
1538 && $this->text ==
''
1539 && $this->member_id ==
''
1542 $this->status =
"479";
1543 $this->text =
GetMessage(
"MAIN_CMEMBER_ERR7") .
" " . mb_substr(
$result, 0, 1000);
1555 $result =
"status=" . urlencode($this->status) .
1556 "&text=" . urlencode($this->text) .
1557 "&version=" . urlencode($this->
version) .
1558 "&session_id=" . urlencode($this->session_id) .
1559 "&member_id=" . urlencode($this->member_id) .
1562 $result .=
"¶meters=" . urlencode(base64_encode(serialize($this->arParameters)));
1565 $result .=
"&hash=" . urlencode($this->hash);
1570 __FILE__ .
":" . __LINE__,
1571 "We send errored response back",
1586 __FILE__ .
":" . __LINE__,
1587 "We send response back",
1605 $this->member_id = COption::GetOptionString(
"main",
"controller_member_id",
"");
1606 $this->secret_id = COption::GetOptionString(
"main",
"controller_member_secret_id",
"");
1615 if ($oResponse ===
false)
1620 if (!$oResponse->Check())
1622 if (is_object(
$GLOBALS[
"APPLICATION"]))
1625 $GLOBALS[
"APPLICATION"]->ThrowException($e);
1636 $oResponsePacket = parent::Send(COption::GetOptionString(
"main",
"controller_url",
""),
$page);
1637 if ($oResponsePacket ===
false)
1668 "Request received from controller",
1669 "check" => ($this->
Check() ?
'checked' :
'check failed'),
1676 $member_id = COption::GetOptionString(
"main",
"controller_member_id",
"");
1680 $GLOBALS[
"APPLICATION"]->ThrowException($e);
1685 $member_secret_id = COption::GetOptionString(
"main",
"controller_member_secret_id",
"");
1686 $this->secret_id = $member_secret_id;
1688 return parent::Check();
1708 include_once(__DIR__ .
'/tar_gz.php');
1710 if (file_exists(
$path))
1718 $rem_path = dirname(
$path);
1720 if ($ob->Add([
$path],
false, $rem_path))
1737 if (file_put_contents($arcname, $strfile) !==
false)
1739 include_once(__DIR__ .
'/tar_gz.php');
1743 $res = $ob->extractFiles(
$_SERVER[
'DOCUMENT_ROOT'] . $path_to);
1747 $arErrors = $ob->GetErrors();
1748 if (!empty($arErrors))
1751 foreach ($arErrors as
$error)
unpackParameters($parameters, $encoding='')
_decode(&$arParameters, $encodingFrom, $encodingTo)
GetResponseBody($log=false)
_InitFromRequest($oPacket, $arExclude=['operation', 'arParameters'])
static getString($length, $caseSensitive=false)
static convertEncoding($data, $charsetFrom, $charsetTo)
static GetIDByCode($code)
static GetModulePermission($group_id, $module_id)
static SetSubordinateGroups($grId, $arSubGroups=false)
static SetModulePermission($group_id, $module_id, $permission)
static GetSubordinateGroups($grId)
static GetOptionString($module_id, $name, $def="", $site=false)
static Update($arFields, $ID)
static SetOperations($ID, $arr, $bOpNames=false)
static Delete($ID, $protect=true)
static GetList($arOrder=['MODULE_ID'=> 'asc', 'LETTER'=> 'asc'], $arFilter=[])
static OnExternalLogin(&$arParams)
static SetGroupSecurity($group_code, $arPermissions, $arSubGroups=false)
static JoinToControllerEx($controller_url, $controller_login, $controller_password, $arMemberParams=[])
static SetBackup($arBackup)
static OnAfterUserLogin($arParams)
static JoinToController($controller_url, $controller_login, $controller_password, $site_url=false, $controller_group=false, $site_name=false, $bSharedKernel=false)
static SetModules($arModules)
static SetTaskSecurity($task_id, $module_id, $arOperations, $letter='')
static RemoveFromController($controller_login, $controller_password)
static GetInstalledOptions($module_id)
static UpdateUser($arFields=[], $FORMAT_DATE=false)
static OnExternalAuthList()
static InitTicket($controller_url)
static GetBackup($bRefresh=false)
static RestoreGroupSecurity($group_code, $arModules)
static ExecuteEvent($eventName, $arParams=[])
static RunCommand($command, $oRequest, $oResponse)
static SetOptionString($module_id, $option_id, $value)
static IsInCommonKernel()
static SendMessage($name, $status='Y', $description='')
static PrepareUserInfo($arUser)
static RestoreSecurity($arExcludeGroups=[])
static AuthorizeUser($arParams=[])
static AuthorizeAdmin($arParams=[])
static RestoreOption($module_id, $option_id)
Send($url="", $page="/bitrix/admin/controller_ws.php")
__construct($operation, $arParameters=[])
SendWithCheck($page="/bitrix/admin/controller_ws.php")
__construct($oPacket=false)
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$_SERVER["DOCUMENT_ROOT"]
CheckSerializedData($str, $max_depth=200)
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
LocalRedirect($url, $skip_security_check=false, $status="302 Found")
$GLOBALS['____1690880296']
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key