94 lines
3.7 KiB
PHP
94 lines
3.7 KiB
PHP
|
|
<?php
|
|||
|
|
namespace Conmed\Authserver;
|
|||
|
|
|
|||
|
|
use Bitrix\Main\Config\Option;
|
|||
|
|
use Bitrix\Main\Context;
|
|||
|
|
use Bitrix\Main\Type\DateTime;
|
|||
|
|
use Bitrix\Highloadblock\HighloadBlockTable;
|
|||
|
|
use Bitrix\Main\Loader;
|
|||
|
|
|
|||
|
|
trait RegistrationTrait {
|
|||
|
|
public static function registerAction() {
|
|||
|
|
header('Content-Type: application/json');
|
|||
|
|
$req = Context::getCurrent()->getRequest();
|
|||
|
|
|
|||
|
|
// 1. Проверка прав клиента
|
|||
|
|
if(!self::checkClient($req->get("client_id"), $req->get("client_secret"))) {
|
|||
|
|
die(json_encode(['error'=>'forbidden']));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$email = trim($req->getPost("email"));
|
|||
|
|
|
|||
|
|
// 2. Валидация входных данных
|
|||
|
|
if(!check_email($email)) {
|
|||
|
|
die(json_encode(['status'=>'error','message'=>'Некорректный Email']));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Проверка на существование
|
|||
|
|
$by = "ID"; $order = "ASC";
|
|||
|
|
if(\CUser::GetList($by, $order, ["=EMAIL" => $email])->Fetch()) {
|
|||
|
|
die(json_encode(['status'=>'error','message'=>'Пользователь с таким Email уже существует']));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$pass = $req->getPost("password");
|
|||
|
|
$v = self::validatePassword($pass);
|
|||
|
|
if($v !== true) {
|
|||
|
|
die(json_encode(['status'=>'error','message'=>$v]));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3. Подготовка групп (специальности)
|
|||
|
|
$arGroups = [2, 3, 4]; // Базовые группы
|
|||
|
|
$specCode = $req->getPost("specialty");
|
|||
|
|
|
|||
|
|
if (!empty($specCode)) {
|
|||
|
|
$rsGroup = \Bitrix\Main\GroupTable::getList([
|
|||
|
|
'filter' => ['=STRING_ID' => $specCode, '=ACTIVE' => 'Y'],
|
|||
|
|
'select' => ['ID']
|
|||
|
|
])->fetch();
|
|||
|
|
|
|||
|
|
if ($rsGroup) {
|
|||
|
|
$arGroups[] = $rsGroup['ID'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 4. Создание пользователя
|
|||
|
|
$user = new \CUser;
|
|||
|
|
$arFields = [
|
|||
|
|
"LOGIN" => $email,
|
|||
|
|
"EMAIL" => $email,
|
|||
|
|
"NAME" => $req->getPost("name"),
|
|||
|
|
"LAST_NAME" => $req->getPost("last_name"),
|
|||
|
|
"SECOND_NAME" => $req->getPost("second_name"),
|
|||
|
|
//"PERSONAL_PHONE" => $req->getPost("phone"), // Записываем телефон
|
|||
|
|
"PERSONAL_MOBILE" => $req->getPost("phone"), // Записываем телефон
|
|||
|
|
|
|||
|
|
"PERSONAL_CITY" => $req->getPost("city"), // Записываем город
|
|||
|
|
"PERSONAL_COUNTRY" => $req->getPost("country"), // ФИКС: Добавлена страна
|
|||
|
|
"PASSWORD" => $pass,
|
|||
|
|
"CONFIRM_PASSWORD" => $pass,
|
|||
|
|
"ACTIVE" => "Y",
|
|||
|
|
"GROUP_ID" => $arGroups
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$uid = $user->Add($arFields);
|
|||
|
|
|
|||
|
|
if($uid) {
|
|||
|
|
// Генерируем код для мгновенного входа после регистрации
|
|||
|
|
$code = bin2hex(random_bytes(16));
|
|||
|
|
$dcCodes = self::getHlEntity('sso_codes');
|
|||
|
|
$dcCodes::add([
|
|||
|
|
'UF_CODE' => $code,
|
|||
|
|
'UF_CLIENT_ID' => $req->get("client_id"),
|
|||
|
|
'UF_USER_ID' => $uid,
|
|||
|
|
'UF_EXPIRES' => DateTime::createFromTimestamp(time() + 60)
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
self::audit("USER_REGISTERED", $req->get("client_id"), $uid, "Email: ".$email);
|
|||
|
|
|
|||
|
|
//echo json_encode(['status' => 'success', 'code' => $code]);
|
|||
|
|
echo json_encode(['status' => 'success', 'code' => $code, 'user_id' => $uid]);
|
|||
|
|
} else {
|
|||
|
|
echo json_encode(['status' => 'error', 'message' => strip_tags($user->LAST_ERROR)]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|