OTP тестированию не помеха
Важность unit и интеграционных тестов несомненна для более-менее опытного разработчика. В этом посте поделюсь как решить следующую задачу:
Дано:
1) endpoint api для которого нужене OTP (one time password)
2) QR код экспорта из google authenticator
Найти: автоматически получать OTP и отправлять его endpoint-у
Решение:
1) Сканируем QR код любым сканером QR кодов, получаем что-то вроде 'otpauth-migration://offline?data=CjIKFEuKYhr.....' , обозначим это за url.
2) Этот url надо раскодировать, есть несколько вариантов как это сделать привожу довольно просто (минимум телодвижений) https://github.com/qistoph/otp_export . Клонируем и выполняем команду ./parse.py 'url'
вывод будет содержать secret это Base32 строчка-ключ обозначим за secret.
3) Осталось выбрать библиотеку для вашего языка реализующую RFC4226/RFC6238 и с помощью sercret и текущего времени в мс. получить OTP
Привожу пример на dart :
Пакет https://pub.dev/packages/otp
Вызов: final code = OTP.generateTOTPCodeString(secret, date.millisecondsSinceEpoch,algorithm: Algorithm.SHA1, isGoogle: true);