From a7f7fdae99f7617fb7fdabe1e65423e02a4982b1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 14 Jan 2019 18:05:03 +0100 Subject: [PATCH] Add diaspora services --- default.nix | 1 + virtual/modules/databases/default.nix | 1 + virtual/modules/websites/default.nix | 2 + .../modules/websites/tools/diaspora/Gemfile | 318 ++ .../websites/tools/diaspora/Gemfile.lock | 909 +++++ .../websites/tools/diaspora/default.nix | 117 + .../websites/tools/diaspora/diaspora.json | 15 + .../websites/tools/diaspora/diaspora.nix | 173 + .../websites/tools/diaspora/gemset.nix | 3045 +++++++++++++++++ .../websites/tools/diaspora/ldap.patch | 256 ++ 10 files changed, 4837 insertions(+) create mode 100644 virtual/modules/websites/tools/diaspora/Gemfile create mode 100644 virtual/modules/websites/tools/diaspora/Gemfile.lock create mode 100644 virtual/modules/websites/tools/diaspora/default.nix create mode 100644 virtual/modules/websites/tools/diaspora/diaspora.json create mode 100644 virtual/modules/websites/tools/diaspora/diaspora.nix create mode 100644 virtual/modules/websites/tools/diaspora/gemset.nix create mode 100644 virtual/modules/websites/tools/diaspora/ldap.patch diff --git a/default.nix b/default.nix index 9e79550..bc8ecc9 100644 --- a/default.nix +++ b/default.nix @@ -310,4 +310,5 @@ in inherit strace; inherit notmuch; stgit = gitAndTools.stgit; + inherit bundix; }) diff --git a/virtual/modules/databases/default.nix b/virtual/modules/databases/default.nix index cb3d5bf..0e21837 100644 --- a/virtual/modules/databases/default.nix +++ b/virtual/modules/databases/default.nix @@ -162,6 +162,7 @@ in { ]; # FIXME: backup + # Diaspora: 15 # Nextcloud: 14 # Mastodon: 13 # Mediagoblin: 12 diff --git a/virtual/modules/websites/default.nix b/virtual/modules/websites/default.nix index 5f92b8c..4b1490b 100644 --- a/virtual/modules/websites/default.nix +++ b/virtual/modules/websites/default.nix @@ -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 index 0000000..e279514 --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/Gemfile @@ -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 index 0000000..ceb08c1 --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/Gemfile.lock @@ -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 index 0000000..23670dc --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/default.nix @@ -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] + + + BalancerMember unix://${diaspora.railsSocket}|http:// + + + ProxyRequests Off + ProxyVia On + ProxyPreserveHost On + RequestHeader set X_FORWARDED_PROTO https + + + Require all granted + + + + Require all granted + Options -MultiViews + + '' ]; + }; + }; +} diff --git a/virtual/modules/websites/tools/diaspora/diaspora.json b/virtual/modules/websites/tools/diaspora/diaspora.json new file mode 100644 index 0000000..d5891c1 --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/diaspora.json @@ -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 index 0000000..7880ac5 --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/diaspora.nix @@ -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 index 0000000..66482f0 --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/gemset.nix @@ -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 index 0000000..3d4f785 --- /dev/null +++ b/virtual/modules/websites/tools/diaspora/ldap.patch @@ -0,0 +1,256 @@ +commit 936a14e225037aca4cdeac11c843c7985e636c88 +Author: Ismaël Bouya +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 -- 2.41.0