Проста і жахлива історія про шифрування

Це буде історія про відкрите ПЗ, довірі та відповідальності.

Задача та її розв'язок
Як-то раз мені знадобилося додати в свій додаток на Ruby симетричне шифрування. Алгоритм AES здався мені хорошим вибором і я вирішив знайти бібліотеку шифрування з підтримкою цього алгоритму. Оскільки я писав на Ruby, зробив те ж саме, що зробив би на моєму місці практично кожен програміст на Ruby — пішов в Google і написав запит «ruby gem aes». Звичайно ж, Google першої рядком запропонував мені gem, називається (ось несподіванка!) — «aes». Він був дуже простий у використанні:

require 'aes'

message = "Super secret message"
key = "password"

encrypted = AES.encrypt(message, key) # RZhMg/RzyTXK4QKOJDhGJg==$BYAvRONIsfKjX+uYiZ8TCsW7C2Ug9fH7cfRG9mbvx9o=
decrypted = AES.decrypt(encrypted, key) # Super secret message


Якщо ви при розшифровці використовували невірний пароль, gem викидав помилку:
decrypted = AES.decrypt(encrypted, "Some other password") #=> aes.rb:76:in `final': bad decrypt (OpenSSL::Cipher::CipherError)


Ну, відмінно. Що ж могло піти не так?

Читати далі →

Проста і жахлива історія про шифрування

Це буде історія про відкрите ПЗ, довірі та відповідальності.

Задача та її розв'язок
Як-то раз мені знадобилося додати в свій додаток на Ruby симетричне шифрування. Алгоритм AES здався мені хорошим вибором і я вирішив знайти бібліотеку шифрування з підтримкою цього алгоритму. Оскільки я писав на Ruby, зробив те ж саме, що зробив би на моєму місці практично кожен програміст на Ruby — пішов в Google і написав запит «ruby gem aes». Звичайно ж, Google першої рядком запропонував мені gem, називається (ось несподіванка!) — «aes». Він був дуже простий у використанні:

require 'aes'

message = "Super secret message"
key = "password"

encrypted = AES.encrypt(message, key) # RZhMg/RzyTXK4QKOJDhGJg==$BYAvRONIsfKjX+uYiZ8TCsW7C2Ug9fH7cfRG9mbvx9o=
decrypted = AES.decrypt(encrypted, key) # Super secret message


Якщо ви при розшифровці використовували невірний пароль, gem викидав помилку:
decrypted = AES.decrypt(encrypted, "Some other password") #=> aes.rb:76:in `final': bad decrypt (OpenSSL::Cipher::CipherError)


Ну, відмінно. Що ж могло піти не так?

Читати далі →

RailsStuff — набір для розробки на рейках

image

Нещодавно ми опублікували гем RailsStuff. Це колекція невеликих модулів і утиліт для виконання різних частих завдань: від організації контролерів і генерації унікальних випадкових значень до парсера параметрів і помічники перекладів. У цьому пості я розповім про деякі з них:

  • ResourcesController — полегшена і сучасна версія InheritedResources;
  • Трекер типів;
  • Генератор унікальних випадкових значень;
  • Хэлперы переказів і основних посилань.

Читати далі →

Пишемо Telegram бота на Ruby в 10 рядків


Після випуску Telegram Bot Platform багато замислювалися про написання свого бота. Цей пост описує мінімальні кроки, необхідні для написання власного бота на Ruby. Для цього потрібно лише акаунт у Telegram і машина з встановленим Ruby на ній.

Читати далі →

TheRole 3. Авторизація для Ruby on Rails

TheRole — гем для організації рольового розподілу на RoR сайтіз панеллю управління

TheRole

Gem Version Build Status 

tl;dr
Ще один (1001-ий) спосіб забезпечити розмежування прав у web-додатку. Концепт даного рішення був досить давно реалізований на PHP, і пізніше був переписаний на ruby. Зважаючи на простоту реалізації описаний підхід може бути застосовний в будь-якому MVC фреймворку зразок Rails, Laravel і. т. д.

У тексті я намагався детально розкрити, не тільки технічну інтеграцію рішення в додаток, але і причини пропонованої реалізації.


Читати далі →

Як ми Select2 в хелпер загортали

Думаю, багато хто знайомі з Select2. Все в ньому чудово: і елементи красиві, і кастомізації вагон, і c ajax працює і ще багато багато корисного робити вміє. Тільки проблема одна: ініціалізація досить громіздка (js писати треба, екшн мати для ajax-овою підвантаження результатів і так далі). Це було не дуже зручно і ми вирішили зробити свою надбудову для Select2, в якій і js писати не треба, та і за межі в'юхи йти майже не доведеться. Про те як ми це робили і що вийшло читайте під катом.


Читати далі →

Конфігуруємо Ruby модуль

Я думаю ви знайомі з методом configure, який багато геми надають для конфігурації. Наприклад конфігурація carrierwave:

CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
end

Як реалізувати це у своєму модулі?

Читати далі →

Майже повне керівництво з написання Ruby гемов



Доброго часу доби, user.

Не так давно у мене виникла завдання зробити прототип для одного проекту. У нього входила робота з Facebook Graph API. Поковыряв деякі геми, я зрозумів, що вони для мене не зовсім зручні або ж реалізують потрібний функціонал занадто складно. І тут в моїй голові спливла стара ідея про написання свого гема. Загуглив масу запитів по цій темі, не знайшов повної інформації, тим більше на російськомовних ресурсах. Ось так і виникла ідея цієї статті. Керівництво названо «майже повним», так як тут висвітлені не всі аспекти, а лише ті, які мінімально необхідні і бажані для початку існування продукту вашої уяви. Прошу під кат!

Читати далі →