[Решен] OAuth2

Пт, 14/04/2017 - 13:14

Недавно начал изучать друпал 7 (с связи с желанием заказчика). Успешно создал небольшой сайтик с несколькими самописными модулями - все хорошо. Но есть сторонний сайт, который может предоставить OAuth доступ к моей учетке и есть желание авторизовываться через них. Технически (со стороны стороннего сайта) это возможно.
Скачал кучу модулей связанных с oauth авторизацией и их зависимости. Почитал о самой авторизации...

Теперь не ясно и непонятно, как данные модули связать со своим сайтом. Как подменить страницу логина drupal? Как подменить алгоритмы авторизации со стандартных, на данный? В документации к модулю OAuth2_client (https://www.drupal.org/project/oauth2_client) данный код:

$client_id = 'some_client_id';
  $oauth2_config = array(
    'token_endpoint' => $server_url . '/oauth2/token',
    'auth_flow' => 'user-password',
    'client_id' => $client_id,
    'client_secret' => '12345',
    'username' => $username,
    'password' => $password,
  );
  try {
    $oauth2_client = new OAuth2\Client($oauth2_config, $client_id);
    $access_token = $oauth2_client->getAccessToken();
  }
  catch (Exception $e) {
    drupal_set_message($e->getMessage(), 'error');
  }

И куда его? И что он даст (получает токен и все? Получается - мне надо большую часть процесса реализовывать самому?)
Не откажусь чего-нибудь почитать на тему авторизации OAuth druapl, если что-то такое есть, хотя с английским туго...
Помогите хоть чем-то )).

0 Спасибо

Лучший ответ

Аватар пользователя nobody_21
1 month 2 дня назад nobody_21 #

В общем так. Для работы модуля необходимо:
1. Создать СВОЙ модуль (структуру) в папке sites/all/modules/custom/{module_name_folder}.
2. В файле .module необходимо разместить фнукцию-хук меню, в котором должен быть урл для авторизации для пользователя. Мой выглядит, в итоге, так:

<?php
function auth_menu() {
    
$items = array();

    $items['auth/account'] = array(
        
'title' => 'Account',
        
'description' => '',
        
'page callback' => 'drupal_get_form',
        
'page arguments' => array('auth_account_form'),
        
'type' => MENU_LOCAL_TASK,
        
'weight' => 2,
        
'file' => 'auth.inc',
    );

    return $items;
}
?>

3. Создаем файл из параметра "file" (в моем случае это auth.inc).
4. Внутри файла обязательно должна быть функция из параметра 'page arguments' (в моем случае это auth_account_form). Внутри данного файла необходимо подключить провайдер (использовать тот же oauth2_client). Внутри функции размещаем логику работу с удаленной машиной: проверяем "токен", выводим - либо логин-форму, запрос токенов, авторизация, дальнейшая работа с удаленным сервером и т.д.

П.С. "Программировать" ничего не надо было... Сообщество вопроса не поняло - только язвило. Очень жаль, что сообщество в таком состоянии... Находить темы "без ответа" в гугле для друпала, я смотрю, в норме - открываешь данный сайт с конкретным вопросом, а получаешь отсылку куда-то (обратно в гугл) и так первые 5-10 ссылок в гугле на этом сайте, а вопросам по 5-6 лет. Вы ужасно "работаете" - некоторым лучше вообще молчать, а фразы, типа "я флужу подымаю вашу тему" - только доказывает, что сообщество "не работает" и не может нормально и без нервов обеспечить информацией соискателя, только флуд и остается, а ответ "может быть через недельку кто-то появится" - это показатель(!)...

Всем "спасибо"

0 Спасибо

Комментарии

Аватар пользователя Alamir
1 month 1 неделя назад Alamir #

А что конкретно необходимо после авторизации? Не совсем понимаю задачи.

Вы с помощью логина и пароля получаете токен, и вот уже с помощью этого токена в дальнейшем и работаете со стороннем сервером, например передаете с помощью curl что ли бо. В общем работаете со сторонним апи.

Про модуль не скажу, не пробовал.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

Мне нужно именно авторизоваться... Научиться пользоваться OAuth 2.0 (научиться его прикручивать) в друпале 7. На самом деле для работы с АПИ у меня ВСЕ есть, нет понимания КАК прикрутить саму авторизацию К ДРУПАЛУ... По сути, наверное, как получиться токен.

Как я уже написал, я поставил связку модулей, позволяющих "прикрутить" авторизацию. Модуль я "установил", даже указал урл в настройках, но что-то куда-то добавилось? Как мне теперь куда-то это вывести\увидеть? А может вывелось, но я не понял куда? )))

0 Спасибо
Аватар пользователя Studio VIZA
1 month 1 неделя назад Studio VIZA #
nobody_21 написал:
с связи с желанием заказчика

Скажите заказчику, минимум четыре года изучения Друпала, позволят ему с вашей помощью выйти на захватывающие горизонты захвата мирового бизнеса.

По существу. Техническое задание, должно быть составлено опытным специалистом. У вас кто специалист? Заказчик?

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

Честно, спасибо, но о том, что сказать заказчику я подумаю сам.
"Прикрутить авторизацию с помощью OAuth 2.0 через сторонний ресурс к друпал 7" - вот мне все понятно. Но я не на столько крут в друпале. Буду счастлив, если вы мне поможете "по теме" хотя бы ссылками.

0 Спасибо
Аватар пользователя ХулиGUN
1 month 1 неделя назад ХулиGUN #

OAuth это всего лишь протокол авторизации. Не нужно гнать, что нет инфы по нём. Даже на русском полно пруф
Если вам нужны "волшебные слова", чтобы написать в код и получилась магия, то извините. Почитайте про сам протокол, на минуточку он сам по себе никакого отношения к друпалу не имеет. А когда прийдёт понимание протокола поймёте и что делать с токеном)))

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

Речь о том, как эти слова встраиваются в друпал. У него свои методы интеграции. У меня есть реализации под современные фреймворки авторизации в соц.сетях. Но как подменить авторизацию в друпале - мне не ясно. Найдете пруф по друпалу - буду рад получить ссылку. Мне самому удалось найти пока лишь вот это: http://www.angarsky.ru/drupal/integraciya-drupal-dropbox-oauth-api.html

0 Спасибо
Аватар пользователя ХулиGUN
1 month 1 неделя назад ХулиGUN #
nobody_21 написал:
У меня есть реализации под современные фреймворки авторизации в соц.сетях.

Если у Вас есть подобные реализации, то это не должно быть для вас магией. На деле я вижу, что это совсем не так.
OAuth сервер предоставляет только данные о пользователе и занимается идентификаций по токену, который, как правило имеет "время жизни". При регистрации у себя нового пользователя Вы сперва получаете этот самый токен и храните его у себя. По токену получаете данные о пользователе с сервера OAuth (email, full_name, etc) и сохраняете у себя как нового пользователя. Далее при авторизации юзера через Ваш Oauth сервер идёт проверка этого самого токена, который на клиенте как правило хранитьcя в куках. При посещении юзером вашего сайта проверяется сперва ключ сессии... если не проходит, то токен из кук(отправляет запрос на Oauth сервер), если всё ок, то авторизуем юзера по токену, создаём ему сессию и все дела, еси нет, просим ещё раз войти через Oauth используя свои логин и пароль.

И если б у Вас было это понимание, и наличие собственных реализаций под фреймворки, то спрашивали и гуглили бы скорее всего хуки бекенда аутентификации под друпал, а не то, что вы тут понаписали. Все ваши слова говорят о том, что для вас это сплошная магия.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

Вы упорно игнорируете мой вопрос, пытаясь рассказать о oauth2. Вопрос не в том, как он работает, а как ПОДКЛЮЧИТЬ в друпал его (в первой строке моего вопроса сказано, что я - НОВИЧЕК В ДРУПАЛЕ. - Понятия не имею как реализована даже стандартная авторизация). В документации к модулям о которых идет речь этот процесс не описан.

"Спрашивал бы и гуглил бы скорее всего хуки бекенда..." - скорее всего это то, что от ВАС требуется в этой ветке. Спасибо. Если у вас есть более развернутый ответ, более точный - я приму в дар и это.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

"Теперь не ясно и непонятно, как данные модули связать со своим сайтом."
"Как подменить страницу логина drupal?"
"Как подменить алгоритмы авторизации со стандартных, на данный?"

Вот это действительно интересно "в деталях".

0 Спасибо
Аватар пользователя ХулиGUN
1 month 1 неделя назад ХулиGUN #
nobody_21 написал:
в первой строке моего вопроса сказано, что я - НОВИЧЕК В ДРУПАЛЕ

С каких пор это стало оправданием?

nobody_21 написал:
Понятия не имею как реализована даже стандартная авторизация

Да так же как и в большинстве других cms и faramwork`ах для которых у Вас "есть реализации"

nobody_21 написал:
скорее всего это то, что от ВАС требуется в этой ветке

От НАС ничего не требуется. мы никому ничего не должны. А направление в какую сторону копать Вам уже дали. Или Вы хотите, чтобы за Вас сделали Вашу работу, за которую Вы получаете деньги?

nobody_21 написал:
"Теперь не ясно и непонятно, как данные модули связать со своим сайтом."
"Как подменить страницу логина drupal?"
"Как подменить алгоритмы авторизации со стандартных, на данный?"

По Вашей же ссылке всё расписано... Андеад в комментах так же советует не изобретать велосипед, а использовать https://drupal.org/project/oauth‎
Но для того, чтобы использовать какой либо протокол, будь то авторизация или REST API нужно понимать как он работает. А у Вас этого понимания нет. Согласно протоколу OAuth2, изучение которого Вы настоятельно игнорируете форма с логином и паролем не должна обрабатываться на Вашем сайте, ибо таким образом вся секретность личных данных коту под хвост...
Единственное, что можно посоветовать - учить мат. часть. Удачи.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

Хулиган, Чем вы тут занимаетесь? Это форум "Разработка для Drupal \ Программирование" - по всем вопросам всех, при желании, можно отослать в документацию или в матчасть... Но, так как есть данный раздел и он предназначен для помощи (полагаю, это так) - я сюда пишу. А вы занимаетсь флудом и разводите оффтопик.

П.С. Оставьте ссылку на главную страницу документации здесь: убейте смысл форума, возможность понять и обсудить, и главное - докажите, что сообщество поддержки друпала "на дне" (в лучшем случае - документации), а потом уходите - вы все правильно сделаете.

0 Спасибо
Аватар пользователя Studio VIZA
1 month 1 неделя назад Studio VIZA #
nobody_21 написал:
от ВАС требуется в этой ветке

Требуется вашим заказчиком? У кого требуется?

0 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

В общем, все понятно. Спасибо за помощь, сообщество друпал. Требуется "мне" - что - написано в вопросе. Всего лишь хотелось узнать как прикрутить модуль и увидеть его работу. Мо-ло-дцы!

0 Спасибо
Аватар пользователя ХулиGUN
1 month 1 неделя назад ХулиGUN #

Не говорите, что мне делать и я не скажу куда Вам идти)))
Дело в том, что я изначально вижу в чём Ваша проблема. Дальше будет только труднее, если будете полагаться на "магию".
Почему-то больше никто в Вашем топике не отписывается, хотя своим "флудом", как Вы выражаетесь, аппаю Ваш топик.
Дело в том, что кастомный OAuth сервер это не такой уж и распространённый кейс - основная масса ограничивается известными сервисами(google, vk...) для которых существуют отдельные готовые модули. А Вам, скорее всего, придётся писать такой самостоятельно. И как Вы собираетесь это сделать без основных знаний - совершенно непонятно. Кстати, можете посмотреть как устроены готовые модули авторизации под конкретные сервисы и реализовать свой по аналогии.
Сильно не переживайте, к пятнице у народа появится время и непреодолимое желание помогать униженным и обездоленным в ваш топик стянутся самые лучшие помощники. Ждите.
З.Ы. Через недельку загляну полюбоваться бурным обсуждением

2 Спасибо
Аватар пользователя nobody_21
1 month 1 неделя назад nobody_21 #

У меня, как раз стоит сервер авторизации на другой машине (на ларавеле). Мне надо было, чтобы друпал лез на него и авторизовывался. Все, спасибо. С вами все ясно - вы ОЧЕНЬ помогли.

0 Спасибо
Аватар пользователя nobody_21
1 month 2 дня назад nobody_21 #

В общем так. Для работы модуля необходимо:
1. Создать СВОЙ модуль (структуру) в папке sites/all/modules/custom/{module_name_folder}.
2. В файле .module необходимо разместить фнукцию-хук меню, в котором должен быть урл для авторизации для пользователя. Мой выглядит, в итоге, так:

<?php
function auth_menu() {
    
$items = array();

    $items['auth/account'] = array(
        
'title' => 'Account',
        
'description' => '',
        
'page callback' => 'drupal_get_form',
        
'page arguments' => array('auth_account_form'),
        
'type' => MENU_LOCAL_TASK,
        
'weight' => 2,
        
'file' => 'auth.inc',
    );

    return $items;
}
?>

3. Создаем файл из параметра "file" (в моем случае это auth.inc).
4. Внутри файла обязательно должна быть функция из параметра 'page arguments' (в моем случае это auth_account_form). Внутри данного файла необходимо подключить провайдер (использовать тот же oauth2_client). Внутри функции размещаем логику работу с удаленной машиной: проверяем "токен", выводим - либо логин-форму, запрос токенов, авторизация, дальнейшая работа с удаленным сервером и т.д.

П.С. "Программировать" ничего не надо было... Сообщество вопроса не поняло - только язвило. Очень жаль, что сообщество в таком состоянии... Находить темы "без ответа" в гугле для друпала, я смотрю, в норме - открываешь данный сайт с конкретным вопросом, а получаешь отсылку куда-то (обратно в гугл) и так первые 5-10 ссылок в гугле на этом сайте, а вопросам по 5-6 лет. Вы ужасно "работаете" - некоторым лучше вообще молчать, а фразы, типа "я флужу подымаю вашу тему" - только доказывает, что сообщество "не работает" и не может нормально и без нервов обеспечить информацией соискателя, только флуд и остается, а ответ "может быть через недельку кто-то появится" - это показатель(!)...

Всем "спасибо"

0 Спасибо
Аватар пользователя Andruxa
1 month 2 дня назад Andruxa #

Да неужели?
То есть - если в вопросе разобраться, то он решаем? Кто бы мог подумать.

nobody_21 написал:
Сообщество вопроса не поняло - только язвило.

Видимо - вопрос был так сформулирован.

nobody_21 написал:
Очень жаль, что сообщество в таком состоянии... Находить темы "без ответа" в гугле для друпала, я смотрю, в норме - открываешь данный сайт с конкретным вопросом, а получаешь отсылку куда-то (обратно в гугл) и так первые 5-10 ссылок в гугле на этом сайте, а вопросам по 5-6 лет. Вы ужасно "работаете" - некоторым лучше вообще молчать, а фразы, типа "я флужу подымаю вашу тему" - только доказывает, что сообщество "не работает" и не может нормально и без нервов обеспечить информацией соискателя, только флуд и остается, а ответ "может быть через недельку кто-то появится" - это показатель(!)...

0 Спасибо
Аватар пользователя nobody_21
1 month 2 дня назад nobody_21 #

То есть, вы действительно допускаете, что есть вопросы, которые НЕ РЕШАЕМЫ? Я ничего не говорил об этом. Всего лишь сообщил, что не знаю, как это реализовывается в друпал.

"Вопрос решаем - решайте!" - смешная помощь. К сведению, я это итак знал, поэтому, чтобы не изобретать велосипед обратился сюда... Не уверен, что вопрос решил правильно, поэтому описал свой велосипед (мб, не верно что-то?).

Вопрос не верно сформулирован? А пишут так, буд-то поняли, посчитали "легкой" (или о том, что надо почитать об протоколах), обосрали и ушли...

П.С. Разобраться удалось путем скачивания подобных модулей и разбора их структуры. Мануалы и документация по данным вопросам оказались бесполезны или не найдены (в основном, как раз, темы на форумах - без ответа). А вопрос действительно "банальный", а в сообществе нет ни рабочего модуля до сих пор, ни документации, ни каких-либо мануалов - вы ЭТО называете "решаем"? Я останусь при своем мнении о сообществе друпал просто...

0 Спасибо
Аватар пользователя fairrandir
1 month 2 дня назад fairrandir #

Не знаю как кто, а я так и не понял, ни вашего вопроса, ни вашего решения, ни взаимосвязи между ними. Но вообще, очень похоже, что вам ответили в первом же комментарии.

0 Спасибо
Аватар пользователя nobody_21
1 month 2 дня назад nobody_21 #

Миллиард раз написал, и некоторым людям конкретно, что необходимо установить модуль в ДРУПАЛ. Почему мне пишут об OAuth я тоже не понял и не спрашивал об этом. В любом случае, некоторые вопросы внутри сообщество не ясно как формулировать, не являясь частым гостем... Для этого и существуют данные разделы, а не документация, в которой очень все "сухо" и "конкретно". А-то вас послушать, то помощью нужно пользоваться только после "4х лет обучения друпал" - это ппц совет, с тем же успехом можно посылать учить ПХП (если бы это был раздел "программирование на пхп", да?).

Если вопрос не ясен - то это тоже не повод посылать читать что-либо. Помощи я тут прошу у людей. Не можешь \ не понял - ну так спроси или молча иди в лес. У меня после дискуссии сложилось впечатление, что меня поняли, но ответить "не захотели".

0 Спасибо
Аватар пользователя fairrandir
1 month 2 дня назад fairrandir #

Смотрите, ваш вопрос "как сделать OAuth". В дискуссии он изменился на "как изменить механизм авторизации в Друпале". Ваш "ответ" - как добавить свой путь в роутинг. Я лично до сих пор не знаю, чего вы хотели и что в итоге получили.

> Если вопрос не ясен - то это тоже не повод посылать читать что-либо
Вполне себе повод. Правильно сформулированный вопрос - залог правильного ответа. Неправильный вопрос - отправка уточнять формулировки.

0 Спасибо
Аватар пользователя nobody_21
1 month 2 дня назад nobody_21 #

Мне пришлось, в итоге, написать СВОЙ модуль, который универсально работает с любой АПИ, для этого достаточно его установить и настроить урлы в админке. В чем проблема у сообщества Друпал? Та "фигня" недописанная умеющая посылать курл-запросы является библиотекой СПОСОБНОЙ реализовать протокол... Решение - писать своё? Вы считаете, что это "решаемо"? Я нет... Хоть бы дописали модуль или документацию к нему.

Правильным ответом было бы "нет, друпал и данный модуль (в частности) не очень хорошо с этим работает, он всего этого не умеет - надо писать своё" (один человек написал, что НАВЕРНОЕ придется писать СВОЙ - то есть, НЕ ЗНАЕТ точно). Потому что так это и есть... А все "посылы" в документацию... - там этого ТОЖЕ нет... В гугл посылать? Ну так "друпал не имеет поддержки такого протокола" - и не надо после этих слов на меня обижаться, если так оно и есть - никто в этой теме меня не переубедил и чего вы все "радуетесь" отсталости данной ЦМС - я хз.

Где фраза "как сделать OAUTH?".
«Теперь не ясно и непонятно, как данные модули связать со своим сайтом. Как подменить страницу логина drupal? Как подменить алгоритмы авторизации со стандартных, на данный? В документации к модулю OAuth2_client (https://www.drupal.org/project/oauth2_client) данный код:

$client_id = 'some_client_id';
$oauth2_config = array(
'token_endpoint' => $server_url . '/oauth2/token',
'auth_flow' => 'user-password',
'client_id' => $client_id,
'client_secret' => '12345',
'username' => $username,
'password' => $password,
);
try {
$oauth2_client = new OAuth2\Client($oauth2_config, $client_id);
$access_token = $oauth2_client->getAccessToken();
}
catch (Exception $e) {
drupal_set_message($e->getMessage(), 'error');
}
И куда его?»

Он не менялся, все эти вопросы присутствуют именно в треде. И все это - часть работы с 1 модулем (потому что всего этого в нем НЕТ, а для работы это НЕОБХОДИМО именно по описанию протокола). Вы-то понимаете о чем речь? Все эти вопросы были заданы, потому что они требуют подключения модуля к друпалу и у меня этих знаний НЕТ. Я написал свой ответ с учетом ВСЕХ вопросов (своих, между прочим) - неужели это так сложно выглядит?

Простите, если что не так сказал, где-то неаккуратно выразился. Поверьте не хотел. Считаю диалог оконченным. Результат достигнут, "выводы" сделаны.

0 Спасибо
Аватар пользователя bumble
1 month 1 день назад bumble #
nobody_21 написал:
Вы ужасно "работаете"

Не "Вы", а МЫ!

nobody_21 написал:
а в сообществе нет ни рабочего модуля до сих пор, ни документации, ни каких-либо мануалов

Все что сообществу нужно - есть.

То чего нет - сообщество делает.

Считаете что чего-то сообществу не хватает - сделайте, напишите модули, документацию и мануалы.

nobody_21 написал:
можно посылать учить ПХП (если бы это был раздел "программирование на пхп", да?)

Да.

nobody_21 написал:
Не можешь \ не понял - ну так спроси или молча иди в лес.

Грубо...
Это форум, не вопросо-ответ, не мануало-сборка, и тем более не тех. поддержка в которой создают иллюзию пляски под дудку клиента.

Как бы кому не хотелось все это видеть - это так.

1 Спасибо
Аватар пользователя Studio VIZA
1 month 1 день назад Studio VIZA #
nobody_21 написал:
У меня после дискуссии сложилось впечатление, что меня поняли, но ответить "не захотели".

Это наше право.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 день назад nobody_21 #

Ахахаха, серьезно? Это откуда такое право? Еще раз спросить: вы ЗАЧЕМ мне это пишите все? Какой смысл в ваших словах? Чем кому вы помогли здесь? Почему вы оправдываетесь передо мной? Мне плевать какие у вас права - я задал вопрос, которого вы не поняли \ не захотели помочь, срать на меня сверху это вам права не давало... До свидания.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 день назад nobody_21 #

>Грубо...
>Это форум, не вопросо-ответ, не мануало-сборка, и тем более не тех. поддержка в которой создают иллюзию пляски под дудку клиента.
>Как бы кому не хотелось все это видеть - это так.

Ахахаха... И где мануало-сборка? Заметил полное отсутствие оного, где-либо )))
Клиент? Слово клиент тут относится лишь к друпалу. Вы не относитель к друпалу? Ахахаха... Под какую дудку вы плясали тут?
Цирк. И я об этом как раз )).

Дадада... Новичку на форуме предлагают сделать модуль в такой форме. Ахахаха.... Я-то сделал, но теперь никому не дам.

> То чего нет - сообщество делает.
Уже поменялось на столько много, что даже смешно это слышать. Некоторые модули скоро в школу пойдут будучи не доделанными с 2011-2012... "Технологии впереди" - не, не слышал. Ахахаха...

Да, удачи, воспади. Чо обижаться, если у ВАС (не у меня) все стоит на том же уровне, что и в 2012 году? Мне все равно, не надо оправдывать, ага?

0 Спасибо
Аватар пользователя ХулиGUN
1 month 1 день назад ХулиGUN #
nobody_21 написал:
Мне плевать какие у вас права

Аналогично)))

nobody_21 написал:
Новичку на форуме предлагают сделать модуль в такой форме. Ахахаха.... Я-то сделал, но теперь никому не дам.

Чем теперь Вы отличаетесь от остальных, которые тоже "не дали" Вам решения?
И Вы ещё смеете осуждать сообщество за то, как сами поступаете? Смешно.

З.Ы. За написанный вами модуль можете смело сверлить дырку для ордена

0 Спасибо
Аватар пользователя fairrandir
1 month 1 день назад fairrandir #
nobody_21 написал:
Клиент? Слово клиент тут относится лишь к друпалу. Вы не относитель к друпалу? Ахахаха... Под какую дудку вы плясали тут?

Опять же, поработайте пожалуйста над формулировками. Ваш стиль изложения сложнопонятен.

0 Спасибо
Аватар пользователя nobody_21
1 month 1 день назад nobody_21 #

Спасибо, видать это факт. Приму к сведению.

0 Спасибо