16 марта 2016, 23:25

Как я встраивал reCAPTCHA v2 в свой антикварный бложек

Темы: javascript, ruby, rails, ruby1.9, future, elk, antique

Предпосылки

Мы живём в интересное время. Когда я увлекался довольно серьёзно руби он рэйлз, лет шесть-семь назад, была версия руби 1.8.7 и версия рельсов 2.3. Все неспешно переходили на руби 1.9.1 и рэйлз 3.0. Сегодня, пять лет спустя, стабильная версия руби — 2.2.3, а про рельсы уже агитируют переходить на 5.0, хоть и бета. Когда же я начал свой первый проект на ноде — три года назад, — версия node.js была что-то типа 0.22. А сегодня уже 5.8!

А недавно имел разговор с читателем на тему того, что стремительно возросшая популярность джаваскрипта создаёт ситуацию, при которой, уходя в отпуск, программисты рискуют вернуться с устаревшими навыками, потому что за две недели появились три новых прекрасный фреймворка, а два не менее прекрасных — умерли.

Антиквариат

До последнего перерыва, рассказ о начинке моего блога мог бы легко заполнить парочку в меру интересных статей, а сейчас это представляет интерес только для археологов. Что касается движков для блога вообще, то про когда-то популярный ЖЖ все уже забыли. Стремительно набирает моду вести канал в Телеграме. А товарищ мой — Илья — в когда-то давно в качестве платформы для блога сделал самый правильный, как мне сегодня кажется, выбор — генератор статического сайта.

Что ещё? Технология оупенайди, на которой у меня были прикручены комментарии, умерла. Рекапча, которую я прикручивал в комментарии Ире, была куплена Гуглом и ещё пока жива, но уже выпустили вторую версию, и я боюсь, как бы они таки не закрыли первую, как Гугл это умеет делать. Но даже тогда джем, который я использовал, чтобы встроить капчу, волшебным образом исчез из библиотек, и мне пришлось таскать его с собой в папочке vendor. Про вёрстку я даже не говорю.

В общем, для того, чтобы взять и переписать проект с нуля, много ума не нужно. Но сегодня мне интересно покопаться в старье и посмотреть, что ещё из него можно выжать. Поэтому, если вы любите свои старые поделки так, как люблю их я, то очень важно овладеть навыком написания обезьяньих заплаток (monkey patch).

DIY

reCAPTCHA v2

Когда я решил использовать новую капчу, я даже не стал искать библиотек. С вероятностью 80% они не заработают на моей старинной системе, и с вероятностью 30% перестанут поддерживаться очень скоро. Просто читаем документацию, встраиваем капчу в форму отправки комментария, а на сервере прямо в методе создания комментария пишем, например:

url = URI.parse('https://www.google.com/recaptcha/api/siteverify')
req = Net::HTTP::Post.new(url.path)
req.set_form_data 'secret' => 'SECRET_KEY',
                  'response' => params['g-recaptcha-response'],
                  'remoteip' => request.remote_ip
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = JSON.parse(https.start { |p| p.request req }.body)
if res['success'] ...

И далее с ответом можно делать всё, что угодно. В тонкости уже не вдаюсь, потому что, как может увидеть дорогой читатель, даже хэши у меня написаны с ракетами, а не по-современному с двоеточиями.

Да, это противоречит паттерну MVC, да, это противоречит ООП. Но посмотрите на саму капчу: она не учитывает положения формы на странице, когда открывает своё окно. А также не работает задокументированная фича data-tabindex. Полно хороших библиотек и поделок увядают так и не исправив своих ошибок. Такова реальность программиста сегодня. Красивая библиотека для встраивания в проект на рельсах не сделает эту капчу лучше, но исправлять описанные выше ошибки можно тоже обезьяньими заплатками.

В общем, есть, конечно, определённый кайф в том, чтобы сделать всё максимально по науке и близко к идеалу, но не менее приятно пользоваться смекалкой и собрать что-нибудь из грязи и палок. Безусловно, есть ещё и очень приятное чувство освобождения в том, чтобы разрешить себе делать что-то не идеально.

Комментарии 0 >>

03 февраля 2016, 22:42

Вот это я называю «перерыв»!

Темы: future

Что было

Приветствую тебя, дорогой читатель! Каким-то образом ты остался подписан на этот блог или зашёл на него по неясной причине — это хорошо! В этом году я решил возобновить ведение этого самого блога. Посмотрим, что из этого выйдет.

Было странно копаться во внутренностях этого сайта снова. Все технологии устарели, версии не поддерживаются и тому подобное. Последний комментарий оставил мне читатель в 2014 году на статью 2009 года про тестирование оупенайди, авторизовавшись с помощью оупенайди, о том, что технология оупенайди мертва. Пришлось прикрутить на её место новую рекапчу от Гугла. Напишу как-нибудь об этом. Почувствовал себя, конечно, археологом.

Время, когда я начал вести этот блог, было временем увлечения руби он рэйлз. Было сделано много проектов. Потом влюблённость прошла, а с ней прошло о большое количество нового и интересного, о чём бы я мог здесь писать. Я стал немного залезать в другие области, но общей концепции так и не находилось. Даже прекрасные иллюстрации не спасли от наступившего затишья.

Wakeup

Что будет

Сейчас я не могу сказать, что являюсь увлечённым фанатом какого-либо языка, фреймворка или технологии, как не могу сказать, что являюсь профессионалом в оных. Что мне нравится делать — это изучать новые вещи и делать из них прикладные продукты. Прикладные они, конечно, не для всех, а в основном по линии моей работы. Но именно о простых, прикладных и — самое главное — интересных мне вещах из совершенно разных областей программирования я и буду писать. Думаю, получится делать по одной небольшой статье раз в две недели.

Комментарии 0 >>