Logo

github Download
Integrating Acra with RoR app: short tutorial

Integrating Acra with Ruby on Rails app: short tutorial #

AcraWriter is available in Acra Enterprise Edition only.

This tutorial outlines a typical process of integrating Acra into a Ruby web app (more specifically, an app running on Ruby on Rails framework). It is based on the popular example where many Ruby users start their development learning with – rubygems.org repository.

Here we will integrate AcraWriter to protect the gem descriptions.

This tutorial assumes that you have both AcraServer and PostgreSQL up and running.

You can browse the modified repository here.

Step 1. Clone repo #

git clone https://github.com/rubygems/rubygems.org.git

Step 2. Install AcraWriter #

gem install acrawriter

Step 2.1 Install activerecord_acrawriter #

This gem adds a new type to Active Record for transparent encryption

Note: This only works with Ruby > 2.2 because that is a requirement of Active Record

gem install activerecord_acrawriter

Step 3. Add AcraServer public key to config/database.yml #

development:
  secret_key_base: 01ade4a4dc594f4e2f1711f225adc0ad38b1f4e0b965191a43eea8a658a97d8d5f7a1255791c491f14ca638d4bbc7d82d8990040e266e3d898670605f2e5676f
  acra_public_key: VUVDMgAAAC1w3M1uArNP+AWNhmOi6+bR6SXadlPbAh3XFnBuOnLziPeHn70T # base64

Step 4. Use AcraType on the fields that you want to encrypt #

Encrypt unresolved_name field in Dependency model:

# app/models/dependency.rb
require 'activerecord_acrawriter'
. . .
class Dependency < ActiveRecord::Base
    . . .
    attribute :unresolved_name, AcraType.new
    . . .

Encrypt authors, description, and summary fields in the Version model:

require 'activerecord_acrawriter'
. . .
class Version < ActiveRecord::Base
    . . .
    class AuthorType < AcraType
      def cast_value(value)
         if value.is_a?(Array)
            value = value.join(', ')
            super(value)
        else
          super
        end
      end
    end
 
    attribute :authors, AuthorType.new
    attribute :description, AcraType.new
    attribute :summary, AcraType.new

Step 5. Add activerecord_acrawriter to Gemfile: #

. . .
gem 'sprockets-rails', '~> 3.1.0'
gem 'rack-attack'
gem 'activerecord_acrawriter'

group :development, :test do
  gem 'rubocop', require: false
  gem 'toxiproxy', '~> 0.1.3'
end
. . .

Voila!

Congratulations, you’ve integrated Acra with Ruby Gems.

Additionally, you can look on our engineering demo where we show how to run our example with docker-compose with all infrastructure supported by Acra: AcraConnector, AcraWebConfig (deprecated since 0.91.0), AcraAuthManager (deprecated since 0.91.0), Prometheus, Jaeger.