Прорыв в неведомое. #2
Joe PesciИ помните: когда ваши крылья ослабнут, вера иссякнет и дальше лететь вы уже не сможете, вы на полпути к цели!
Чувствуешь? Это новый этап.
Ты познакомился с JS, попробовал точки останова и понял как должен мыслить в поиске непонятных значений и научился немного ориентироваться в этом непонятном джиесе.
Что дальше?
Все генитальное простынь. Запускай код, написанный на определенном языке там, где он должен работать. Звучит логично =)
Логика
Мы создадим простейшее API, которое будет написано на фреймворке Express, будет обрабатывать запросы к нашему API, а также будет отвечать на данные запросы (ошибкой или готовым значением CipherValue) с логикой получения CipherValue.
Step by Step
Не будем тянуть - скачиваем и устанавливаем NodeJS, а так же IDE для разработки (громко сказано).
- Переходим, скачиваем, устанавливаем - https://nodejs.org/en/ (советую версию 12.18.4)
- Проверяем установку, запускаем CMD и командуем node -v, если в ответ получили установленную версию NodeJS - все сделали верно.
- Переходим, скачиваем, устанавливаем - https://code.visualstudio.com/
- Подготавливаем рабочую область. Создадим на рабочем столе папку OutLookHelperApi
- В Visual Code File - Open Folder и выбираем только что созданную папку на рабочем столе
- Открываем терминал (верхний бар в Visual Studio) Terminal - New Terminal
- В терминале пишем - npm init, теперь можно дать своему пакету название, задать версию, добавить описание и прочее, а можно просто жать ENTER и все останется по дефолту. После совершения этих действий в папке проекта и в IDE появится новый файл - package.json
- Пишем в терминал npm i - устанавливаем текущие зависимости (не обязательно).
- В корне проекта создаем два файла - index.js и cipherLogic.js
- Устанавливаем фреймворк Express, терминал - npm install express --save
Приступаем Кодить!
В левом окне вы видите структуру проекта - index.js и CipherValue.js лежат в корне проекта! Для вашего удобства каждая строчка кода (ну или почти) имеет своё пояснение.
Наш сервер будет запускаться на порту "3000" и будет иметь два обработчика запросов - по слешу "127.0.0.1:3000/" и по "127.0.0.1:3000/getcipher".
В первом случае он выдаст инструкцию по формированию запросов к API (мини-памятка) - /getcipher?password=PasswordToCipher&Key=ParsedKey&randomNum=ParsedrandomNum
Во втором же случае, он ожидает, что получит от вас несколько переменных:
- PasswordToCipher - исходный пароль
- ParsedKey - Key (статичен, как искать поняли в предыдущей статье)
- randomNum - необходимо каждый раз парсить из ответа OutLook
А мы ожидаем, что получим либо ошибку, либо значение CipherValue.

Тут сложнее, функция по генерации хеша пароля тянет за собой кучу других функций. Опять же, понимать какие именно нужны вам - не стоит. Внедрите функции PackageNewPwdOnly, parseRSAKeyFromString, RSAEncrypt (именно эти, потому что мы явно определили в предыдущей статье их значимость) запустите код - он поругается на то, каких еще функций ему не хватает, вот это и добавьте!
Оборачиваем заготовку из всех наших функций в конструкцию вида:
exports.GetCipher = function (password, Key, randomNum) {
//
}
Все, наша функция готова для использования в файле index.js!

Идем в терминал и командуем - node index, если при запуске не возникает ошибок, а в лог приходит сообщение вида - "Joe Pesci listen at localhost:3000!", то значит, что все работает!
Опять же, незачем держать все это в IDE. IDE нужна была для более удобного взаимодействия кода, но теперь мы можем закрыть IDE и запустить наш код из CMD.
Открываем CMD, пишем cd <путь к папке с кодом>, а затем - node index.
В таком случае мы будем тратить еще меньше ресурсов пк:)

Тест
Открываем Fiddler и отправляем запрос к нашему API.
На выходе получаем CipherValue, с которым уже можно работать при регистрации OutLook на запросах.

Надеюсь, что я не написал
Выводы
Изначально Вам покажется, что оно того не стоит - слишком много действий. Но уверяю вас, у вас уже есть заготовка под API, которую можно переписать под другой проект за пару минут, но при этом вы сэкономите деньги и проведете очень быстрый тест!
Надеюсь, я был предельно понятен в своих объяснениях.
Мой канал в Telegram - https://t.me/joebackstage
