Пример использования валидирующих EAI и IDN библиотек в коде Javascript
Пример проекта для бэкенда на Javascript
Примеры кода на Java доступны по ссылке.
Примеры кода на Javascript для универсального принятия
В этой папке вы найдете примеры кода для исполнения правил универсального принятия (UA) для библиотек javascript.
Подготовка среды
Убедитесь, что у вас установлен NodeJS. Код разработан для версии NodeJS >= 17.5.
Бэкенд на Javascript для демо-сайта с поддержкой UA
Бэкенд использует веб-фреймворк Express.
Подготовка к работе
Установите зависимости с помощью команды npm:
/javascript $ npm install
Начните набирать код бэкенда: npm start
Создайте докерный образ
Чтобы создать докерный образ для бэкенда, выполните команду:
$ docker build . -t ua-backend-javascript
Запустите бэкенд и прослушайте порт 3000, он выполнит следующую команду:
$ docker run -d --name ua-javascript -p 3000:3000 ua-backend-javascript
Примеры кода для IDNA
idna-uts46 (idna_convert.js)
Внедряет протокол IDNA2008 (без BIDI и контекстуальных правил) для конвертирования домена из U-метки в A-метку и обратно. Опция transitional: false позволяет исключить обработку IDNA2003 и использовать только IDNA2008.
Примеры кода для EAI
Используются наиболее простые примеры SMTP без механизмов аутентификации. Вы можете использовать для тестирования SMTP-сервер Mailhog. Основная реализация не поддерживает расширение SMTPUTF8, но его поддерживает этот вариант.
validator.js (eai-validate.js)
validator.js обеспечивает метод isEmail для проверки действительности электронного адреса (в том числе интернационализированного).
nodemailer (eai-smtp.js)
nodemailer автоматически преобразует доменную часть адреса из U-метки в A-метку с помощью punnycode.js. Также происходит внутренняя проверка расширения SMTPUTF8, без открытого API. В примере кода, тем не менее, показано, как извлечь API, так как nodemailer не сообщает об ошибке, если smtp-сервер не поддерживает расширение, см. отчет о баге
Тестирование
Когда сервер запущен (а mock-сервер SMTP вроде mailhog слушает порт 1025), можно делать HTTP-запросы:
curl -X POST localhost:4567/ua/register -H 'Content-Type: application/json' -d '{"email":"test@test.com","username":"test", "libs": {"idna": {"convert": "idna"}, "eai": {"validate": "email-validator", "smtp": "smtplib"}}, "website": "http://test>.com"}'
Результат:
{ "field": { "website": { "messages": [ "[nodejs] parsing URL http://test>.com failed: Invalid URL" ], "error": true, "value": "http://test>.com" }, "email": { "messages": [ "[validator] Email address test@test.com is valid (no DNS verifications)", "[nodemailer] Email has been sent successfully. See it <a href="http://localhost:8025" target="_blank">here</a>!" ], "error": true, "value": "test@test.com" } } }