К задаче приложен архив, в котором код, который нужно поправить. В скрипте поднят http сервер на порту, и реализованы несколько эндпоинтов. Требуется доработка эндпоинта POST "/rust" и добавление еще нового эндпоинта GET "/get-resource".
1. Эндпоинт POST "/rust" должен принимать следующие параметры
- method, метод выполняемого запроса (обязательный)
- host, на который делать запрос (обязательный)
- uri, на который делать запрос (обязательный)
- headers, в котором должны быть перечислены заголовки, с которыми должен быть выполнен запрос (обязательный)
- body, пейлоад запроса (опциональный)
- proxy адрес и авторизация, с которыми нужно выполнять запрос (опциональный)
2. Под капотом, при выполнении запроса как в приведенном примере должен быть boring ssl (функция connect_and_send_request).
3. Эндпоинт POST "/rust" должен работать в режиме проксирования, то есть отдавать ответ в том же виде (целиком response, в том числе заголовки и т.д.), в котором ответ был получен от сервера, на который выполнялся запрос. Таким образом, через данный эндпоинт могут запрашиваться как страница, так и картинки/видео. При любом ответе от сервера 200, 403, 500 и т.д. ответ должен быть отдан в том же виде.
4. Добавить эндпоинт GET "/get-resource", который будет в query-параметре url принимать зашифрованный урл, на который нужно сделать запрос таким образом как это сделано в п. 3 в эндпоинте /rust "/get-resource?url=1ZoejXNevoFkrZxQc%2BwVqupO64ieuTwjLCMtDfhXSlp%2FLYawhPZ8UhSAy6zkftdXosHLGJ7y MGkpxdyWXe7saQ%3D%3D". При этом заголовки запроса прокидываются те, которые пришли при запросе эндпоинта "/get-resource", а ответ отдается в исходном виде.
Шифруется url с помощью AES шифрования так, как это сделано в файле "crypto.js". Рассмотрим пример, "
traveltimes.ru/wp-content...". После шифрования c key="coVSd4QKDT4aX5XX4eGd424Yfc7oqoVx" и iv="Wu2qgqbpdhodkuwU4bdcM7yGEaejFG6Q" получаем "1ZoejXNevoFkrZxQc+wVqupO64ieuTwjLCMtDfhXSlp/LYawhPZ8UhSAy6zkftdXosHLGJ7yMGkpxdyWXe7saQ==" . Далее делаем encodeURIComponent и получаем значение "1ZoejXNevoFkrZxQc%2BwVqupO64ieuTwjLCMtDfhXSlp%2FLYawhPZ8UhSAy6zkftdXosHLGJ7yMGkpxdyWXe7saQ%3D% 3D", которое и передается в качестве query-параметра. Для расшифровки url параметра нужно захардкодить key и iv. Для понимания, на php расшифровка делается с помощью openssl_decrypt на основе алгоритма AES-128-CBC, нужно найти что-то аналогичное на rust.