# Web Basic Модуль Занятие 1
## Введение в Web-технологии
### Практическая работа 1
В этой работе установим Docker и загрузим контейнер, который будет использоваться в дальнейших работах. Также проверим работу контейнера и вместе с этим познакомимся с запросами к контейнеру
1. Установка Linux Ubuntu

2. Установка Docker.
Сначала сделаем обновление компонентов Linux
```
sudo apt update && sudo apt upgrade
```
Т.к. в репозиториях Ubuntu Docker может быть не самой свежей версии, будем обновляться из репозитория Docker. Для этого нужно будет добавить репозиторий в менеджер пакетов и загрузить ключ, использующийся для гарантирования установки рабочих программ.
Сначала установим нужные пакеты для работы apt с ключами по HTTPS
```
sudo apt install apt-transport-https ca-certificates curl software-properties-common
```

Далее загрузим ключ для репозитория Docker
```
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```

Теперь добавим репозиторий Docker в список репозиториев apt
```
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
```

Проверим, что установка Docker будет происходить не из репозитория Ubuntu
```
apt-cache policy docker-ce
```

Кандидаты для установки предоставляются репозиторием Docker
Теперь можно сделать обновление с последующей установкой Docker
```
sudo apt update
sudo apt install docker-ce
```


Обычно после установки демон-сервис Docker запускается автоматически, удостоверимся в этом
```
sudo systemctl status docker
```

Теперь нам нужно поставить web-приложение, которое используется для обучения специалиство по защите от атак на уровне Web (ссылка: https://hub.docker.com/r/bkimminich/juice-shop, на веб-странице будет команда, которую нужно использовать для установки приложения)


Теперь запустим приложение
```
sudo docker run --rm -p 3000:3000 bkimminich/juice-shop
```

После запуска мы можем обратится к запущенному приложению как из браузера внутри операционной системы (путь localhost:3000), так и в других системах, находящихся в той же сети, что и ubuntu (по IP-адресу linux-а)

3. Изучение запросов к приложению
Запросы к приложению от бразуера можем рассмотреть с помощью панели разработчика (в большинстве случаев открывается через нажатие F12). Во вкладке Network увидим список всех запросов, которые делает браузер для работы с приложением, запущенным в Docker (по большей части, это GET запросы на получение контента страницы)

Попробуем войти в приложение с какими-нибудь данными

В панели разработчика отразится POST запрос на отправку сообщений на сервер. Справа увидим ошибку 401 Unauthorized, что значит, что мы не прошли авторизацию на сервере

Отпроем вкладку Response и увидим чуть более развернутое представление о возникшей ошибке.
4. Запросы к серверу через curl
Запросы к серверам можно отправлять не только с помощью бразуера, но также с помощью консольных утилит
Отправим запросы с помощью curl в Linux
```
curl "http://localhost:3000"
```

Запрос, состоящий только из адреса сервера выдаст начальную страницу приложения
Передача агрумента -I может быть использована для того, чтобы посмотреть, какие аргументы могут использоваться в запросах.
```
curl -I "http://localhost:3000"
```

Попробуем сформировать POST запрос на отправку
```
curl -X POST http://localhost:3000/rest/user/login -H 'Content-Type:application/json' -d '{"email":"any@mail.ru","password":"anyany"}'
```
* http://localhost:3000/rest/user/login - cюда отправлялся запрос в брузере, когда мы совершали вход в приложение
* Content-Type:application/json - указывает вид, в котором мы отправляем запрос (json-формат)
Если мы еще не регистрировались в приложении, то получим ошибку о неправильных данных для входа

С совершенной предрегистрацией получим JSON ответ с токеном аутентификации

5. Запросы к серверу через PowerShell
Совершим обращение через PowerShell
Сначала узнаем IP-адрес Ubuntu

Теперь мы знаем, по какому IP-адресу обращаться
```
wget -Uri 192.168.56.129:3000
```

Получим стандартный ответ от сервера с начальной страницей приложения
6. Утилита JQ
Теперь попробуем представить получаемый curl контент в более удобочитаемом виде. Для этого потребуется поставить утилиту jq
```
sudo apt install jq
```

Если передадим вывод команды обращения в jq, получим гораздо более удобочитаемый вывод
