]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add diaspora services
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Mon, 14 Jan 2019 17:05:03 +0000 (18:05 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sat, 19 Jan 2019 00:36:32 +0000 (01:36 +0100)
default.nix
virtual/modules/databases/default.nix
virtual/modules/websites/default.nix
virtual/modules/websites/tools/diaspora/Gemfile [new file with mode: 0644]
virtual/modules/websites/tools/diaspora/Gemfile.lock [new file with mode: 0644]
virtual/modules/websites/tools/diaspora/default.nix [new file with mode: 0644]
virtual/modules/websites/tools/diaspora/diaspora.json [new file with mode: 0644]
virtual/modules/websites/tools/diaspora/diaspora.nix [new file with mode: 0644]
virtual/modules/websites/tools/diaspora/gemset.nix [new file with mode: 0644]
virtual/modules/websites/tools/diaspora/ldap.patch [new file with mode: 0644]

index 9e79550e8f941e64d1edbfbe20fb871deb23678d..bc8ecc99c8250283f53a095c0f460ff9fd95b13f 100644 (file)
@@ -310,4 +310,5 @@ in
     inherit strace;
     inherit notmuch;
     stgit = gitAndTools.stgit;
+    inherit bundix;
   })
index cb3d5bfecd4f6a49faf76c879d1c8b9fc77e5c2c..0e2183704be102a6580769065f4f074529e418f3 100644 (file)
@@ -162,6 +162,7 @@ in {
     ];
 
     # FIXME: backup
+    # Diaspora: 15
     # Nextcloud: 14
     # Mastodon: 13
     # Mediagoblin: 12
index 5f92b8c2fe02f9d2aa87b5fbd503746fafbc0b62..4b1490b3502e7fe3499259d19840c75ed83b45d5 100644 (file)
@@ -99,6 +99,7 @@ in
     ./tools/git
     ./tools/mastodon
     ./tools/mediagoblin
+    ./tools/diaspora
     # built using:
     # sed -e "s/services\.httpd/services\.httpdProd/g" .nix-defexpr/channels/nixpkgs/nixos/modules/services/web-servers/apache-httpd/default.nix
     # Removed allGranted
@@ -175,6 +176,7 @@ in
     services.myWebsites.tools.git.enable = true;
     services.myWebsites.tools.mastodon.enable = true;
     services.myWebsites.tools.mediagoblin.enable = true;
+    services.myWebsites.tools.diaspora.enable = true;
 
     services.myWebsites.Chloe.production.enable = cfg.production.enable;
     services.myWebsites.Ludivine.production.enable = cfg.production.enable;
diff --git a/virtual/modules/websites/tools/diaspora/Gemfile b/virtual/modules/websites/tools/diaspora/Gemfile
new file mode 100644 (file)
index 0000000..e279514
--- /dev/null
@@ -0,0 +1,318 @@
+# frozen_string_literal: true
+
+source "https://rubygems.org"
+
+gem "rails", "5.1.6"
+
+# Legacy Rails features, remove me!
+# responders (class level)
+gem "responders", "2.4.0"
+
+# Appserver
+
+gem "unicorn", "5.4.1", require: false
+gem "unicorn-worker-killer", "0.4.4"
+
+# Federation
+
+gem "diaspora_federation-json_schema", "0.2.5"
+gem "diaspora_federation-rails", "0.2.5"
+
+# API and JSON
+
+gem "acts_as_api", "1.0.1"
+gem "json",        "2.1.0"
+gem "json-schema", "2.8.1"
+
+# Authentication
+
+gem "devise", "4.5.0"
+gem "devise_lastseenable", "0.0.6"
+
+# Captcha
+
+gem "simple_captcha2", "0.4.3", require: "simple_captcha"
+
+# Background processing
+
+gem "redis", "3.3.5" # Pinned to 3.3.x because of https://github.com/antirez/redis/issues/4272
+gem "sidekiq", "5.2.3"
+
+# Scheduled processing
+
+gem "sidekiq-cron", "1.0.4"
+
+# Compression
+
+gem "uglifier", "4.1.19"
+
+# Configuration
+
+gem "configurate", "0.3.1"
+
+# Cross-origin resource sharing
+
+gem "rack-cors", "1.0.2", require: "rack/cors"
+
+# CSS
+
+gem "autoprefixer-rails",     "8.6.5"
+gem "bootstrap-sass",         "3.3.7"
+gem "bootstrap-switch-rails", "3.3.4"
+gem "compass-rails",          "3.1.0"
+gem "sass-rails",             "5.0.7"
+gem "sprockets-rails",        "3.2.1"
+
+# Database
+
+group :mysql, optional: true do
+  gem "mysql2", "0.5.2"
+end
+gem "pg",     "1.1.3"
+
+
+gem "activerecord-import", "0.27.0"
+
+# File uploading
+
+gem "carrierwave", "1.2.3"
+gem "fog-aws",     "3.3.0"
+gem "mini_magick", "4.9.2"
+
+# GUID generation
+gem "uuid", "2.3.9"
+
+# Icons
+
+gem "entypo-rails", "3.0.0"
+
+# JavaScript
+
+gem "handlebars_assets", "0.23.2"
+gem "jquery-rails",      "4.3.3"
+gem "js-routes",         "1.4.4"
+gem "js_image_paths",    "0.1.1"
+
+source "https://rails-assets.org" do
+  gem "rails-assets-jquery",                              "3.3.1" # Should be kept in sync with jquery-rails
+  gem "rails-assets-jquery.ui",                           "1.11.4"
+
+  gem "rails-assets-highlightjs",                         "9.12.0"
+  gem "rails-assets-markdown-it",                         "8.4.2"
+  gem "rails-assets-markdown-it-hashtag",                 "0.4.0"
+  gem "rails-assets-markdown-it-diaspora-mention",        "1.2.0"
+  gem "rails-assets-markdown-it-sanitizer",               "0.4.3"
+  gem "rails-assets-markdown-it--markdown-it-for-inline", "0.1.1"
+  gem "rails-assets-markdown-it-sub",                     "1.0.0"
+  gem "rails-assets-markdown-it-sup",                     "1.0.0"
+
+  gem "rails-assets-backbone",                            "1.3.3"
+  gem "rails-assets-bootstrap-markdown",                  "2.10.0"
+  gem "rails-assets-corejs-typeahead",                    "1.2.1"
+  gem "rails-assets-fine-uploader",                       "5.13.0"
+
+  # jQuery plugins
+
+  gem "rails-assets-autosize",                            "4.0.2"
+  gem "rails-assets-blueimp-gallery",                     "2.33.0"
+  gem "rails-assets-jquery.are-you-sure",                 "1.9.0"
+  gem "rails-assets-jquery-placeholder",                  "2.3.1"
+  gem "rails-assets-jquery-textchange",                   "0.2.3"
+  gem "rails-assets-utatti-perfect-scrollbar",            "1.4.0"
+end
+
+gem "markdown-it-html5-embed", "1.0.0"
+
+# Localization
+
+gem "http_accept_language", "2.1.1"
+gem "i18n-inflector-rails", "1.0.7"
+gem "rails-i18n",           "5.1.2"
+
+# Mail
+
+gem "markerb",             "1.1.0"
+
+# Map
+gem "leaflet-rails",       "1.3.1"
+
+# Parsing
+
+gem "nokogiri",          "1.8.5"
+gem "open_graph_reader", "0.6.2" # also update User-Agent in features/support/webmock.rb
+gem "redcarpet",         "3.4.0"
+gem "ruby-oembed",       "0.12.0"
+gem "twitter-text",      "1.14.7"
+
+# RTL support
+
+gem "string-direction", "1.2.1"
+
+# Security Headers
+
+gem "secure_headers", "6.0.0"
+
+# Services
+
+gem "omniauth",           "1.8.1"
+gem "omniauth-tumblr",    "1.2"
+gem "omniauth-twitter",   "1.4.0"
+gem "omniauth-wordpress", "0.2.2"
+gem "twitter",            "6.2.0"
+
+# OpenID Connect
+gem "openid_connect", "1.1.6"
+
+# Serializers
+
+gem "active_model_serializers", "0.9.7"
+
+# XMPP chat dependencies
+gem "diaspora-prosody-config",    "0.0.7"
+gem "rails-assets-diaspora_jsxc", "0.1.5.develop.7", source: "https://rails-assets.org"
+
+# Tags
+
+gem "acts-as-taggable-on", "6.0.0"
+
+# URIs and HTTP
+
+gem "addressable",        "2.5.2", require: "addressable/uri"
+gem "faraday",            "0.15.3"
+gem "faraday_middleware", "0.12.2"
+gem "faraday-cookie_jar", "0.0.6"
+gem "typhoeus",           "1.3.1"
+
+# Views
+
+gem "gon",                     "6.2.1"
+gem "hamlit",                  "2.9.1"
+gem "mobile-fu",               "1.4.0"
+gem "rails-timeago",           "2.16.0"
+gem "will_paginate",           "3.1.6"
+
+# Logging
+
+gem "logging-rails", "0.6.0", require: "logging/rails"
+
+# Reading and writing zip files
+
+gem "rubyzip", "1.2.2", require: "zip"
+
+# Prevent occasions where minitest is not bundled in
+# packaged versions of ruby. See following issues/prs:
+# https://github.com/gitlabhq/gitlabhq/issues/3826
+# https://github.com/gitlabhq/gitlabhq/pull/3852
+# https://github.com/discourse/discourse/pull/238
+gem "minitest"
+
+gem "versionist", "1.7.0"
+
+# Windows and OSX have an execjs compatible runtime built-in, Linux users should
+# install Node.js or use "therubyracer".
+#
+# See https://github.com/sstephenson/execjs#readme for more supported runtimes
+
+# gem "therubyracer", :platform => :ruby
+
+# LDAP
+gem 'net-ldap', '~> 0.16'
+
+group :production do # we don"t install these on travis to speed up test runs
+  # Analytics
+
+  gem "rack-google-analytics", "1.2.0"
+  gem "rack-piwik",            "0.3.0",  require: "rack/piwik"
+
+  # Process management
+
+  gem "eye", "0.10.0"
+
+  # Redirects
+
+  gem "rack-rewrite", "1.5.1", require: false
+  gem "rack-ssl",     "1.4.1", require: "rack/ssl"
+
+  # Third party asset hosting
+
+  gem "asset_sync", "2.5.0", require: false
+end
+
+group :development do
+  # Automatic test runs
+  gem "guard",          "2.15.0", require: false
+  gem "guard-rspec",    "4.7.3", require: false
+  gem "guard-rubocop",  "1.3.0", require: false
+  gem "rb-fsevent",     "0.10.3", require: false
+  gem "rb-inotify",     "0.9.10", require: false
+
+  # Linters
+  gem "haml_lint",      "0.28.0", require: false
+  gem "pronto",         "0.9.5", require: false
+  gem "pronto-eslint",  "0.9.1", require: false
+  gem "pronto-haml",    "0.9.0", require: false
+  gem "pronto-rubocop", "0.9.1", require: false
+  gem "pronto-scss",    "0.9.1", require: false
+  gem "rubocop",        "0.60.0", require: false
+
+  # Preloading environment
+
+  gem "spring", "2.0.2"
+  gem "spring-commands-rspec", "1.0.4"
+  gem "spring-commands-cucumber", "1.0.1"
+
+  # Debugging
+  gem "pry"
+  gem "pry-byebug"
+
+  # test coverage
+  gem "simplecov", "0.16.1", require: false
+
+  gem "turbo_dev_assets", "0.0.2"
+end
+
+group :test do
+  # RSpec (unit tests, some integration tests)
+
+  gem "fixture_builder",   "0.5.2.rc3"
+  gem "fuubar",            "2.3.2"
+  gem "json-schema-rspec", "0.0.4"
+  gem "rspec-json_expectations", "~> 2.1"
+
+  # Cucumber (integration tests)
+
+  gem "capybara",           "3.11.1"
+  gem "database_cleaner",   "1.7.0"
+  gem "poltergeist",        "1.18.1"
+
+  gem "cucumber-api-steps", "0.14", require: false
+
+  # General helpers
+
+  gem "factory_girl_rails", "4.8.0"
+  gem "shoulda-matchers",   "3.1.2"
+  gem "timecop",            "0.9.1"
+  gem "webmock",            "3.4.2", require: false
+
+  gem "diaspora_federation-test", "0.2.5"
+
+  # Coverage
+  gem "coveralls", "0.8.22", require: false
+end
+
+group :development, :test do
+  # RSpec (unit tests, some integration tests)
+  gem "rspec-rails", "3.8.1"
+
+  # Cucumber (integration tests)
+  gem "cucumber-rails", "1.6.0", require: false
+
+  # Jasmine (client side application tests (JS))
+  gem "jasmine",                   "3.3.0"
+  gem "jasmine-jquery-rails",      "2.0.3"
+  gem "rails-assets-jasmine-ajax", "3.4.0", source: "https://rails-assets.org"
+  gem "sinon-rails",               "1.15.0"
+
+  # For `assigns` in controller specs
+  gem "rails-controller-testing", "1.0.2"
+end
diff --git a/virtual/modules/websites/tools/diaspora/Gemfile.lock b/virtual/modules/websites/tools/diaspora/Gemfile.lock
new file mode 100644 (file)
index 0000000..ceb08c1
--- /dev/null
@@ -0,0 +1,909 @@
+GEM
+  remote: https://rubygems.org/
+  remote: https://rails-assets.org/
+  specs:
+    actioncable (5.1.6)
+      actionpack (= 5.1.6)
+      nio4r (~> 2.0)
+      websocket-driver (~> 0.6.1)
+    actionmailer (5.1.6)
+      actionpack (= 5.1.6)
+      actionview (= 5.1.6)
+      activejob (= 5.1.6)
+      mail (~> 2.5, >= 2.5.4)
+      rails-dom-testing (~> 2.0)
+    actionpack (5.1.6)
+      actionview (= 5.1.6)
+      activesupport (= 5.1.6)
+      rack (~> 2.0)
+      rack-test (>= 0.6.3)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.0.2)
+    actionview (5.1.6)
+      activesupport (= 5.1.6)
+      builder (~> 3.1)
+      erubi (~> 1.4)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.0.3)
+    active_model_serializers (0.9.7)
+      activemodel (>= 3.2)
+      concurrent-ruby (~> 1.0)
+    activejob (5.1.6)
+      activesupport (= 5.1.6)
+      globalid (>= 0.3.6)
+    activemodel (5.1.6)
+      activesupport (= 5.1.6)
+    activerecord (5.1.6)
+      activemodel (= 5.1.6)
+      activesupport (= 5.1.6)
+      arel (~> 8.0)
+    activerecord-import (0.27.0)
+      activerecord (>= 3.2)
+    activesupport (5.1.6)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+    acts-as-taggable-on (6.0.0)
+      activerecord (~> 5.0)
+    acts_as_api (1.0.1)
+      activemodel (>= 3.0.0)
+      activesupport (>= 3.0.0)
+      rack (>= 1.1.0)
+    addressable (2.5.2)
+      public_suffix (>= 2.0.2, < 4.0)
+    aes_key_wrap (1.0.1)
+    arel (8.0.0)
+    asset_sync (2.5.0)
+      activemodel (>= 4.1.0)
+      fog-core
+      mime-types (>= 2.99)
+      unf
+    ast (2.4.0)
+    attr_required (1.0.1)
+    autoprefixer-rails (8.6.5)
+      execjs
+    backports (3.11.4)
+    bcrypt (3.1.12)
+    bindata (2.4.4)
+    bootstrap-sass (3.3.7)
+      autoprefixer-rails (>= 5.2.1)
+      sass (>= 3.3.4)
+    bootstrap-switch-rails (3.3.4)
+    buftok (0.2.0)
+    builder (3.2.3)
+    byebug (10.0.2)
+    capybara (3.11.1)
+      addressable
+      mini_mime (>= 0.1.3)
+      nokogiri (~> 1.8)
+      rack (>= 1.6.0)
+      rack-test (>= 0.6.3)
+      regexp_parser (~> 1.2)
+      xpath (~> 3.2)
+    carrierwave (1.2.3)
+      activemodel (>= 4.0.0)
+      activesupport (>= 4.0.0)
+      mime-types (>= 1.16)
+    celluloid (0.17.3)
+      celluloid-essentials
+      celluloid-extras
+      celluloid-fsm
+      celluloid-pool
+      celluloid-supervision
+      timers (>= 4.1.1)
+    celluloid-essentials (0.20.5)
+      timers (>= 4.1.1)
+    celluloid-extras (0.20.5)
+      timers (>= 4.1.1)
+    celluloid-fsm (0.20.5)
+      timers (>= 4.1.1)
+    celluloid-io (0.17.3)
+      celluloid (>= 0.17.2)
+      nio4r (>= 1.1)
+      timers (>= 4.1.1)
+    celluloid-pool (0.20.5)
+      timers (>= 4.1.1)
+    celluloid-supervision (0.20.6)
+      timers (>= 4.1.1)
+    chunky_png (1.3.10)
+    cliver (0.3.2)
+    coderay (1.1.2)
+    compass (1.0.3)
+      chunky_png (~> 1.2)
+      compass-core (~> 1.0.2)
+      compass-import-once (~> 1.0.5)
+      rb-fsevent (>= 0.9.3)
+      rb-inotify (>= 0.9)
+      sass (>= 3.3.13, < 3.5)
+    compass-core (1.0.3)
+      multi_json (~> 1.0)
+      sass (>= 3.3.0, < 3.5)
+    compass-import-once (1.0.5)
+      sass (>= 3.2, < 3.5)
+    compass-rails (3.1.0)
+      compass (~> 1.0.0)
+      sass-rails (< 5.1)
+      sprockets (< 4.0)
+    concurrent-ruby (1.1.3)
+    configurate (0.3.1)
+    connection_pool (2.2.2)
+    coveralls (0.8.22)
+      json (>= 1.8, < 3)
+      simplecov (~> 0.16.1)
+      term-ansicolor (~> 1.3)
+      thor (~> 0.19.4)
+      tins (~> 1.6)
+    crack (0.4.3)
+      safe_yaml (~> 1.0.0)
+    crass (1.0.4)
+    cucumber (3.1.2)
+      builder (>= 2.1.2)
+      cucumber-core (~> 3.2.0)
+      cucumber-expressions (~> 6.0.1)
+      cucumber-wire (~> 0.0.1)
+      diff-lcs (~> 1.3)
+      gherkin (~> 5.1.0)
+      multi_json (>= 1.7.5, < 2.0)
+      multi_test (>= 0.1.2)
+    cucumber-api-steps (0.14.0)
+      cucumber (>= 2.0.2)
+      jsonpath (>= 0.1.2)
+    cucumber-core (3.2.1)
+      backports (>= 3.8.0)
+      cucumber-tag_expressions (~> 1.1.0)
+      gherkin (~> 5.0)
+    cucumber-expressions (6.0.1)
+    cucumber-rails (1.6.0)
+      capybara (>= 1.1.2, < 4)
+      cucumber (>= 3.0.2, < 4)
+      mime-types (>= 1.17, < 4)
+      nokogiri (~> 1.8)
+      railties (>= 4, < 6)
+    cucumber-tag_expressions (1.1.1)
+    cucumber-wire (0.0.1)
+    database_cleaner (1.7.0)
+    devise (4.5.0)
+      bcrypt (~> 3.0)
+      orm_adapter (~> 0.1)
+      railties (>= 4.1.0, < 6.0)
+      responders
+      warden (~> 1.2.3)
+    devise_lastseenable (0.0.6)
+      devise
+      rails (>= 3.0.4)
+    diaspora-prosody-config (0.0.7)
+    diaspora_federation (0.2.5)
+      faraday (>= 0.9.0, < 0.16.0)
+      faraday_middleware (>= 0.10.0, < 0.13.0)
+      nokogiri (~> 1.6, >= 1.6.8)
+      typhoeus (~> 1.0)
+      valid (~> 1.0)
+    diaspora_federation-json_schema (0.2.5)
+    diaspora_federation-rails (0.2.5)
+      actionpack (>= 4.2, < 6)
+      diaspora_federation (= 0.2.5)
+    diaspora_federation-test (0.2.5)
+      diaspora_federation (= 0.2.5)
+      fabrication (~> 2.16)
+      uuid (~> 2.3, >= 2.3.8)
+    diff-lcs (1.3)
+    docile (1.3.1)
+    domain_name (0.5.20180417)
+      unf (>= 0.0.5, < 1.0.0)
+    entypo-rails (3.0.0)
+      railties (>= 4.1, < 6)
+    equalizer (0.0.11)
+    erubi (1.7.1)
+    eslintrb (2.1.0)
+      execjs
+      multi_json (>= 1.3)
+      rake
+    et-orbi (1.1.6)
+      tzinfo
+    ethon (0.11.0)
+      ffi (>= 1.3.0)
+    excon (0.62.0)
+    execjs (2.7.0)
+    eye (0.10.0)
+      celluloid (~> 0.17.3)
+      celluloid-io (~> 0.17.0)
+      kostya-sigar (~> 2.0.0)
+      state_machines
+      thor
+    fabrication (2.20.1)
+    factory_girl (4.8.0)
+      activesupport (>= 3.0.0)
+    factory_girl_rails (4.8.0)
+      factory_girl (~> 4.8.0)
+      railties (>= 3.0.0)
+    faraday (0.15.3)
+      multipart-post (>= 1.2, < 3)
+    faraday-cookie_jar (0.0.6)
+      faraday (>= 0.7.4)
+      http-cookie (~> 1.0.0)
+    faraday_middleware (0.12.2)
+      faraday (>= 0.7.4, < 1.0)
+    ffi (1.9.25)
+    fixture_builder (0.5.2.rc3)
+      activerecord (>= 2)
+      activesupport (>= 2)
+      hashdiff
+    fog-aws (3.3.0)
+      fog-core (~> 2.1)
+      fog-json (~> 1.1)
+      fog-xml (~> 0.1)
+      ipaddress (~> 0.8)
+    fog-core (2.1.2)
+      builder
+      excon (~> 0.58)
+      formatador (~> 0.2)
+      mime-types
+    fog-json (1.2.0)
+      fog-core
+      multi_json (~> 1.10)
+    fog-xml (0.1.3)
+      fog-core
+      nokogiri (>= 1.5.11, < 2.0.0)
+    formatador (0.2.5)
+    fugit (1.1.6)
+      et-orbi (~> 1.1, >= 1.1.6)
+      raabro (~> 1.1)
+    fuubar (2.3.2)
+      rspec-core (~> 3.0)
+      ruby-progressbar (~> 1.4)
+    get_process_mem (0.2.3)
+    gherkin (5.1.0)
+    gitlab (4.7.0)
+      httparty (>= 0.14.0)
+      terminal-table (>= 1.5.1)
+    globalid (0.4.1)
+      activesupport (>= 4.2.0)
+    gon (6.2.1)
+      actionpack (>= 3.0)
+      multi_json
+      request_store (>= 1.0)
+    guard (2.15.0)
+      formatador (>= 0.2.4)
+      listen (>= 2.7, < 4.0)
+      lumberjack (>= 1.0.12, < 2.0)
+      nenv (~> 0.1)
+      notiffany (~> 0.0)
+      pry (>= 0.9.12)
+      shellany (~> 0.0)
+      thor (>= 0.18.1)
+    guard-compat (1.2.1)
+    guard-rspec (4.7.3)
+      guard (~> 2.1)
+      guard-compat (~> 1.1)
+      rspec (>= 2.99.0, < 4.0)
+    guard-rubocop (1.3.0)
+      guard (~> 2.0)
+      rubocop (~> 0.20)
+    haml (5.0.4)
+      temple (>= 0.8.0)
+      tilt
+    haml_lint (0.28.0)
+      haml (>= 4.0, < 5.1)
+      rainbow
+      rake (>= 10, < 13)
+      rubocop (>= 0.50.0)
+      sysexits (~> 1.1)
+    hamlit (2.9.1)
+      temple (>= 0.8.0)
+      thor
+      tilt
+    handlebars_assets (0.23.2)
+      execjs (~> 2.0)
+      sprockets (>= 2.0.0)
+      tilt (>= 1.2)
+    hashdiff (0.3.7)
+    hashie (3.5.7)
+    http (3.3.0)
+      addressable (~> 2.3)
+      http-cookie (~> 1.0)
+      http-form_data (~> 2.0)
+      http_parser.rb (~> 0.6.0)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    http-form_data (2.1.1)
+    http_accept_language (2.1.1)
+    http_parser.rb (0.6.0)
+    httparty (0.16.3)
+      mime-types (~> 3.0)
+      multi_xml (>= 0.5.2)
+    httpclient (2.8.3)
+    i18n (1.1.1)
+      concurrent-ruby (~> 1.0)
+    i18n-inflector (2.6.7)
+      i18n (>= 0.4.1)
+    i18n-inflector-rails (1.0.7)
+      actionpack (>= 3.0.0)
+      i18n-inflector (~> 2.6)
+      railties (>= 3.0.0)
+    ipaddress (0.8.3)
+    jaro_winkler (1.5.1)
+    jasmine (3.3.0)
+      jasmine-core (~> 3.3.0)
+      phantomjs
+      rack (>= 1.2.1)
+      rake
+    jasmine-core (3.3.0)
+    jasmine-jquery-rails (2.0.3)
+    jquery-rails (4.3.3)
+      rails-dom-testing (>= 1, < 3)
+      railties (>= 4.2.0)
+      thor (>= 0.14, < 2.0)
+    js-routes (1.4.4)
+      railties (>= 3.2)
+      sprockets-rails
+    js_image_paths (0.1.1)
+      rails (>= 4.0, < 6.0)
+      sprockets (>= 3.0.0)
+    json (2.1.0)
+    json-jwt (1.9.4)
+      activesupport
+      aes_key_wrap
+      bindata
+    json-schema (2.8.1)
+      addressable (>= 2.4)
+    json-schema-rspec (0.0.4)
+      json-schema (~> 2.5)
+      rspec
+    jsonpath (0.9.6)
+      multi_json
+      to_regexp (~> 0.2.1)
+    jwt (2.1.0)
+    kgio (2.11.2)
+    kostya-sigar (2.0.4)
+    leaflet-rails (1.3.1)
+      rails (>= 4.2.0)
+    listen (3.1.5)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+      ruby_dep (~> 1.2)
+    little-plugger (1.1.4)
+    logging (2.2.2)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.10)
+    logging-rails (0.6.0)
+      logging (>= 1.8)
+    loofah (2.2.3)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.5.9)
+    lumberjack (1.0.13)
+    macaddr (1.7.1)
+      systemu (~> 2.6.2)
+    mail (2.7.1)
+      mini_mime (>= 0.1.1)
+    markdown-it-html5-embed (1.0.0)
+    markerb (1.1.0)
+    memoizable (0.4.2)
+      thread_safe (~> 0.3, >= 0.3.1)
+    method_source (0.9.2)
+    mime-types (3.2.2)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2018.0812)
+    mini_magick (4.9.2)
+    mini_mime (1.0.1)
+    mini_portile2 (2.3.0)
+    minitest (5.11.3)
+    mobile-fu (1.4.0)
+      rack-mobile-detect
+      rails
+    multi_json (1.13.1)
+    multi_test (0.1.2)
+    multi_xml (0.6.0)
+    multipart-post (2.0.0)
+    mysql2 (0.5.2)
+    naught (1.1.0)
+    nenv (0.3.0)
+    net-ldap (0.16.1)
+    nio4r (2.3.1)
+    nokogiri (1.8.5)
+      mini_portile2 (~> 2.3.0)
+    notiffany (0.1.1)
+      nenv (~> 0.1)
+      shellany (~> 0.0)
+    oauth (0.5.4)
+    oauth2 (1.4.1)
+      faraday (>= 0.8, < 0.16.0)
+      jwt (>= 1.0, < 3.0)
+      multi_json (~> 1.3)
+      multi_xml (~> 0.5)
+      rack (>= 1.2, < 3)
+    octokit (4.13.0)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    omniauth (1.8.1)
+      hashie (>= 3.4.6, < 3.6.0)
+      rack (>= 1.6.2, < 3)
+    omniauth-oauth (1.1.0)
+      oauth
+      omniauth (~> 1.0)
+    omniauth-oauth2 (1.5.0)
+      oauth2 (~> 1.1)
+      omniauth (~> 1.2)
+    omniauth-tumblr (1.2)
+      multi_json
+      omniauth-oauth (~> 1.0)
+    omniauth-twitter (1.4.0)
+      omniauth-oauth (~> 1.1)
+      rack
+    omniauth-wordpress (0.2.2)
+      omniauth-oauth2 (>= 1.1.0)
+    open_graph_reader (0.6.2)
+      faraday (>= 0.9.0)
+      nokogiri (~> 1.6)
+    openid_connect (1.1.6)
+      activemodel
+      attr_required (>= 1.0.0)
+      json-jwt (>= 1.5.0)
+      rack-oauth2 (>= 1.6.1)
+      swd (>= 1.0.0)
+      tzinfo
+      validate_email
+      validate_url
+      webfinger (>= 1.0.1)
+    orm_adapter (0.5.0)
+    parallel (1.12.1)
+    parser (2.5.3.0)
+      ast (~> 2.4.0)
+    pg (1.1.3)
+    phantomjs (2.1.1.0)
+    poltergeist (1.18.1)
+      capybara (>= 2.1, < 4)
+      cliver (~> 0.3.1)
+      websocket-driver (>= 0.2.0)
+    powerpack (0.1.2)
+    pronto (0.9.5)
+      gitlab (~> 4.0, >= 4.0.0)
+      httparty (>= 0.13.7)
+      octokit (~> 4.7, >= 4.7.0)
+      rainbow (~> 2.1)
+      rugged (~> 0.24, >= 0.23.0)
+      thor (~> 0.19.0)
+    pronto-eslint (0.9.1)
+      eslintrb (~> 2.0, >= 2.0.0)
+      pronto (~> 0.9.0)
+    pronto-haml (0.9.0)
+      haml_lint (~> 0.23)
+      pronto (~> 0.9.0)
+    pronto-rubocop (0.9.1)
+      pronto (~> 0.9.0)
+      rubocop (~> 0.50, >= 0.49.1)
+    pronto-scss (0.9.1)
+      pronto (~> 0.9.0)
+      scss_lint (~> 0.43, >= 0.43.0)
+    pry (0.12.2)
+      coderay (~> 1.1.0)
+      method_source (~> 0.9.0)
+    pry-byebug (3.6.0)
+      byebug (~> 10.0)
+      pry (~> 0.10)
+    public_suffix (3.0.3)
+    raabro (1.1.6)
+    rack (2.0.6)
+    rack-cors (1.0.2)
+    rack-google-analytics (1.2.0)
+      actionpack
+      activesupport
+    rack-mobile-detect (0.4.0)
+      rack
+    rack-oauth2 (1.9.3)
+      activesupport
+      attr_required
+      httpclient
+      json-jwt (>= 1.9.0)
+      rack
+    rack-piwik (0.3.0)
+    rack-protection (2.0.4)
+      rack
+    rack-rewrite (1.5.1)
+    rack-ssl (1.4.1)
+      rack
+    rack-test (1.1.0)
+      rack (>= 1.0, < 3)
+    rails (5.1.6)
+      actioncable (= 5.1.6)
+      actionmailer (= 5.1.6)
+      actionpack (= 5.1.6)
+      actionview (= 5.1.6)
+      activejob (= 5.1.6)
+      activemodel (= 5.1.6)
+      activerecord (= 5.1.6)
+      activesupport (= 5.1.6)
+      bundler (>= 1.3.0)
+      railties (= 5.1.6)
+      sprockets-rails (>= 2.0.0)
+    rails-assets-autosize (4.0.2)
+    rails-assets-backbone (1.3.3)
+      rails-assets-underscore (>= 1.8.3)
+    rails-assets-blueimp-gallery (2.33.0)
+    rails-assets-bootstrap (3.3.7)
+      rails-assets-jquery (>= 1.9.1, < 4)
+    rails-assets-bootstrap-markdown (2.10.0)
+      rails-assets-bootstrap (~> 3)
+    rails-assets-corejs-typeahead (1.2.1)
+      rails-assets-jquery (>= 1.11)
+    rails-assets-diaspora_jsxc (0.1.5.develop.7)
+      rails-assets-emojione (~> 2.0.1)
+      rails-assets-favico.js (>= 0.3.10, < 0.4)
+      rails-assets-jquery-colorbox (~> 1.6.3)
+      rails-assets-jquery-fullscreen-plugin (~> 0.5.0)
+      rails-assets-jquery.slimscroll (~> 1.3.6)
+      rails-assets-jquery.ui (~> 1.11.4)
+    rails-assets-emojione (2.0.1)
+    rails-assets-favico.js (0.3.10)
+    rails-assets-fine-uploader (5.13.0)
+    rails-assets-highlightjs (9.12.0)
+    rails-assets-jasmine (3.3.0)
+    rails-assets-jasmine-ajax (3.4.0)
+      rails-assets-jasmine (~> 3)
+    rails-assets-jquery (3.3.1)
+    rails-assets-jquery-colorbox (1.6.4)
+      rails-assets-jquery (>= 1.3.2)
+    rails-assets-jquery-fullscreen-plugin (0.5.0)
+    rails-assets-jquery-placeholder (2.3.1)
+      rails-assets-jquery (>= 1.6)
+    rails-assets-jquery-textchange (0.2.3)
+      rails-assets-jquery
+    rails-assets-jquery.are-you-sure (1.9.0)
+      rails-assets-jquery (>= 1.4.2)
+    rails-assets-jquery.slimscroll (1.3.8)
+    rails-assets-jquery.ui (1.11.4)
+      rails-assets-jquery (>= 1.6)
+    rails-assets-markdown-it--markdown-it-for-inline (0.1.1)
+    rails-assets-markdown-it (8.4.2)
+    rails-assets-markdown-it-diaspora-mention (1.2.0)
+    rails-assets-markdown-it-hashtag (0.4.0)
+    rails-assets-markdown-it-sanitizer (0.4.3)
+    rails-assets-markdown-it-sub (1.0.0)
+    rails-assets-markdown-it-sup (1.0.0)
+    rails-assets-underscore (1.9.1)
+    rails-assets-utatti-perfect-scrollbar (1.4.0)
+    rails-controller-testing (1.0.2)
+      actionpack (~> 5.x, >= 5.0.1)
+      actionview (~> 5.x, >= 5.0.1)
+      activesupport (~> 5.x)
+    rails-dom-testing (2.0.3)
+      activesupport (>= 4.2.0)
+      nokogiri (>= 1.6)
+    rails-html-sanitizer (1.0.4)
+      loofah (~> 2.2, >= 2.2.2)
+    rails-i18n (5.1.2)
+      i18n (>= 0.7, < 2)
+      railties (>= 5.0, < 6)
+    rails-timeago (2.16.0)
+      actionpack (>= 3.1)
+      activesupport (>= 3.1)
+    railties (5.1.6)
+      actionpack (= 5.1.6)
+      activesupport (= 5.1.6)
+      method_source
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rainbow (2.2.2)
+      rake
+    raindrops (0.19.0)
+    rake (12.3.1)
+    rb-fsevent (0.10.3)
+    rb-inotify (0.9.10)
+      ffi (>= 0.5.0, < 2)
+    redcarpet (3.4.0)
+    redis (3.3.5)
+    regexp_parser (1.3.0)
+    request_store (1.4.1)
+      rack (>= 1.4)
+    responders (2.4.0)
+      actionpack (>= 4.2.0, < 5.3)
+      railties (>= 4.2.0, < 5.3)
+    rspec (3.8.0)
+      rspec-core (~> 3.8.0)
+      rspec-expectations (~> 3.8.0)
+      rspec-mocks (~> 3.8.0)
+    rspec-core (3.8.0)
+      rspec-support (~> 3.8.0)
+    rspec-expectations (3.8.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.8.0)
+    rspec-json_expectations (2.1.0)
+    rspec-mocks (3.8.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.8.0)
+    rspec-rails (3.8.1)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      railties (>= 3.0)
+      rspec-core (~> 3.8.0)
+      rspec-expectations (~> 3.8.0)
+      rspec-mocks (~> 3.8.0)
+      rspec-support (~> 3.8.0)
+    rspec-support (3.8.0)
+    rubocop (0.60.0)
+      jaro_winkler (~> 1.5.1)
+      parallel (~> 1.10)
+      parser (>= 2.5, != 2.5.1.1)
+      powerpack (~> 0.1)
+      rainbow (>= 2.2.2, < 4.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (~> 1.4.0)
+    ruby-oembed (0.12.0)
+    ruby-progressbar (1.10.0)
+    ruby_dep (1.5.0)
+    rubyzip (1.2.2)
+    rugged (0.27.5)
+    safe_yaml (1.0.4)
+    sass (3.4.25)
+    sass-rails (5.0.7)
+      railties (>= 4.0.0, < 6)
+      sass (~> 3.1)
+      sprockets (>= 2.8, < 4.0)
+      sprockets-rails (>= 2.0, < 4.0)
+      tilt (>= 1.1, < 3)
+    sawyer (0.8.1)
+      addressable (>= 2.3.5, < 2.6)
+      faraday (~> 0.8, < 1.0)
+    scss_lint (0.55.0)
+      rake (>= 0.9, < 13)
+      sass (~> 3.4.20)
+    secure_headers (6.0.0)
+    shellany (0.0.1)
+    shoulda-matchers (3.1.2)
+      activesupport (>= 4.0.0)
+    sidekiq (5.2.3)
+      connection_pool (~> 2.2, >= 2.2.2)
+      rack-protection (>= 1.5.0)
+      redis (>= 3.3.5, < 5)
+    sidekiq-cron (1.0.4)
+      fugit (~> 1.1)
+      sidekiq (>= 4.2.1)
+    simple_captcha2 (0.4.3)
+      rails (>= 4.1)
+    simple_oauth (0.3.1)
+    simplecov (0.16.1)
+      docile (~> 1.1)
+      json (>= 1.8, < 3)
+      simplecov-html (~> 0.10.0)
+    simplecov-html (0.10.2)
+    sinon-rails (1.15.0)
+      railties (>= 3.1)
+    spring (2.0.2)
+      activesupport (>= 4.2)
+    spring-commands-cucumber (1.0.1)
+      spring (>= 0.9.1)
+    spring-commands-rspec (1.0.4)
+      spring (>= 0.9.1)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    sprockets-rails (3.2.1)
+      actionpack (>= 4.0)
+      activesupport (>= 4.0)
+      sprockets (>= 3.0.0)
+    state_machines (0.5.0)
+    string-direction (1.2.1)
+    swd (1.1.2)
+      activesupport (>= 3)
+      attr_required (>= 0.0.5)
+      httpclient (>= 2.4)
+    sysexits (1.2.0)
+    systemu (2.6.5)
+    temple (0.8.0)
+    term-ansicolor (1.7.0)
+      tins (~> 1.0)
+    terminal-table (1.8.0)
+      unicode-display_width (~> 1.1, >= 1.1.1)
+    thor (0.19.4)
+    thread_safe (0.3.6)
+    tilt (2.0.8)
+    timecop (0.9.1)
+    timers (4.2.0)
+    tins (1.20.2)
+    to_regexp (0.2.1)
+    turbo_dev_assets (0.0.2)
+    twitter (6.2.0)
+      addressable (~> 2.3)
+      buftok (~> 0.2.0)
+      equalizer (~> 0.0.11)
+      http (~> 3.0)
+      http-form_data (~> 2.0)
+      http_parser.rb (~> 0.6.0)
+      memoizable (~> 0.4.0)
+      multipart-post (~> 2.0)
+      naught (~> 1.0)
+      simple_oauth (~> 0.3.0)
+    twitter-text (1.14.7)
+      unf (~> 0.1.0)
+    typhoeus (1.3.1)
+      ethon (>= 0.9.0)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    uglifier (4.1.19)
+      execjs (>= 0.3.0, < 3)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.5)
+    unicode-display_width (1.4.0)
+    unicorn (5.4.1)
+      kgio (~> 2.6)
+      raindrops (~> 0.7)
+    unicorn-worker-killer (0.4.4)
+      get_process_mem (~> 0)
+      unicorn (>= 4, < 6)
+    uuid (2.3.9)
+      macaddr (~> 1.0)
+    valid (1.2.0)
+    validate_email (0.1.6)
+      activemodel (>= 3.0)
+      mail (>= 2.2.5)
+    validate_url (1.0.2)
+      activemodel (>= 3.0.0)
+      addressable
+    versionist (1.7.0)
+      activesupport (>= 3)
+      railties (>= 3)
+      yard (~> 0.9.11)
+    warden (1.2.8)
+      rack (>= 2.0.6)
+    webfinger (1.1.0)
+      activesupport
+      httpclient (>= 2.4)
+    webmock (3.4.2)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+      hashdiff
+    websocket-driver (0.6.5)
+      websocket-extensions (>= 0.1.0)
+    websocket-extensions (0.1.3)
+    will_paginate (3.1.6)
+    xpath (3.2.0)
+      nokogiri (~> 1.8)
+    yard (0.9.16)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  active_model_serializers (= 0.9.7)
+  activerecord-import (= 0.27.0)
+  acts-as-taggable-on (= 6.0.0)
+  acts_as_api (= 1.0.1)
+  addressable (= 2.5.2)
+  asset_sync (= 2.5.0)
+  autoprefixer-rails (= 8.6.5)
+  bootstrap-sass (= 3.3.7)
+  bootstrap-switch-rails (= 3.3.4)
+  capybara (= 3.11.1)
+  carrierwave (= 1.2.3)
+  compass-rails (= 3.1.0)
+  configurate (= 0.3.1)
+  coveralls (= 0.8.22)
+  cucumber-api-steps (= 0.14)
+  cucumber-rails (= 1.6.0)
+  database_cleaner (= 1.7.0)
+  devise (= 4.5.0)
+  devise_lastseenable (= 0.0.6)
+  diaspora-prosody-config (= 0.0.7)
+  diaspora_federation-json_schema (= 0.2.5)
+  diaspora_federation-rails (= 0.2.5)
+  diaspora_federation-test (= 0.2.5)
+  entypo-rails (= 3.0.0)
+  eye (= 0.10.0)
+  factory_girl_rails (= 4.8.0)
+  faraday (= 0.15.3)
+  faraday-cookie_jar (= 0.0.6)
+  faraday_middleware (= 0.12.2)
+  fixture_builder (= 0.5.2.rc3)
+  fog-aws (= 3.3.0)
+  fuubar (= 2.3.2)
+  gon (= 6.2.1)
+  guard (= 2.15.0)
+  guard-rspec (= 4.7.3)
+  guard-rubocop (= 1.3.0)
+  haml_lint (= 0.28.0)
+  hamlit (= 2.9.1)
+  handlebars_assets (= 0.23.2)
+  http_accept_language (= 2.1.1)
+  i18n-inflector-rails (= 1.0.7)
+  jasmine (= 3.3.0)
+  jasmine-jquery-rails (= 2.0.3)
+  jquery-rails (= 4.3.3)
+  js-routes (= 1.4.4)
+  js_image_paths (= 0.1.1)
+  json (= 2.1.0)
+  json-schema (= 2.8.1)
+  json-schema-rspec (= 0.0.4)
+  leaflet-rails (= 1.3.1)
+  logging-rails (= 0.6.0)
+  markdown-it-html5-embed (= 1.0.0)
+  markerb (= 1.1.0)
+  mini_magick (= 4.9.2)
+  minitest
+  mobile-fu (= 1.4.0)
+  mysql2 (= 0.5.2)
+  net-ldap (~> 0.16)
+  nokogiri (= 1.8.5)
+  omniauth (= 1.8.1)
+  omniauth-tumblr (= 1.2)
+  omniauth-twitter (= 1.4.0)
+  omniauth-wordpress (= 0.2.2)
+  open_graph_reader (= 0.6.2)
+  openid_connect (= 1.1.6)
+  pg (= 1.1.3)
+  poltergeist (= 1.18.1)
+  pronto (= 0.9.5)
+  pronto-eslint (= 0.9.1)
+  pronto-haml (= 0.9.0)
+  pronto-rubocop (= 0.9.1)
+  pronto-scss (= 0.9.1)
+  pry
+  pry-byebug
+  rack-cors (= 1.0.2)
+  rack-google-analytics (= 1.2.0)
+  rack-piwik (= 0.3.0)
+  rack-rewrite (= 1.5.1)
+  rack-ssl (= 1.4.1)
+  rails (= 5.1.6)
+  rails-assets-autosize (= 4.0.2)!
+  rails-assets-backbone (= 1.3.3)!
+  rails-assets-blueimp-gallery (= 2.33.0)!
+  rails-assets-bootstrap-markdown (= 2.10.0)!
+  rails-assets-corejs-typeahead (= 1.2.1)!
+  rails-assets-diaspora_jsxc (= 0.1.5.develop.7)!
+  rails-assets-fine-uploader (= 5.13.0)!
+  rails-assets-highlightjs (= 9.12.0)!
+  rails-assets-jasmine-ajax (= 3.4.0)!
+  rails-assets-jquery (= 3.3.1)!
+  rails-assets-jquery-placeholder (= 2.3.1)!
+  rails-assets-jquery-textchange (= 0.2.3)!
+  rails-assets-jquery.are-you-sure (= 1.9.0)!
+  rails-assets-jquery.ui (= 1.11.4)!
+  rails-assets-markdown-it (= 8.4.2)!
+  rails-assets-markdown-it--markdown-it-for-inline (= 0.1.1)!
+  rails-assets-markdown-it-diaspora-mention (= 1.2.0)!
+  rails-assets-markdown-it-hashtag (= 0.4.0)!
+  rails-assets-markdown-it-sanitizer (= 0.4.3)!
+  rails-assets-markdown-it-sub (= 1.0.0)!
+  rails-assets-markdown-it-sup (= 1.0.0)!
+  rails-assets-utatti-perfect-scrollbar (= 1.4.0)!
+  rails-controller-testing (= 1.0.2)
+  rails-i18n (= 5.1.2)
+  rails-timeago (= 2.16.0)
+  rb-fsevent (= 0.10.3)
+  rb-inotify (= 0.9.10)
+  redcarpet (= 3.4.0)
+  redis (= 3.3.5)
+  responders (= 2.4.0)
+  rspec-json_expectations (~> 2.1)
+  rspec-rails (= 3.8.1)
+  rubocop (= 0.60.0)
+  ruby-oembed (= 0.12.0)
+  rubyzip (= 1.2.2)
+  sass-rails (= 5.0.7)
+  secure_headers (= 6.0.0)
+  shoulda-matchers (= 3.1.2)
+  sidekiq (= 5.2.3)
+  sidekiq-cron (= 1.0.4)
+  simple_captcha2 (= 0.4.3)
+  simplecov (= 0.16.1)
+  sinon-rails (= 1.15.0)
+  spring (= 2.0.2)
+  spring-commands-cucumber (= 1.0.1)
+  spring-commands-rspec (= 1.0.4)
+  sprockets-rails (= 3.2.1)
+  string-direction (= 1.2.1)
+  timecop (= 0.9.1)
+  turbo_dev_assets (= 0.0.2)
+  twitter (= 6.2.0)
+  twitter-text (= 1.14.7)
+  typhoeus (= 1.3.1)
+  uglifier (= 4.1.19)
+  unicorn (= 5.4.1)
+  unicorn-worker-killer (= 0.4.4)
+  uuid (= 2.3.9)
+  versionist (= 1.7.0)
+  webmock (= 3.4.2)
+  will_paginate (= 3.1.6)
+
+BUNDLED WITH
+   1.17.1
diff --git a/virtual/modules/websites/tools/diaspora/default.nix b/virtual/modules/websites/tools/diaspora/default.nix
new file mode 100644 (file)
index 0000000..23670dc
--- /dev/null
@@ -0,0 +1,117 @@
+{ lib, pkgs, config, mylibs, ... }:
+let
+  diaspora = pkgs.callPackage ./diaspora.nix {
+    inherit (mylibs) fetchedGithub checkEnv;
+  };
+
+  cfg = config.services.myWebsites.tools.diaspora;
+in {
+  options.services.myWebsites.tools.diaspora = {
+    enable = lib.mkEnableOption "enable diaspora's website";
+  };
+
+  config = lib.mkIf cfg.enable {
+    # FIXME: Can we use dynamic users from systemd?
+    # nixos/modules/misc/ids.nix
+    ids.uids.diaspora = 398;
+    ids.gids.diaspora = 398;
+
+    users.users.diaspora = {
+      name = "diaspora";
+      uid = config.ids.uids.diaspora;
+      group = "diaspora";
+      description = "Diaspora user";
+      home = diaspora.railsRoot;
+      useDefaultShell = true;
+      packages = [ diaspora.gems pkgs.nodejs diaspora.gems.ruby ];
+    };
+
+    users.groups.diaspora.gid = config.ids.gids.diaspora;
+
+    systemd.services.diaspora = {
+      description = "Diaspora";
+      wantedBy = [ "multi-user.target" ];
+      after = [ "network.target" "redis.service" "postgresql.service" ];
+      wants = [ "redis.service" "postgresql.service" ];
+
+      environment.RAILS_ENV = "production";
+      environment.BUNDLE_PATH = "${diaspora.gems}/lib/ruby/gems/2.4.0";
+      environment.BUNDLE_GEMFILE = "${diaspora.gems.confFiles}/Gemfile";
+      environment.EYE_SOCK = "${diaspora.socketsDir}/eye.sock";
+      environment.EYE_PID = "${diaspora.socketsDir}/eye.pid";
+
+      path = [ diaspora.gems pkgs.nodejs diaspora.gems.ruby pkgs.curl pkgs.which pkgs.gawk ];
+
+      preStart = ''
+        ./bin/bundle exec rails db:migrate
+      '';
+
+      script = ''
+        exec ${diaspora.railsRoot}/script/server
+      '';
+
+      serviceConfig = {
+        User = "diaspora";
+        PrivateTmp = true;
+        Restart = "always";
+        Type = "simple";
+        WorkingDirectory = diaspora.railsRoot;
+        StandardInput = "null";
+        KillMode = "control-group";
+      };
+
+      unitConfig.RequiresMountsFor = diaspora.varDir;
+    };
+
+    # FIXME: initial sync
+    # FIXME: touch ${diaspora.varDir}/schedule.yml
+    system.activationScripts.diaspora = {
+      deps = [ "users" ];
+      text = ''
+      install -m 0755 -o diaspora -g diaspora -d ${diaspora.socketsDir}
+      install -m 0755 -o diaspora -g diaspora -d ${diaspora.varDir} \
+        ${diaspora.varDir}/uploads ${diaspora.varDir}/tmp \
+        ${diaspora.varDir}/log
+      install -m 0700 -o diaspora -g diaspora -d ${diaspora.varDir}/tmp/pids
+      if [ ! -f ${diaspora.varDir}/schedule.yml ]; then
+        echo "{}" | $wrapperDir/sudo -u diaspora tee ${diaspora.varDir}/schedule.yml
+      fi
+      '';
+    };
+
+    services.myWebsites.tools.modules = [
+      "headers" "proxy" "proxy_http" "proxy_balancer"
+      # FIXME: probably only one balancer method is needed:
+      "lbmethod_byrequests" "lbmethod_bytraffic" "lbmethod_bybusyness" "lbmethod_heartbeat"
+    ];
+    security.acme.certs."eldiron".extraDomains."diaspora.immae.eu" = null;
+    services.myWebsites.tools.vhostConfs.diaspora = {
+      certName    = "eldiron";
+      hosts       = [ "diaspora.immae.eu" ];
+      root        = "${diaspora.railsRoot}/public/";
+      extraConfig = [ ''
+        RewriteEngine On
+        RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
+        RewriteRule ^/(.*)$ balancer://thinservers%{REQUEST_URI} [P,QSA,L]
+
+        <Proxy balancer://thinservers>
+            BalancerMember unix://${diaspora.railsSocket}|http://
+        </Proxy>
+
+        ProxyRequests Off
+        ProxyVia On
+        ProxyPreserveHost On
+        RequestHeader set X_FORWARDED_PROTO https
+
+        <Proxy *>
+            Require all granted
+        </Proxy>
+
+        <Directory ${diaspora.railsRoot}/public>
+            Require all granted
+            Options -MultiViews
+        </Directory>
+      '' ];
+    };
+  };
+}
diff --git a/virtual/modules/websites/tools/diaspora/diaspora.json b/virtual/modules/websites/tools/diaspora/diaspora.json
new file mode 100644 (file)
index 0000000..d5891c1
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "tag": "v0.7.8.0",
+  "meta": {
+    "name": "diaspora",
+    "url": "https://github.com/diaspora/diaspora",
+    "branch": "refs/tags/v0.7.8.0"
+  },
+  "github": {
+    "owner": "diaspora",
+    "repo": "diaspora",
+    "rev": "e1b66f3c7cb72bd2cc9cf51475b31b005a547556",
+    "sha256": "1cgyb878zhdnkh7qa9qj8lwaf0jlb1prg1qnqasf7j5kgh9wn0nn",
+    "fetchSubmodules": true
+  }
+}
diff --git a/virtual/modules/websites/tools/diaspora/diaspora.nix b/virtual/modules/websites/tools/diaspora/diaspora.nix
new file mode 100644 (file)
index 0000000..7880ac5
--- /dev/null
@@ -0,0 +1,173 @@
+{ checkEnv, fetchedGithub, stdenv, defaultGemConfig, writeText, bundlerEnv, ruby_2_4, pkgs, cacert }:
+let
+  gems = bundlerEnv {
+    name = "diaspora-env";
+    ruby = ruby_2_4;
+    gemdir = ./.;
+    # FIXME: it fails if I don’t include all groups
+    #groups = [ "default" "postgresql" "production" "development" "test" ];
+    # Had to remove them from gemset.nix, and remove mysql2
+    # Also had to "ungroup" pg in Gemfile
+    gemConfig = defaultGemConfig // {
+      kostya-sigar = attrs: {
+        buildInputs = with pkgs; [ pkgs.perl ];
+      };
+    };
+  };
+  varDir = "/var/lib/diaspora_immae";
+  socketsDir = "/run/diaspora";
+  buildInputs =  [ gems ] ++ (with pkgs; [
+    git redis imagemagick libxslt nodejs
+    jemalloc cacert ruby_2_4
+    openssl postgresql curl libnghttp2
+    pkgconfig which
+  ]);
+  diaspora = stdenv.mkDerivation (fetchedGithub ./diaspora.json // rec {
+    buildPhase = ''
+      export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt
+      export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
+
+      patch -p1 < ${./ldap.patch}
+    '';
+    installPhase = ''
+      cp -a . $out
+    '';
+    propagatedBuildInputs = buildInputs;
+  });
+  secret_token = assert checkEnv "NIXOPS_DIASPORA_SECRET_TOKEN";
+    writeText "secret_token.rb" ''
+    Diaspora::Application.config.secret_key_base = '${builtins.getEnv "NIXOPS_DIASPORA_SECRET_TOKEN"}'
+    '';
+  config =
+    assert checkEnv "NIXOPS_DIASPORA_LDAP_PASSWORD";
+    writeText "diaspora.yml" ''
+      configuration:
+        environment:
+          url: "https://diaspora.immae.eu/"
+          certificate_authorities: '/etc/ssl/certs/ca-certificates.crt'
+          redis: 'redis://localhost:6379/15'
+          sidekiq:
+          s3:
+          assets:
+          logging:
+            logrotate:
+            debug:
+        server:
+          listen: '${socketsDir}/diaspora.sock'
+          rails_environment: 'production'
+        chat:
+          server:
+            bosh:
+            log:
+        map:
+          mapbox:
+        privacy:
+          piwik:
+          statistics:
+          camo:
+        settings:
+          enable_registrations: false
+          welcome_message:
+          invitations:
+            open: false
+          paypal_donations:
+          community_spotlight:
+          captcha:
+            enable: false
+          terms:
+          maintenance:
+            remove_old_users:
+          default_metas:
+          csp:
+        services:
+          twitter:
+          tumblr:
+          wordpress:
+        mail:
+          enable: true
+          sender_address: 'diaspora@immae.eu'
+          method: 'smtp'
+          smtp:
+            host: 'mail.immae.eu'
+          sendmail:
+        admins:
+          account: "ismael"
+          podmin_email: 'diaspora@immae.eu'
+        relay:
+          outbound:
+          inbound:
+        ldap:
+            enable: true
+            host: ldap.immae.eu
+            port: 636
+            only_ldap: true
+            mail_attribute: mail
+            skip_email_confirmation: true
+            use_bind_dn: true
+            bind_dn: "cn=diaspora,ou=services,dc=immae,dc=eu"
+            bind_pw: "${builtins.getEnv "NIXOPS_DIASPORA_LDAP_PASSWORD"}"
+            search_base: "dc=immae,dc=eu"
+            search_filter: "(&(memberOf=cn=users,cn=diaspora,ou=services,dc=immae,dc=eu)(uid=%{username}))"
+      production:
+        environment:
+      development:
+        environment:
+    '';
+  database_config =
+    assert checkEnv "NIXOPS_DIASPORA_SQL_PASSWORD";
+    writeText "database.yml" ''
+      postgresql: &postgresql
+        adapter: postgresql
+        host: db-1.immae.eu
+        port: 5432
+        username: "diaspora"
+        password: "${builtins.getEnv "NIXOPS_DIASPORA_SQL_PASSWORD"}"
+        encoding: unicode
+      common: &common
+        <<: *postgresql
+      combined: &combined
+        <<: *common
+      development:
+        <<: *combined
+        database: diaspora_development
+      production:
+        <<: *combined
+        database: diaspora
+      test:
+        <<: *combined
+        database: "diaspora_test"
+      integration1:
+        <<: *combined
+        database: diaspora_integration1
+      integration2:
+        <<: *combined
+        database: diaspora_integration2
+    '';
+
+    railsRoot = stdenv.mkDerivation {
+      name = "diaspora_immae";
+      inherit diaspora;
+      builder = writeText "build_diaspora_immae" ''
+        source $stdenv/setup
+        cp -a $diaspora $out
+        cd $out
+        chmod -R u+rwX .
+        tar -czf public/source.tar.gz ./{app,db,lib,script,Gemfile,Gemfile.lock,Rakefile,config.ru}
+        ln -s ${database_config} config/database.yml
+        ln -s ${config} config/diaspora.yml
+        ln -s ${secret_token} config/initializers/secret_token.rb
+        ln -sf ../../../../../../${varDir}/schedule.yml config/schedule.yml
+        ln -sf ../../../../../../${varDir}/oidc_key.pem config/oidc_key.pem
+        ln -sf ../../../../../../${varDir}/uploads public/uploads
+        RAILS_ENV=production ${gems}/bin/rake assets:precompile
+        rm -rf tmp log
+        ln -sf ../../../../../${varDir}/tmp tmp
+        ln -sf ../../../../../${varDir}/log log
+        '';
+      propagatedBuildInputs = buildInputs;
+    };
+in
+  {
+    inherit railsRoot varDir socketsDir gems;
+    railsSocket = "${socketsDir}/diaspora.sock";
+  }
diff --git a/virtual/modules/websites/tools/diaspora/gemset.nix b/virtual/modules/websites/tools/diaspora/gemset.nix
new file mode 100644 (file)
index 0000000..66482f0
--- /dev/null
@@ -0,0 +1,3045 @@
+{
+  actioncable = {
+    dependencies = ["actionpack" "nio4r" "websocket-driver"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  actionmailer = {
+    dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  actionpack = {
+    dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  actionview = {
+    dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  active_model_serializers = {
+    dependencies = ["activemodel" "concurrent-ruby"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z";
+      type = "gem";
+    };
+    version = "0.9.7";
+  };
+  activejob = {
+    dependencies = ["activesupport" "globalid"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  activemodel = {
+    dependencies = ["activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport" "arel"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  activerecord-import = {
+    dependencies = ["activerecord"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6";
+      type = "gem";
+    };
+    version = "0.27.0";
+  };
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  acts-as-taggable-on = {
+    dependencies = ["activerecord"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl";
+      type = "gem";
+    };
+    version = "6.0.0";
+  };
+  acts_as_api = {
+    dependencies = ["activemodel" "activesupport" "rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
+      type = "gem";
+    };
+    version = "2.5.2";
+  };
+  aes_key_wrap = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  arel = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl";
+      type = "gem";
+    };
+    version = "8.0.0";
+  };
+  asset_sync = {
+    dependencies = ["activemodel" "fog-core" "mime-types" "unf"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  ast = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  attr_required = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  autoprefixer-rails = {
+    dependencies = ["execjs"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3";
+      type = "gem";
+    };
+    version = "8.6.5";
+  };
+  backports = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g";
+      type = "gem";
+    };
+    version = "3.11.4";
+  };
+  bcrypt = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy";
+      type = "gem";
+    };
+    version = "3.1.12";
+  };
+  bindata = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy";
+      type = "gem";
+    };
+    version = "2.4.4";
+  };
+  bootstrap-sass = {
+    dependencies = ["autoprefixer-rails" "sass"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  bootstrap-switch-rails = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qdk7xx0zlv4l49s2mwg4jd8a5ms3cy43n9l3217bknagcjyjfjx";
+      type = "gem";
+    };
+    version = "3.3.4";
+  };
+  buftok = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  builder = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  byebug = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8";
+      type = "gem";
+    };
+    version = "10.0.2";
+  };
+  capybara = {
+    dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  carrierwave = {
+    dependencies = ["activemodel" "activesupport" "mime-types"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  celluloid = {
+    dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg";
+      type = "gem";
+    };
+    version = "0.17.3";
+  };
+  celluloid-essentials = {
+    dependencies = ["timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k";
+      type = "gem";
+    };
+    version = "0.20.5";
+  };
+  celluloid-extras = {
+    dependencies = ["timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng";
+      type = "gem";
+    };
+    version = "0.20.5";
+  };
+  celluloid-fsm = {
+    dependencies = ["timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc";
+      type = "gem";
+    };
+    version = "0.20.5";
+  };
+  celluloid-io = {
+    dependencies = ["celluloid" "nio4r" "timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314";
+      type = "gem";
+    };
+    version = "0.17.3";
+  };
+  celluloid-pool = {
+    dependencies = ["timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c";
+      type = "gem";
+    };
+    version = "0.20.5";
+  };
+  celluloid-supervision = {
+    dependencies = ["timers"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw";
+      type = "gem";
+    };
+    version = "0.20.6";
+  };
+  chunky_png = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w";
+      type = "gem";
+    };
+    version = "1.3.10";
+  };
+  cliver = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  coderay = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  compass = {
+    dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  compass-core = {
+    dependencies = ["multi_json" "sass"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  compass-import-once = {
+    dependencies = ["sass"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  compass-rails = {
+    dependencies = ["compass" "sass-rails" "sprockets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  concurrent-ruby = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  configurate = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  connection_pool = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  coveralls = {
+    dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg";
+      type = "gem";
+    };
+    version = "0.8.22";
+  };
+  crack = {
+    dependencies = ["safe_yaml"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k";
+      type = "gem";
+    };
+    version = "0.4.3";
+  };
+  crass = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  cucumber = {
+    dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  cucumber-api-steps = {
+    dependencies = ["cucumber" "jsonpath"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw";
+      type = "gem";
+    };
+    version = "0.14.0";
+  };
+  cucumber-core = {
+    dependencies = ["backports" "cucumber-tag_expressions" "gherkin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  cucumber-expressions = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw";
+      type = "gem";
+    };
+    version = "6.0.1";
+  };
+  cucumber-rails = {
+    dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  cucumber-tag_expressions = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  cucumber-wire = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  database_cleaner = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  devise = {
+    dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx";
+      type = "gem";
+    };
+    version = "4.5.0";
+  };
+  devise_lastseenable = {
+    dependencies = ["devise" "rails"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y";
+      type = "gem";
+    };
+    version = "0.0.6";
+  };
+  diaspora-prosody-config = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  diaspora_federation = {
+    dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  diaspora_federation-json_schema = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  diaspora_federation-rails = {
+    dependencies = ["actionpack" "diaspora_federation"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  diaspora_federation-test = {
+    dependencies = ["diaspora_federation" "fabrication" "uuid"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  diff-lcs = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  docile = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v";
+      type = "gem";
+    };
+    version = "0.5.20180417";
+  };
+  entypo-rails = {
+    dependencies = ["railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  equalizer = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  erubi = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  eslintrb = {
+    dependencies = ["execjs" "multi_json" "rake"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  et-orbi = {
+    dependencies = ["tzinfo"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  excon = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2";
+      type = "gem";
+    };
+    version = "0.62.0";
+  };
+  execjs = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  eye = {
+    dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  fabrication = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri";
+      type = "gem";
+    };
+    version = "2.20.1";
+  };
+  factory_girl = {
+    dependencies = ["activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla";
+      type = "gem";
+    };
+    version = "4.8.0";
+  };
+  factory_girl_rails = {
+    dependencies = ["factory_girl" "railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv";
+      type = "gem";
+    };
+    version = "4.8.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52";
+      type = "gem";
+    };
+    version = "0.15.3";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6";
+      type = "gem";
+    };
+    version = "0.0.6";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  ffi = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q";
+      type = "gem";
+    };
+    version = "1.9.25";
+  };
+  fixture_builder = {
+    dependencies = ["activerecord" "activesupport" "hashdiff"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627";
+      type = "gem";
+    };
+    version = "0.5.2.rc3";
+  };
+  fog-aws = {
+    dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  fog-core = {
+    dependencies = ["builder" "excon" "formatador" "mime-types"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  fog-json = {
+    dependencies = ["fog-core" "multi_json"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  fog-xml = {
+    dependencies = ["fog-core" "nokogiri"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  formatador = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  fugit = {
+    dependencies = ["et-orbi" "raabro"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  fuubar = {
+    dependencies = ["rspec-core" "ruby-progressbar"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  get_process_mem = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  gherkin = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s";
+      type = "gem";
+    };
+    version = "5.1.0";
+  };
+  gitlab = {
+    dependencies = ["httparty" "terminal-table"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34";
+      type = "gem";
+    };
+    version = "4.7.0";
+  };
+  globalid = {
+    dependencies = ["activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38";
+      type = "gem";
+    };
+    version = "0.4.1";
+  };
+  gon = {
+    dependencies = ["actionpack" "multi_json" "request_store"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl";
+      type = "gem";
+    };
+    version = "6.2.1";
+  };
+  guard = {
+    dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk";
+      type = "gem";
+    };
+    version = "2.15.0";
+  };
+  guard-compat = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  guard-rspec = {
+    dependencies = ["guard" "guard-compat" "rspec"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4";
+      type = "gem";
+    };
+    version = "4.7.3";
+  };
+  guard-rubocop = {
+    dependencies = ["guard" "rubocop"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  haml = {
+    dependencies = ["temple" "tilt"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac";
+      type = "gem";
+    };
+    version = "5.0.4";
+  };
+  haml_lint = {
+    dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv";
+      type = "gem";
+    };
+    version = "0.28.0";
+  };
+  hamlit = {
+    dependencies = ["temple" "thor" "tilt"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf";
+      type = "gem";
+    };
+    version = "2.9.1";
+  };
+  handlebars_assets = {
+    dependencies = ["execjs" "sprockets" "tilt"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca";
+      type = "gem";
+    };
+    version = "0.23.2";
+  };
+  hashdiff = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9";
+      type = "gem";
+    };
+    version = "0.3.7";
+  };
+  hashie = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb";
+      type = "gem";
+    };
+    version = "3.5.7";
+  };
+  http = {
+    dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  http-form_data = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  http_accept_language = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  "http_parser.rb" = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  httparty = {
+    dependencies = ["mime-types" "multi_xml"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730";
+      type = "gem";
+    };
+    version = "0.16.3";
+  };
+  httpclient = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  i18n-inflector = {
+    dependencies = ["i18n"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g";
+      type = "gem";
+    };
+    version = "2.6.7";
+  };
+  i18n-inflector-rails = {
+    dependencies = ["actionpack" "i18n-inflector" "railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  ipaddress = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45";
+      type = "gem";
+    };
+    version = "0.8.3";
+  };
+  jaro_winkler = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  jasmine = {
+    dependencies = ["jasmine-core" "phantomjs" "rack" "rake"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  jasmine-core = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  jasmine-jquery-rails = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  jquery-rails = {
+    dependencies = ["rails-dom-testing" "railties" "thor"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8";
+      type = "gem";
+    };
+    version = "4.3.3";
+  };
+  js-routes = {
+    dependencies = ["railties" "sprockets-rails"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  js_image_paths = {
+    dependencies = ["rails" "sprockets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  json = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  json-jwt = {
+    dependencies = ["activesupport" "aes_key_wrap" "bindata"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r";
+      type = "gem";
+    };
+    version = "1.9.4";
+  };
+  json-schema = {
+    dependencies = ["addressable"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  json-schema-rspec = {
+    dependencies = ["json-schema" "rspec"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  jsonpath = {
+    dependencies = ["multi_json" "to_regexp"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d";
+      type = "gem";
+    };
+    version = "0.9.6";
+  };
+  jwt = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  kgio = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50";
+      type = "gem";
+    };
+    version = "2.11.2";
+  };
+  kostya-sigar = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  leaflet-rails = {
+    dependencies = ["rails"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
+      type = "gem";
+    };
+    version = "3.1.5";
+  };
+  little-plugger = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  logging-rails = {
+    dependencies = ["logging"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  loofah = {
+    dependencies = ["crass" "nokogiri"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  lumberjack = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n";
+      type = "gem";
+    };
+    version = "1.0.13";
+  };
+  macaddr = {
+    dependencies = ["systemu"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  mail = {
+    dependencies = ["mini_mime"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  markdown-it-html5-embed = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  markerb = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  memoizable = {
+    dependencies = ["thread_safe"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  method_source = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk";
+      type = "gem";
+    };
+    version = "3.2.2";
+  };
+  mime-types-data = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc";
+      type = "gem";
+    };
+    version = "3.2018.0812";
+  };
+  mini_magick = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p";
+      type = "gem";
+    };
+    version = "4.9.2";
+  };
+  mini_mime = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  mini_portile2 = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  minitest = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
+      type = "gem";
+    };
+    version = "5.11.3";
+  };
+  mobile-fu = {
+    dependencies = ["rack-mobile-detect" "rails"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  multi_json = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multi_test = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  multi_xml = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  multipart-post = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  naught = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  nenv = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  net-ldap = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "016igqz81a8zcwqzp5bbhryqmb2skmyf57ij3nb5z8sxwhw22jgh";
+      type = "gem";
+    };
+    version = "0.16.1";
+  };
+  nio4r = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  notiffany = {
+    dependencies = ["nenv" "shellany"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  oauth = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  oauth2 = {
+    dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  octokit = {
+    dependencies = ["sawyer"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6";
+      type = "gem";
+    };
+    version = "4.13.0";
+  };
+  omniauth = {
+    dependencies = ["hashie" "rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  omniauth-oauth = {
+    dependencies = ["oauth" "omniauth"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  omniauth-oauth2 = {
+    dependencies = ["oauth2" "omniauth"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  omniauth-tumblr = {
+    dependencies = ["multi_json" "omniauth-oauth"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  omniauth-twitter = {
+    dependencies = ["omniauth-oauth" "rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  omniauth-wordpress = {
+    dependencies = ["omniauth-oauth2"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  open_graph_reader = {
+    dependencies = ["faraday" "nokogiri"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  openid_connect = {
+    dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  orm_adapter = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  parallel = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67";
+      type = "gem";
+    };
+    version = "1.12.1";
+  };
+  parser = {
+    dependencies = ["ast"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f";
+      type = "gem";
+    };
+    version = "2.5.3.0";
+  };
+  pg = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  phantomjs = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk";
+      type = "gem";
+    };
+    version = "2.1.1.0";
+  };
+  poltergeist = {
+    dependencies = ["capybara" "cliver" "websocket-driver"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95";
+      type = "gem";
+    };
+    version = "1.18.1";
+  };
+  powerpack = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  pronto = {
+    dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz";
+      type = "gem";
+    };
+    version = "0.9.5";
+  };
+  pronto-eslint = {
+    dependencies = ["eslintrb" "pronto"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  pronto-haml = {
+    dependencies = ["haml_lint" "pronto"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  pronto-rubocop = {
+    dependencies = ["pronto" "rubocop"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  pronto-scss = {
+    dependencies = ["pronto" "scss_lint"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  pry-byebug = {
+    dependencies = ["byebug" "pry"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  public_suffix = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  raabro = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  rack = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  rack-cors = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  rack-google-analytics = {
+    dependencies = ["actionpack" "activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  rack-mobile-detect = {
+    dependencies = ["rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  rack-oauth2 = {
+    dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii";
+      type = "gem";
+    };
+    version = "1.9.3";
+  };
+  rack-piwik = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  rack-rewrite = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  rack-ssl = {
+    dependencies = ["rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  rails = {
+    dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  rails-assets-autosize = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib";
+      type = "gem";
+    };
+    version = "4.0.2";
+  };
+  rails-assets-backbone = {
+    dependencies = ["rails-assets-underscore"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id";
+      type = "gem";
+    };
+    version = "1.3.3";
+  };
+  rails-assets-blueimp-gallery = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq";
+      type = "gem";
+    };
+    version = "2.33.0";
+  };
+  rails-assets-bootstrap = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  rails-assets-bootstrap-markdown = {
+    dependencies = ["rails-assets-bootstrap"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3";
+      type = "gem";
+    };
+    version = "2.10.0";
+  };
+  rails-assets-corejs-typeahead = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  rails-assets-diaspora_jsxc = {
+    dependencies = ["rails-assets-emojione" "rails-assets-favico.js" "rails-assets-jquery-colorbox" "rails-assets-jquery-fullscreen-plugin" "rails-assets-jquery.slimscroll" "rails-assets-jquery.ui"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi";
+      type = "gem";
+    };
+    version = "0.1.5.develop.7";
+  };
+  rails-assets-emojione = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  "rails-assets-favico.js" = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv";
+      type = "gem";
+    };
+    version = "0.3.10";
+  };
+  rails-assets-fine-uploader = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv";
+      type = "gem";
+    };
+    version = "5.13.0";
+  };
+  rails-assets-highlightjs = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp";
+      type = "gem";
+    };
+    version = "9.12.0";
+  };
+  rails-assets-jasmine = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  rails-assets-jasmine-ajax = {
+    dependencies = ["rails-assets-jasmine"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  rails-assets-jquery = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  rails-assets-jquery-colorbox = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp";
+      type = "gem";
+    };
+    version = "1.6.4";
+  };
+  rails-assets-jquery-fullscreen-plugin = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  rails-assets-jquery-placeholder = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  rails-assets-jquery-textchange = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  "rails-assets-jquery.are-you-sure" = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0";
+      type = "gem";
+    };
+    version = "1.9.0";
+  };
+  "rails-assets-jquery.slimscroll" = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998";
+      type = "gem";
+    };
+    version = "1.3.8";
+  };
+  "rails-assets-jquery.ui" = {
+    dependencies = ["rails-assets-jquery"];
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa";
+      type = "gem";
+    };
+    version = "1.11.4";
+  };
+  rails-assets-markdown-it = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9";
+      type = "gem";
+    };
+    version = "8.4.2";
+  };
+  rails-assets-markdown-it--markdown-it-for-inline = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  rails-assets-markdown-it-diaspora-mention = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  rails-assets-markdown-it-hashtag = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  rails-assets-markdown-it-sanitizer = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36";
+      type = "gem";
+    };
+    version = "0.4.3";
+  };
+  rails-assets-markdown-it-sub = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  rails-assets-markdown-it-sup = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  rails-assets-underscore = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc";
+      type = "gem";
+    };
+    version = "1.9.1";
+  };
+  rails-assets-utatti-perfect-scrollbar = {
+    platforms = [];
+    source = {
+      remotes = ["https://rails-assets.org"];
+      sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  rails-controller-testing = {
+    dependencies = ["actionpack" "actionview" "activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  rails-dom-testing = {
+    dependencies = ["activesupport" "nokogiri"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  rails-html-sanitizer = {
+    dependencies = ["loofah"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  rails-i18n = {
+    dependencies = ["i18n" "railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l";
+      type = "gem";
+    };
+    version = "5.1.2";
+  };
+  rails-timeago = {
+    dependencies = ["actionpack" "activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv";
+      type = "gem";
+    };
+    version = "2.16.0";
+  };
+  railties = {
+    dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8";
+      type = "gem";
+    };
+    version = "5.1.6";
+  };
+  rainbow = {
+    dependencies = ["rake"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  raindrops = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  rake = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg";
+      type = "gem";
+    };
+    version = "12.3.1";
+  };
+  rb-fsevent = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
+      type = "gem";
+    };
+    version = "0.10.3";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
+      type = "gem";
+    };
+    version = "0.9.10";
+  };
+  redcarpet = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  redis = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv";
+      type = "gem";
+    };
+    version = "3.3.5";
+  };
+  regexp_parser = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  request_store = {
+    dependencies = ["rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  responders = {
+    dependencies = ["actionpack" "railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm";
+      type = "gem";
+    };
+    version = "3.8.2";
+  };
+  rspec-json_expectations = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  rspec-rails = {
+    dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p";
+      type = "gem";
+    };
+    version = "3.8.1";
+  };
+  rspec-support = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  rubocop = {
+    dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i";
+      type = "gem";
+    };
+    version = "0.60.0";
+  };
+  ruby-oembed = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  ruby-progressbar = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  ruby_dep = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  rubyzip = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  rugged = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6";
+      type = "gem";
+    };
+    version = "0.27.5";
+  };
+  safe_yaml = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  sass = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw";
+      type = "gem";
+    };
+    version = "3.4.25";
+  };
+  sass-rails = {
+    dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s";
+      type = "gem";
+    };
+    version = "5.0.7";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  scss_lint = {
+    dependencies = ["rake" "sass"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp";
+      type = "gem";
+    };
+    version = "0.55.0";
+  };
+  secure_headers = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5";
+      type = "gem";
+    };
+    version = "6.0.0";
+  };
+  shellany = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf";
+      type = "gem";
+    };
+    version = "0.0.1";
+  };
+  shoulda-matchers = {
+    dependencies = ["activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a";
+      type = "gem";
+    };
+    version = "3.1.2";
+  };
+  sidekiq = {
+    dependencies = ["connection_pool" "rack-protection" "redis"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26";
+      type = "gem";
+    };
+    version = "5.2.3";
+  };
+  sidekiq-cron = {
+    dependencies = ["fugit" "sidekiq"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  simple_captcha2 = {
+    dependencies = ["rails"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3";
+      type = "gem";
+    };
+    version = "0.4.3";
+  };
+  simple_oauth = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  simplecov = {
+    dependencies = ["docile" "json" "simplecov-html"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947";
+      type = "gem";
+    };
+    version = "0.16.1";
+  };
+  simplecov-html = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  sinon-rails = {
+    dependencies = ["railties"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  spring = {
+    dependencies = ["activesupport"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  spring-commands-cucumber = {
+    dependencies = ["spring"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  spring-commands-rspec = {
+    dependencies = ["spring"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  sprockets = {
+    dependencies = ["concurrent-ruby" "rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sprockets-rails = {
+    dependencies = ["actionpack" "activesupport" "sprockets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  state_machines = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  string-direction = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  swd = {
+    dependencies = ["activesupport" "attr_required" "httpclient"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  sysexits = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  systemu = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1";
+      type = "gem";
+    };
+    version = "2.6.5";
+  };
+  temple = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  term-ansicolor = {
+    dependencies = ["tins"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  thor = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns";
+      type = "gem";
+    };
+    version = "0.19.4";
+  };
+  thread_safe = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tilt = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra";
+      type = "gem";
+    };
+    version = "2.0.8";
+  };
+  timecop = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  timers = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx";
+      type = "gem";
+    };
+    version = "4.2.0";
+  };
+  tins = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj";
+      type = "gem";
+    };
+    version = "1.20.2";
+  };
+  to_regexp = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  turbo_dev_assets = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  twitter = {
+    dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5";
+      type = "gem";
+    };
+    version = "6.2.0";
+  };
+  twitter-text = {
+    dependencies = ["unf"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg";
+      type = "gem";
+    };
+    version = "1.14.7";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
+      type = "gem";
+    };
+    version = "1.2.5";
+  };
+  uglifier = {
+    dependencies = ["execjs"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1";
+      type = "gem";
+    };
+    version = "4.1.19";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1";
+      type = "gem";
+    };
+    version = "0.0.7.5";
+  };
+  unicode-display_width = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  unicorn = {
+    dependencies = ["kgio" "raindrops"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak";
+      type = "gem";
+    };
+    version = "5.4.1";
+  };
+  unicorn-worker-killer = {
+    dependencies = ["get_process_mem" "unicorn"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva";
+      type = "gem";
+    };
+    version = "0.4.4";
+  };
+  uuid = {
+    dependencies = ["macaddr"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f";
+      type = "gem";
+    };
+    version = "2.3.9";
+  };
+  valid = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  validate_email = {
+    dependencies = ["activemodel" "mail"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx";
+      type = "gem";
+    };
+    version = "0.1.6";
+  };
+  validate_url = {
+    dependencies = ["activemodel" "addressable"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  versionist = {
+    dependencies = ["activesupport" "railties" "yard"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  warden = {
+    dependencies = ["rack"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454";
+      type = "gem";
+    };
+    version = "1.2.8";
+  };
+  webfinger = {
+    dependencies = ["activesupport" "httpclient"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  webmock = {
+    dependencies = ["addressable" "crack" "hashdiff"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib";
+      type = "gem";
+    };
+    version = "3.4.2";
+  };
+  websocket-driver = {
+    dependencies = ["websocket-extensions"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l";
+      type = "gem";
+    };
+    version = "0.6.5";
+  };
+  websocket-extensions = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270";
+      type = "gem";
+    };
+    version = "0.1.3";
+  };
+  will_paginate = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9";
+      type = "gem";
+    };
+    version = "3.1.6";
+  };
+  xpath = {
+    dependencies = ["nokogiri"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  yard = {
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67";
+      type = "gem";
+    };
+    version = "0.9.16";
+  };
+}
diff --git a/virtual/modules/websites/tools/diaspora/ldap.patch b/virtual/modules/websites/tools/diaspora/ldap.patch
new file mode 100644 (file)
index 0000000..3d4f785
--- /dev/null
@@ -0,0 +1,256 @@
+commit 936a14e225037aca4cdeac11c843c7985e636c88
+Author: Ismaël Bouya <ismael.bouya@normalesup.org>
+Date:   Mon Jul 24 19:58:24 2017 +0200
+
+    Add LDAP to diaspora
+
+diff --git a/Gemfile b/Gemfile
+index 414b0138d..2a934e9c9 100644
+--- a/Gemfile
++++ b/Gemfile
+@@ -217,6 +217,9 @@ gem "thor", "0.19.1"
+ # gem "therubyracer", :platform => :ruby
++# LDAP
++gem 'net-ldap', '~> 0.16'
++
+ group :production do # we don"t install these on travis to speed up test runs
+   # Analytics
+diff --git a/Gemfile.lock b/Gemfile.lock
+index 84f8172e4..cdbf19fcd 100644
+--- a/Gemfile.lock     2019-01-13 19:55:52.538561762 +0100
++++ b/Gemfile.lock     2019-01-13 19:58:11.087099067 +0100
+@@ -398,6 +398,7 @@
+     mysql2 (0.5.2)
+     naught (1.1.0)
+     nenv (0.3.0)
++    net-ldap (0.16.1)
+     nio4r (2.3.1)
+     nokogiri (1.8.5)
+       mini_portile2 (~> 2.3.0)
+@@ -820,6 +821,7 @@
+   minitest
+   mobile-fu (= 1.4.0)
+   mysql2 (= 0.5.2)
++  net-ldap (~> 0.16)
+   nokogiri (= 1.8.5)
+   omniauth (= 1.8.1)
+   omniauth-tumblr (= 1.2)
+diff --git a/app/models/user.rb b/app/models/user.rb
+index 940a48f25..d1e2beeee 100644
+--- a/app/models/user.rb
++++ b/app/models/user.rb
+@@ -337,6 +337,12 @@ class User < ActiveRecord::Base
+   end
+   def send_confirm_email
++    if skip_email_confirmation?
++      self.email = unconfirmed_email
++      self.unconfirmed_email = nil
++      save
++    end
++
+     return if unconfirmed_email.blank?
+     Workers::Mail::ConfirmEmail.perform_async(id)
+   end
+@@ -554,6 +560,14 @@ class User < ActiveRecord::Base
+     end
+   end
++  def ldap_user?
++    AppConfig.ldap.enable? && ldap_dn.present?
++  end
++
++  def skip_email_confirmation?
++    ldap_user? && AppConfig.ldap.skip_email_confirmation?
++  end
++
+   private
+   def clearable_fields
+diff --git a/config/defaults.yml b/config/defaults.yml
+index c046aff07..66e9afa13 100644
+--- a/config/defaults.yml
++++ b/config/defaults.yml
+@@ -202,6 +202,20 @@ defaults:
+       scope: tags
+       include_user_tags: false
+       pod_tags:
++  ldap:
++    enable: false
++    host: localhost
++    port: 389
++    only_ldap: true
++    mail_attribute: mail
++    skip_email_confirmation: true
++    use_bind_dn: true
++    bind_dn: "cn=diaspora,dc=example,dc=com"
++    bind_pw: "password"
++    search_base: "dc=example,dc=com"
++    search_filter: "uid=%{username}"
++    bind_template: "uid=%{username},dc=example,dc=com"
++
+ development:
+   environment:
+diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example
+index b2573625d..c357c8651 100644
+--- a/config/diaspora.yml.example
++++ b/config/diaspora.yml.example
+@@ -710,6 +710,36 @@ configuration: ## Section
+       ## If scope is 'tags', a comma separated list of tags here can be set.
+       ## For example "linux,diaspora", to receive posts related to these tags
+       #pod_tags:
++  ldap:
++      # Uncomment next line if you want to use LDAP on your instance
++      enable: true
++      host: localhost
++      port: 389
++      # Use only LDAP authentication (don't try other means)
++      only_ldap: true
++      # LDAP attribute to find the user's e-mail. Necessary to create accounts
++      # for not existing users
++      mail_attribute: mail
++      # Skip e-mail confirmation when creating an account via LDAP.
++      skip_email_confirmation: true
++      # ----- Using bind_dn and bind_pw
++      # bind_dn and bind_pw may be used if the diaspora instance
++      # should be able to connect to LDAP to find and search for users.
++
++      use_bind_dn: true
++      bind_dn: "cn=diaspora,dc=example,dc=com"
++      bind_pw: "password"
++      search_base: "dc=example,dc=com"
++      # This is the filter with which to search for the user. %{username} will
++      # be replaced by the given login.
++      search_filter: "uid=%{username}"
++      #
++      # ----- Using template
++      # This setting doesn't require a diaspora LDAP user. Use a template, and
++      # diaspora will try to login with the templated dn and password
++      #
++      # bind_template: "uid=%{username},dc=example,dc=com"
++
+ ## Here you can override settings defined above if you need
+ ## to have them different in different environments.
+diff --git a/config/initializers/0_ldap_authenticatable.rb b/config/initializers/0_ldap_authenticatable.rb
+new file mode 100644
+index 000000000..49846502f
+--- /dev/null
++++ b/config/initializers/0_ldap_authenticatable.rb
+@@ -0,0 +1,82 @@
++require 'net/ldap'
++require 'devise/strategies/authenticatable'
++
++module Devise
++  module Strategies
++    class LdapAuthenticatable < Authenticatable
++      def valid?
++        AppConfig.ldap.enable? && params[:user].present?
++      end
++
++      def authenticate!
++        ldap = Net::LDAP.new(
++          host: AppConfig.ldap.host,
++          port: AppConfig.ldap.port,
++          encryption: :simple_tls,
++        )
++
++        if AppConfig.ldap.use_bind_dn?
++          ldap.auth AppConfig.ldap.bind_dn, AppConfig.ldap.bind_pw
++
++          if !ldap.bind
++            return fail(:ldap_configuration_error)
++          end
++
++          search_filter = AppConfig.ldap.search_filter % { username: params[:user][:username] }
++
++          result = ldap.search(base: AppConfig.ldap.search_base, filter: search_filter, result_set: true)
++
++          if result.count != 1
++            return login_fail
++          end
++
++          user_dn    = result.first.dn
++          user_email = result.first[AppConfig.ldap.mail_attribute].first
++        else
++          user_dn = AppConfig.ldap.bind_template % { username: params[:user][:username] }
++        end
++
++        ldap.auth user_dn, params[:user][:password]
++
++        if ldap.bind
++          user = User.find_by(ldap_dn: user_dn)
++
++          # We don't want to trust too much the email attribute from
++          # LDAP: if the user can edit it himself, he may login as
++          # anyone
++          if user.nil?
++            if !AppConfig.ldap.use_bind_dn?
++              result = ldap.search(base: user_dn, scope: Net::LDAP::SearchScope_BaseObject, filter: "(objectClass=*)", result_set: true)
++              user_email = result.first[AppConfig.ldap.mail_attribute].first
++            end
++
++            if user_email.present? && User.find_by(email: user_email).nil?
++              # Password is used for remember_me token
++              user = User.build(email: user_email, ldap_dn: user_dn, password: SecureRandom.hex, username: params[:user][:username])
++              user.save
++              user.seed_aspects
++            elsif User.find_by(email: user_email).present?
++              return fail(:ldap_existing_email)
++            else
++              return fail(:ldap_cannot_create_account_without_email)
++            end
++          end
++
++          success!(user)
++        else
++          return login_fail
++        end
++      end
++
++      def login_fail
++        if AppConfig.ldap.only_ldap?
++          return fail(:ldap_invalid_login)
++        else
++          return pass
++        end
++      end
++    end
++  end
++end
++
++Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
+diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
+index 3698e2373..14e88063e 100644
+--- a/config/initializers/devise.rb
++++ b/config/initializers/devise.rb
+@@ -250,10 +250,9 @@ Devise.setup do |config|
+   # If you want to use other strategies, that are not supported by Devise, or
+   # change the failure app, you can configure them inside the config.warden block.
+   #
+-  # config.warden do |manager|
+-  #   manager.intercept_401 = false
+-  #   manager.default_strategies(:scope => :user).unshift :some_external_strategy
+-  # end
++  config.warden do |manager|
++    manager.default_strategies(scope: :user).unshift :ldap_authenticatable
++  end
+   # ==> Mountable engine configurations
+   # When using Devise inside an engine, let's call it `MyEngine`, and this engine
+diff --git a/db/migrate/20170724182100_add_ldap_dn_to_users.rb b/db/migrate/20170724182100_add_ldap_dn_to_users.rb
+new file mode 100644
+index 000000000..f5cc84d11
+--- /dev/null
++++ b/db/migrate/20170724182100_add_ldap_dn_to_users.rb
+@@ -0,0 +1,6 @@
++class AddLdapDnToUsers < ActiveRecord::Migration
++  def change
++    add_column :users, :ldap_dn, :text, null: true, default: nil
++    add_index :users, ['ldap_dn'], :length => { "ldap_dn" => 191 }
++  end
++end