2 часть, «анализ, получение исходных данных»
1 часть, «как нельзя относиться к корпоративным клиентам»
Всегда начинайте со сбора информации, это важно! Исходные данные определят направление и общую схему работы вашего решения.
Любая задача решается по принципу «от общего к частному».
давайте рассмотрим алгоритм действия администратора:
- регистрация пользователя на сайте graphisoft.com
- подтверждение регистрации в посте пользователя
- авторизация на сайте graphisoft.com под административной учетной записью
- отправка приглашения пользователю
- авторизация на сайте graphisoft.com под пользовательской учетной записью
- подтверждение приглашения
Вроде, не сложно... да и в процессе тестовой регистрации я не заметил использования captcha. Это очень важно, иначе полная автоматизация была бы невозможна.
Какие данные нам нужны, чтобы проделать весь вышеописанный алгоритм?
данные пользователя:
- имя
- фамилия
- пароль (пароль будем генерировать с учетом требований безопасности graphisoft)
данные администратора:
- пароль
Осталось выбрать инструмент для реализации задуманного, я решил остановиться на php, т. к. у нас уже есть некий фундамент автоматизации рутинных процессов, который имеет web интерфейс и уже написан на php. В качестве хранилища информации выступит база MariaDB 10.
Использовать будем curl, это «наше всё» для работы с web серверами.
Начнем аккуратно, тут спешка не нужна, будем максимально повторять действия пользователя:
для начала откроем главную страницу и сохраним все cookies. Они будут, при первом открытии сайта вам сразу предложат принять cookie.
файл для хранения cookie так и назовём «cookie.txt»
очень удобно в браузере копировать все необходимые ключи для curl сразу в буфер обмена
curl 'https://graphisoftid.graphisoft.com/' \
-H 'Connection: keep-alive' \
-H 'sec-ch-ua: " Not;A Brand";v="99", "Opera";v="79", "Chromium";v="93"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Windows"' \
-H 'DNT: 1' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 OPR/79.0.4143.50' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
-H 'Sec-Fetch-Site: none' \
-H 'Sec-Fetch-Mode: navigate' \
-H 'Sec-Fetch-User: ?1' \
-H 'Sec-Fetch-Dest: document' \
-H 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7' \
--compressed
для ленивых предлагаю воспользоваться online сервисом https://incarnate.github.io/curl-to-php/
Сконвертируем ключи командной строки curl в код php и получим следующее:
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://graphisoftid.graphisoft.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
$headers = array();
$headers[] = 'Connection: keep-alive';
$headers[] = 'Sec-Ch-Ua: \" Not;A Brand\";v=\"99\", \"Opera\";v=\"79\", \"Chromium\";v=\"93\"';
$headers[] = 'Sec-Ch-Ua-Mobile: ?0';
$headers[] = 'Sec-Ch-Ua-Platform: \"Windows\"';
$headers[] = 'Dnt: 1';
$headers[] = 'Upgrade-Insecure-Requests: 1';
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 OPR/79.0.4143.50';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
$headers[] = 'Sec-Fetch-Site: none';
$headers[] = 'Sec-Fetch-Mode: navigate';
$headers[] = 'Sec-Fetch-User: ?1';
$headers[] = 'Sec-Fetch-Dest: document';
$headers[] = 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
осталось рассмотреть механизм php работы с почтовым ящиком, нам нужен по сути только механизм IMAP, не буду вас сильно грузить, оставлю готовый скрипт, который открывает почтовый ящик пользователя в режиме readonly и находит последнее письмо (если их несколько) от «register-noreply@graphisoft.com», расшифровывает тело письма и вытаскивает код подтверждения. Результатом работы скрипта будет ссылка на подтверждение регистрации или ничего, если письма не было.
<?php
$auth_mail = 'username@mail.com';
$auth_pass = 'P@$$woRd';
function get_string_between($string, $start, $end){
$string = ' ' . $string;
$ini = strpos($string, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($string, $end, $ini) - $ini;
return substr($string, $ini, $len);
}
$imap = imap_open('{imap.mail.com:993/imap/ssl}INBOX', $auth_mail, $auth_pass, OP_READONLY);
if ($imap) {
$some = imap_search($imap, 'FROM "register-noreply@graphisoft.com"', SE_UID);
if (count($some)>0) {
$mail_body = base64_decode(imap_body($imap, $some[0]));
$key = get_string_between($mail_body,'<span style="font-weight:bold;">','</span>');
echo 'https://graphisoftid.graphisoft.com/#/verification/'.$key."\n";
}
}
?>
Вроде, все попробовали, ко всему готовы... В процессе реализации обязательно что-то всплывёт... но, в целом мы готовы!