aboutsummaryrefslogtreecommitdiff
path: root/nixops/modules
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2019-05-04 02:12:30 +0200
committerIsmaël Bouya <ismael.bouya@normalesup.org>2019-05-04 02:12:30 +0200
commit3bb8a82ab2d07c82682885ee6f8f08ad8170ebc0 (patch)
treec29032dd97bfa57fee75654023b7b7b90c0d95ed /nixops/modules
parent452c23140ea93ce301e7fafdc37d28009bd6f613 (diff)
downloadNix-3bb8a82ab2d07c82682885ee6f8f08ad8170ebc0.tar.gz
Nix-3bb8a82ab2d07c82682885ee6f8f08ad8170ebc0.tar.zst
Nix-3bb8a82ab2d07c82682885ee6f8f08ad8170ebc0.zip
Move diaspora to pkgs
Diffstat (limited to 'nixops/modules')
-rw-r--r--nixops/modules/websites/tools/diaspora/default.nix172
-rw-r--r--nixops/modules/websites/tools/diaspora/diaspora.json15
-rw-r--r--nixops/modules/websites/tools/diaspora/diaspora.nix187
-rw-r--r--nixops/modules/websites/tools/diaspora/gemset.nix3056
-rw-r--r--nixops/modules/websites/tools/diaspora/ldap.patch256
5 files changed, 151 insertions, 3535 deletions
diff --git a/nixops/modules/websites/tools/diaspora/default.nix b/nixops/modules/websites/tools/diaspora/default.nix
index 0a05daf..53989b7 100644
--- a/nixops/modules/websites/tools/diaspora/default.nix
+++ b/nixops/modules/websites/tools/diaspora/default.nix
@@ -1,10 +1,17 @@
1{ lib, pkgs, config, myconfig, mylibs, ... }: 1{ lib, pkgs, config, myconfig, mylibs, ... }:
2let 2let
3 diaspora = pkgs.callPackage ./diaspora.nix { 3 varDir = "/var/lib/diaspora_immae";
4 inherit (mylibs) fetchedGithub; 4
5 env = myconfig.env.tools.diaspora; 5 diaspora = pkgs.webapps.diaspora.override {
6 ldap = true;
7 inherit varDir;
8 podmin_email = "diaspora@tools.immae.eu";
9 config_dir = "/var/secrets/webapps/diaspora";
6 }; 10 };
7 11
12 railsSocket = "${socketsDir}/diaspora.sock";
13 socketsDir = "/run/diaspora";
14 env = myconfig.env.tools.diaspora;
8 root = "/run/current-system/webapps/tools_diaspora"; 15 root = "/run/current-system/webapps/tools_diaspora";
9 cfg = config.services.myWebsites.tools.diaspora; 16 cfg = config.services.myWebsites.tools.diaspora;
10in { 17in {
@@ -13,23 +20,146 @@ in {
13 }; 20 };
14 21
15 config = lib.mkIf cfg.enable { 22 config = lib.mkIf cfg.enable {
16 ids.uids.diaspora = myconfig.env.tools.diaspora.user.uid; 23 ids.uids.diaspora = env.user.uid;
17 ids.gids.diaspora = myconfig.env.tools.diaspora.user.gid; 24 ids.gids.diaspora = env.user.gid;
18 25
19 users.users.diaspora = { 26 users.users.diaspora = {
20 name = "diaspora"; 27 name = "diaspora";
21 uid = config.ids.uids.diaspora; 28 uid = config.ids.uids.diaspora;
22 group = "diaspora"; 29 group = "diaspora";
23 description = "Diaspora user"; 30 description = "Diaspora user";
24 home = diaspora.varDir; 31 home = varDir;
25 useDefaultShell = true; 32 useDefaultShell = true;
26 packages = [ diaspora.gems pkgs.nodejs diaspora.gems.ruby ]; 33 packages = [ diaspora.gems pkgs.nodejs diaspora.gems.ruby ];
27 extraGroups = [ "keys" ]; 34 extraGroups = [ "keys" ];
28 }; 35 };
29 36
30 users.groups.diaspora.gid = config.ids.gids.diaspora; 37 users.groups.diaspora.gid = config.ids.gids.diaspora;
38 mySecrets.keys = [
39 {
40 dest = "webapps/diaspora/diaspora.yml";
41 user = "diaspora";
42 group = "diaspora";
43 permissions = "0400";
44 text = ''
45 configuration:
46 environment:
47 url: "https://diaspora.immae.eu/"
48 certificate_authorities: '${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt'
49 redis: '${env.redis_url}'
50 sidekiq:
51 s3:
52 assets:
53 logging:
54 logrotate:
55 debug:
56 server:
57 listen: '${socketsDir}/diaspora.sock'
58 rails_environment: 'production'
59 chat:
60 server:
61 bosh:
62 log:
63 map:
64 mapbox:
65 privacy:
66 piwik:
67 statistics:
68 camo:
69 settings:
70 enable_registrations: false
71 welcome_message:
72 invitations:
73 open: false
74 paypal_donations:
75 community_spotlight:
76 captcha:
77 enable: false
78 terms:
79 maintenance:
80 remove_old_users:
81 default_metas:
82 csp:
83 services:
84 twitter:
85 tumblr:
86 wordpress:
87 mail:
88 enable: true
89 sender_address: 'diaspora@tools.immae.eu'
90 method: 'sendmail'
91 smtp:
92 sendmail:
93 location: '/run/wrappers/bin/sendmail'
94 admins:
95 account: "ismael"
96 podmin_email: 'diaspora@tools.immae.eu'
97 relay:
98 outbound:
99 inbound:
100 ldap:
101 enable: true
102 host: ldap.immae.eu
103 port: 636
104 only_ldap: true
105 mail_attribute: mail
106 skip_email_confirmation: true
107 use_bind_dn: true
108 bind_dn: "cn=diaspora,ou=services,dc=immae,dc=eu"
109 bind_pw: "${env.ldap.password}"
110 search_base: "dc=immae,dc=eu"
111 search_filter: "(&(memberOf=cn=users,cn=diaspora,ou=services,dc=immae,dc=eu)(uid=%{username}))"
112 production:
113 environment:
114 development:
115 environment:
116 '';
117 }
118 {
119 dest = "webapps/diaspora/database.yml";
120 user = "diaspora";
121 group = "diaspora";
122 permissions = "0400";
123 text = ''
124 postgresql: &postgresql
125 adapter: postgresql
126 host: "${env.postgresql.socket}"
127 port: "${env.postgresql.port}"
128 username: "${env.postgresql.user}"
129 password: "${env.postgresql.password}"
130 encoding: unicode
131 common: &common
132 <<: *postgresql
133 combined: &combined
134 <<: *common
135 development:
136 <<: *combined
137 database: diaspora_development
138 production:
139 <<: *combined
140 database: ${env.postgresql.database}
141 test:
142 <<: *combined
143 database: "diaspora_test"
144 integration1:
145 <<: *combined
146 database: diaspora_integration1
147 integration2:
148 <<: *combined
149 database: diaspora_integration2
150 '';
151 }
152 {
153 dest = "webapps/diaspora/secret_token.rb";
154 user = "diaspora";
155 group = "diaspora";
156 permissions = "0400";
157 text = ''
158 Diaspora::Application.config.secret_key_base = '${env.secret_token}'
159 '';
160 }
161 ];
31 162
32 mySecrets.keys = diaspora.keys;
33 systemd.services.diaspora = { 163 systemd.services.diaspora = {
34 description = "Diaspora"; 164 description = "Diaspora";
35 wantedBy = [ "multi-user.target" ]; 165 wantedBy = [ "multi-user.target" ];
@@ -43,8 +173,8 @@ in {
43 environment.RAILS_ENV = "production"; 173 environment.RAILS_ENV = "production";
44 environment.BUNDLE_PATH = "${diaspora.gems}/${diaspora.gems.ruby.gemPath}"; 174 environment.BUNDLE_PATH = "${diaspora.gems}/${diaspora.gems.ruby.gemPath}";
45 environment.BUNDLE_GEMFILE = "${diaspora.gems.confFiles}/Gemfile"; 175 environment.BUNDLE_GEMFILE = "${diaspora.gems.confFiles}/Gemfile";
46 environment.EYE_SOCK = "${diaspora.socketsDir}/eye.sock"; 176 environment.EYE_SOCK = "${socketsDir}/eye.sock";
47 environment.EYE_PID = "${diaspora.socketsDir}/eye.pid"; 177 environment.EYE_PID = "${socketsDir}/eye.pid";
48 178
49 path = [ diaspora.gems pkgs.nodejs diaspora.gems.ruby pkgs.curl pkgs.which pkgs.gawk ]; 179 path = [ diaspora.gems pkgs.nodejs diaspora.gems.ruby pkgs.curl pkgs.which pkgs.gawk ];
50 180
@@ -53,7 +183,7 @@ in {
53 ''; 183 '';
54 184
55 script = '' 185 script = ''
56 exec ${diaspora.railsRoot}/script/server 186 exec ${diaspora}/script/server
57 ''; 187 '';
58 188
59 serviceConfig = { 189 serviceConfig = {
@@ -61,24 +191,24 @@ in {
61 PrivateTmp = true; 191 PrivateTmp = true;
62 Restart = "always"; 192 Restart = "always";
63 Type = "simple"; 193 Type = "simple";
64 WorkingDirectory = diaspora.railsRoot; 194 WorkingDirectory = diaspora;
65 StandardInput = "null"; 195 StandardInput = "null";
66 KillMode = "control-group"; 196 KillMode = "control-group";
67 }; 197 };
68 198
69 unitConfig.RequiresMountsFor = diaspora.varDir; 199 unitConfig.RequiresMountsFor = varDir;
70 }; 200 };
71 201
72 system.activationScripts.diaspora = { 202 system.activationScripts.diaspora = {
73 deps = [ "users" ]; 203 deps = [ "users" ];
74 text = '' 204 text = ''
75 install -m 0755 -o diaspora -g diaspora -d ${diaspora.socketsDir} 205 install -m 0755 -o diaspora -g diaspora -d ${socketsDir}
76 install -m 0755 -o diaspora -g diaspora -d ${diaspora.varDir} \ 206 install -m 0755 -o diaspora -g diaspora -d ${varDir} \
77 ${diaspora.varDir}/uploads ${diaspora.varDir}/tmp \ 207 ${varDir}/uploads ${varDir}/tmp \
78 ${diaspora.varDir}/log 208 ${varDir}/log
79 install -m 0700 -o diaspora -g diaspora -d ${diaspora.varDir}/tmp/pids 209 install -m 0700 -o diaspora -g diaspora -d ${varDir}/tmp/pids
80 if [ ! -f ${diaspora.varDir}/schedule.yml ]; then 210 if [ ! -f ${varDir}/schedule.yml ]; then
81 echo "{}" | $wrapperDir/sudo -u diaspora tee ${diaspora.varDir}/schedule.yml 211 echo "{}" | $wrapperDir/sudo -u diaspora tee ${varDir}/schedule.yml
82 fi 212 fi
83 ''; 213 '';
84 }; 214 };
@@ -89,7 +219,7 @@ in {
89 security.acme.certs."eldiron".extraDomains."diaspora.immae.eu" = null; 219 security.acme.certs."eldiron".extraDomains."diaspora.immae.eu" = null;
90 system.extraSystemBuilderCmds = '' 220 system.extraSystemBuilderCmds = ''
91 mkdir -p $out/webapps 221 mkdir -p $out/webapps
92 ln -s ${diaspora.railsRoot}/public/ $out/webapps/tools_diaspora 222 ln -s ${diaspora}/public/ $out/webapps/tools_diaspora
93 ''; 223 '';
94 services.myWebsites.tools.vhostConfs.diaspora = { 224 services.myWebsites.tools.vhostConfs.diaspora = {
95 certName = "eldiron"; 225 certName = "eldiron";
@@ -98,7 +228,7 @@ in {
98 extraConfig = [ '' 228 extraConfig = [ ''
99 RewriteEngine On 229 RewriteEngine On
100 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f 230 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
101 RewriteRule ^/(.*)$ unix://${diaspora.railsSocket}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L] 231 RewriteRule ^/(.*)$ unix://${railsSocket}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L]
102 232
103 ProxyRequests Off 233 ProxyRequests Off
104 ProxyVia On 234 ProxyVia On
diff --git a/nixops/modules/websites/tools/diaspora/diaspora.json b/nixops/modules/websites/tools/diaspora/diaspora.json
deleted file mode 100644
index e6795aa..0000000
--- a/nixops/modules/websites/tools/diaspora/diaspora.json
+++ /dev/null
@@ -1,15 +0,0 @@
1{
2 "tag": "v0.7.10.0",
3 "meta": {
4 "name": "diaspora",
5 "url": "https://github.com/diaspora/diaspora",
6 "branch": "refs/tags/v0.7.10.0"
7 },
8 "github": {
9 "owner": "diaspora",
10 "repo": "diaspora",
11 "rev": "f0085cf5bb1c45bdfba866f628153d299e56eca8",
12 "sha256": "02mnb40rdkk6jlnvpy61fad59gbpgnlwz1k35w4wfqdwzq0znaqp",
13 "fetchSubmodules": true
14 }
15}
diff --git a/nixops/modules/websites/tools/diaspora/diaspora.nix b/nixops/modules/websites/tools/diaspora/diaspora.nix
deleted file mode 100644
index 01aac89..0000000
--- a/nixops/modules/websites/tools/diaspora/diaspora.nix
+++ /dev/null
@@ -1,187 +0,0 @@
1{ env, fetchedGithub, stdenv, defaultGemConfig, writeText, bundlerEnv, ruby_2_4, pkgs, cacert }:
2let
3 varDir = "/var/lib/diaspora_immae";
4 socketsDir = "/run/diaspora";
5 diaspora = stdenv.mkDerivation (fetchedGithub ./diaspora.json // rec {
6 buildPhase = ''
7 patch -p1 < ${./ldap.patch}
8 # FIXME: bundlerEnv below doesn't take postgresql group for some
9 # reason
10 echo 'gem "pg", "1.1.3"' >> Gemfile
11 '';
12 installPhase = ''
13 cp -a . $out
14 '';
15 });
16 gems = bundlerEnv {
17 name = "diaspora-env";
18 # https://git.immae.eu/mantisbt/view.php?id=131
19 ruby = ruby_2_4.overrideAttrs(old: {
20 postInstall = builtins.replaceStrings [" --destdir $GEM_HOME"] [""] old.postInstall;
21 });
22 gemfile = "${diaspora}/Gemfile";
23 lockfile = "${diaspora}/Gemfile.lock";
24 gemset = ./gemset.nix;
25 groups = [ "postgresql" "default" "production" ];
26 gemConfig = defaultGemConfig // {
27 kostya-sigar = attrs: {
28 buildInputs = [ pkgs.perl ];
29 };
30 };
31 };
32 keys = {
33 secret_token = {
34 dest = "webapps/tools-diaspora-secret_token";
35 user = "diaspora";
36 group = "diaspora";
37 permissions = "0400";
38 text = ''
39 Diaspora::Application.config.secret_key_base = '${env.secret_token}'
40 '';
41 };
42 config = {
43 dest = "webapps/tools-diaspora-config";
44 user = "diaspora";
45 group = "diaspora";
46 permissions = "0400";
47 text = ''
48 configuration:
49 environment:
50 url: "https://diaspora.immae.eu/"
51 certificate_authorities: '${cacert}/etc/ssl/certs/ca-bundle.crt'
52 redis: '${env.redis_url}'
53 sidekiq:
54 s3:
55 assets:
56 logging:
57 logrotate:
58 debug:
59 server:
60 listen: '${socketsDir}/diaspora.sock'
61 rails_environment: 'production'
62 chat:
63 server:
64 bosh:
65 log:
66 map:
67 mapbox:
68 privacy:
69 piwik:
70 statistics:
71 camo:
72 settings:
73 enable_registrations: false
74 welcome_message:
75 invitations:
76 open: false
77 paypal_donations:
78 community_spotlight:
79 captcha:
80 enable: false
81 terms:
82 maintenance:
83 remove_old_users:
84 default_metas:
85 csp:
86 services:
87 twitter:
88 tumblr:
89 wordpress:
90 mail:
91 enable: true
92 sender_address: 'diaspora@tools.immae.eu'
93 method: 'sendmail'
94 smtp:
95 sendmail:
96 location: '/run/wrappers/bin/sendmail'
97 admins:
98 account: "ismael"
99 podmin_email: 'diaspora@tools.immae.eu'
100 relay:
101 outbound:
102 inbound:
103 ldap:
104 enable: true
105 host: ldap.immae.eu
106 port: 636
107 only_ldap: true
108 mail_attribute: mail
109 skip_email_confirmation: true
110 use_bind_dn: true
111 bind_dn: "cn=diaspora,ou=services,dc=immae,dc=eu"
112 bind_pw: "${env.ldap.password}"
113 search_base: "dc=immae,dc=eu"
114 search_filter: "(&(memberOf=cn=users,cn=diaspora,ou=services,dc=immae,dc=eu)(uid=%{username}))"
115 production:
116 environment:
117 development:
118 environment:
119 '';
120 };
121 database = {
122 dest = "webapps/tools-diaspora-database_config";
123 user = "diaspora";
124 group = "diaspora";
125 permissions = "0400";
126 text = ''
127 postgresql: &postgresql
128 adapter: postgresql
129 host: "${env.postgresql.socket}"
130 port: "${env.postgresql.port}"
131 username: "${env.postgresql.user}"
132 password: "${env.postgresql.password}"
133 encoding: unicode
134 common: &common
135 <<: *postgresql
136 combined: &combined
137 <<: *common
138 development:
139 <<: *combined
140 database: diaspora_development
141 production:
142 <<: *combined
143 database: ${env.postgresql.database}
144 test:
145 <<: *combined
146 database: "diaspora_test"
147 integration1:
148 <<: *combined
149 database: diaspora_integration1
150 integration2:
151 <<: *combined
152 database: diaspora_integration2
153 '';
154 };
155 };
156 railsRoot = stdenv.mkDerivation {
157 name = "diaspora_immae";
158 inherit diaspora;
159 # FIXME: build machine will contain some passwords in the nix store
160 builder = writeText "build_diaspora_immae" ''
161 source $stdenv/setup
162 cp -a $diaspora $out
163 cd $out
164 chmod -R u+rwX .
165 tar -czf public/source.tar.gz ./{app,db,lib,script,Gemfile,Gemfile.lock,Rakefile,config.ru}
166 ln -s ${writeText "database.yml" keys.database.text} config/database.yml
167 ln -s ${writeText "diaspora.yml" keys.config.text} config/diaspora.yml
168 ln -s ${writeText "secret_token.rb" keys.secret_token.text} config/initializers/secret_token.rb
169 ln -sf ${varDir}/schedule.yml config/schedule.yml
170 ln -sf ${varDir}/oidc_key.pem config/oidc_key.pem
171 ln -sf ${varDir}/uploads public/uploads
172 RAILS_ENV=production ${gems}/bin/rake assets:precompile
173 ln -sf /var/secrets/webapps/tools-diaspora-database_config config/database.yml
174 ln -sf /var/secrets/webapps/tools-diaspora-config config/diaspora.yml
175 ln -sf /var/secrets/webapps/tools-diaspora-secret_token config/initializers/secret_token.rb
176 rm -rf tmp log
177 ln -sf ${varDir}/tmp tmp
178 ln -sf ${varDir}/log log
179 '';
180 propagatedBuildInputs = [ gems pkgs.nodejs pkgs.which pkgs.git ];
181 };
182in
183 {
184 inherit railsRoot varDir socketsDir gems;
185 keys = builtins.attrValues keys;
186 railsSocket = "${socketsDir}/diaspora.sock";
187 }
diff --git a/nixops/modules/websites/tools/diaspora/gemset.nix b/nixops/modules/websites/tools/diaspora/gemset.nix
deleted file mode 100644
index f946088..0000000
--- a/nixops/modules/websites/tools/diaspora/gemset.nix
+++ /dev/null
@@ -1,3056 +0,0 @@
1{
2 actioncable = {
3 dependencies = ["actionpack" "nio4r" "websocket-driver"];
4 platforms = [];
5 source = {
6 remotes = ["https://rubygems.org"];
7 sha256 = "07r6hnh05db84yr9419mbhyzp20hr8yy9m50jxc2w91ghm2qnrrf";
8 type = "gem";
9 };
10 version = "5.1.6";
11 };
12 actionmailer = {
13 dependencies = ["actionpack" "actionview" "activejob" "mail" "rails-dom-testing"];
14 platforms = [];
15 source = {
16 remotes = ["https://rubygems.org"];
17 sha256 = "1s9xcqfx97q4yva2zc4qzb567mwzhry6v3x3zc318aqhcrz31g7c";
18 type = "gem";
19 };
20 version = "5.1.6";
21 };
22 actionpack = {
23 dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
24 platforms = [];
25 source = {
26 remotes = ["https://rubygems.org"];
27 sha256 = "0vz2ms80nqw21c304g3w2vkbs80gadzhi3mcwwym7smxccr37kcd";
28 type = "gem";
29 };
30 version = "5.1.6";
31 };
32 actionview = {
33 dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
34 platforms = [];
35 source = {
36 remotes = ["https://rubygems.org"];
37 sha256 = "1kfxlz9v7b47pdyy1whb4zzhvaj8h4sp1ajhbih2ax1hkldyg081";
38 type = "gem";
39 };
40 version = "5.1.6";
41 };
42 active_model_serializers = {
43 dependencies = ["activemodel" "concurrent-ruby"];
44 platforms = [];
45 source = {
46 remotes = ["https://rubygems.org"];
47 sha256 = "19zr5pp84q4ya7mfrcanakjv86lv4wfmbcbbd2xnd4bkyprw5w7z";
48 type = "gem";
49 };
50 version = "0.9.7";
51 };
52 activejob = {
53 dependencies = ["activesupport" "globalid"];
54 platforms = [];
55 source = {
56 remotes = ["https://rubygems.org"];
57 sha256 = "02lssq8ps98mfg20dyhcpd16f9c0v4zzy7gfbb6ksbs06wrrd4d2";
58 type = "gem";
59 };
60 version = "5.1.6";
61 };
62 activemodel = {
63 dependencies = ["activesupport"];
64 platforms = [];
65 source = {
66 remotes = ["https://rubygems.org"];
67 sha256 = "10f8cpv4sl1w3m1qj8hl6sd2f1n7x91h45qaf57qr894ll22jgby";
68 type = "gem";
69 };
70 version = "5.1.6";
71 };
72 activerecord = {
73 dependencies = ["activemodel" "activesupport" "arel"];
74 platforms = [];
75 source = {
76 remotes = ["https://rubygems.org"];
77 sha256 = "1iqkvxzx5bfp8rmlccww0cj1xr6iaxmn3hhbj1dv5j9c8mnm980x";
78 type = "gem";
79 };
80 version = "5.1.6";
81 };
82 activerecord-import = {
83 dependencies = ["activerecord"];
84 platforms = [];
85 source = {
86 remotes = ["https://rubygems.org"];
87 sha256 = "1bxpbrcwc9k6khizwdikvfbhw9pcvs4sp3h4grpcww5k7bgpliz6";
88 type = "gem";
89 };
90 version = "0.27.0";
91 };
92 activesupport = {
93 dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
94 platforms = [];
95 source = {
96 remotes = ["https://rubygems.org"];
97 sha256 = "08dm0mgmj31ggk7ib66wfagj4bgbr2jfl500bqb22x0szslz5lll";
98 type = "gem";
99 };
100 version = "5.1.6";
101 };
102 acts-as-taggable-on = {
103 dependencies = ["activerecord"];
104 platforms = [];
105 source = {
106 remotes = ["https://rubygems.org"];
107 sha256 = "0hl52pjgfzy3acdwnbxfqy08m808vlv9dmsyp03d5x7x0y499kvl";
108 type = "gem";
109 };
110 version = "6.0.0";
111 };
112 acts_as_api = {
113 dependencies = ["activemodel" "activesupport" "rack"];
114 platforms = [];
115 source = {
116 remotes = ["https://rubygems.org"];
117 sha256 = "06miad13nnfr2gslc203ahsbvj499s9lngxxvfizwp964vglygsc";
118 type = "gem";
119 };
120 version = "1.0.1";
121 };
122 addressable = {
123 dependencies = ["public_suffix"];
124 platforms = [];
125 source = {
126 remotes = ["https://rubygems.org"];
127 sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
128 type = "gem";
129 };
130 version = "2.5.2";
131 };
132 aes_key_wrap = {
133 platforms = [];
134 source = {
135 remotes = ["https://rubygems.org"];
136 sha256 = "0li86k0g812jkzrppb2fvqngvzp09nygywjpn81nx90s01wxqw07";
137 type = "gem";
138 };
139 version = "1.0.1";
140 };
141 arel = {
142 platforms = [];
143 source = {
144 remotes = ["https://rubygems.org"];
145 sha256 = "0nw0qbc6ph625p6n3maqq9f527vz3nbl0hk72fbyka8jzsmplxzl";
146 type = "gem";
147 };
148 version = "8.0.0";
149 };
150 asset_sync = {
151 dependencies = ["activemodel" "fog-core" "mime-types" "unf"];
152 platforms = [];
153 source = {
154 remotes = ["https://rubygems.org"];
155 sha256 = "0mfz51g8rzk5h5fpdhfkycnm7y4dpfhx46wm7fygna7nd4w9ixdx";
156 type = "gem";
157 };
158 version = "2.5.0";
159 };
160 ast = {
161 platforms = [];
162 source = {
163 remotes = ["https://rubygems.org"];
164 sha256 = "184ssy3w93nkajlz2c70ifm79jp3j737294kbc5fjw69v1w0n9x7";
165 type = "gem";
166 };
167 version = "2.4.0";
168 };
169 attr_required = {
170 platforms = [];
171 source = {
172 remotes = ["https://rubygems.org"];
173 sha256 = "1g22axmi2rhhy7w8c3x6gppsawxqavbrnxpnmphh22fk7cwi0kh2";
174 type = "gem";
175 };
176 version = "1.0.1";
177 };
178 autoprefixer-rails = {
179 dependencies = ["execjs"];
180 platforms = [];
181 source = {
182 remotes = ["https://rubygems.org"];
183 sha256 = "08irrl1mz6skagr1lygq79l34lc0dghgva0v9q7nng76dpiglgj3";
184 type = "gem";
185 };
186 version = "8.6.5";
187 };
188 backports = {
189 platforms = [];
190 source = {
191 remotes = ["https://rubygems.org"];
192 sha256 = "1hshjxww2h7s0dk57njrygq4zpp0nlqrjfya7zwm27iq3rhc3y8g";
193 type = "gem";
194 };
195 version = "3.11.4";
196 };
197 bcrypt = {
198 platforms = [];
199 source = {
200 remotes = ["https://rubygems.org"];
201 sha256 = "0ysblqxkclmnhrd0kmb5mr8p38mbar633gdsb14b7dhkhgawgzfy";
202 type = "gem";
203 };
204 version = "3.1.12";
205 };
206 bindata = {
207 platforms = [];
208 source = {
209 remotes = ["https://rubygems.org"];
210 sha256 = "0kz42nvxnk1j9cj0i8lcnhprcgdqsqska92g6l19ziadydfk2gqy";
211 type = "gem";
212 };
213 version = "2.4.4";
214 };
215 bootstrap-sass = {
216 dependencies = ["autoprefixer-rails" "sass"];
217 platforms = [];
218 source = {
219 remotes = ["https://rubygems.org"];
220 sha256 = "1bc9bf6caddqn1rv15b5x56yczmbjzaxzl9lk5zbwrg1bfph4bx9";
221 type = "gem";
222 };
223 version = "3.3.7";
224 };
225 bootstrap-switch-rails = {
226 groups = ["default"];
227 platforms = [];
228 source = {
229 remotes = ["https://rubygems.org"];
230 sha256 = "1zkwc1hfmihnm0n9lkva5zk0cmqpfcpnrwnmaniyvgx7rac2r14l";
231 type = "gem";
232 };
233 version = "3.3.3";
234 };
235 buftok = {
236 platforms = [];
237 source = {
238 remotes = ["https://rubygems.org"];
239 sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
240 type = "gem";
241 };
242 version = "0.2.0";
243 };
244 builder = {
245 platforms = [];
246 source = {
247 remotes = ["https://rubygems.org"];
248 sha256 = "0qibi5s67lpdv1wgcj66wcymcr04q6j4mzws6a479n0mlrmh5wr1";
249 type = "gem";
250 };
251 version = "3.2.3";
252 };
253 byebug = {
254 platforms = [];
255 source = {
256 remotes = ["https://rubygems.org"];
257 sha256 = "10znc1hjv8n686hhpl08f3m2g6h08a4b83nxblqwy2kqamkxcqf8";
258 type = "gem";
259 };
260 version = "10.0.2";
261 };
262 capybara = {
263 dependencies = ["addressable" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"];
264 platforms = [];
265 source = {
266 remotes = ["https://rubygems.org"];
267 sha256 = "10zj8syak12xd1kqywr35bkr2hkdjq18kij54x1ys8c26h6j4d0m";
268 type = "gem";
269 };
270 version = "3.11.1";
271 };
272 carrierwave = {
273 dependencies = ["activemodel" "activesupport" "mime-types"];
274 platforms = [];
275 source = {
276 remotes = ["https://rubygems.org"];
277 sha256 = "1k9kla5ncygm97vn33lsrs7ch5zy4qqhhvc8m3khm986yaqh75qs";
278 type = "gem";
279 };
280 version = "1.2.3";
281 };
282 celluloid = {
283 dependencies = ["celluloid-essentials" "celluloid-extras" "celluloid-fsm" "celluloid-pool" "celluloid-supervision" "timers"];
284 platforms = [];
285 source = {
286 remotes = ["https://rubygems.org"];
287 sha256 = "10i29q7kkdlrhf5rg43xygdfm795a02vp28k2ca3nklmqna57qmg";
288 type = "gem";
289 };
290 version = "0.17.3";
291 };
292 celluloid-essentials = {
293 dependencies = ["timers"];
294 platforms = [];
295 source = {
296 remotes = ["https://rubygems.org"];
297 sha256 = "1l4p3p73wjdj07ww124q0db5k1cyzggbndzmcb12xbsf2dnj121k";
298 type = "gem";
299 };
300 version = "0.20.5";
301 };
302 celluloid-extras = {
303 dependencies = ["timers"];
304 platforms = [];
305 source = {
306 remotes = ["https://rubygems.org"];
307 sha256 = "078agvnsfp78jv343kn5g1cz50147dk0q46blwh5r8lk6whag7ng";
308 type = "gem";
309 };
310 version = "0.20.5";
311 };
312 celluloid-fsm = {
313 dependencies = ["timers"];
314 platforms = [];
315 source = {
316 remotes = ["https://rubygems.org"];
317 sha256 = "1pmpi6h4abpkczp46rd6llk1mldpx19i9hll8mkxp3kxin9slivc";
318 type = "gem";
319 };
320 version = "0.20.5";
321 };
322 celluloid-io = {
323 dependencies = ["celluloid" "nio4r" "timers"];
324 platforms = [];
325 source = {
326 remotes = ["https://rubygems.org"];
327 sha256 = "1frcpja7h9vcxsw7w7ff550x54rfx514fpv2n6kawbk1j4zrm314";
328 type = "gem";
329 };
330 version = "0.17.3";
331 };
332 celluloid-pool = {
333 dependencies = ["timers"];
334 platforms = [];
335 source = {
336 remotes = ["https://rubygems.org"];
337 sha256 = "1bfr54ijl95bnhqlabhf5p4ff9n0y2sslc91f49jjn33n2zm755c";
338 type = "gem";
339 };
340 version = "0.20.5";
341 };
342 celluloid-supervision = {
343 dependencies = ["timers"];
344 platforms = [];
345 source = {
346 remotes = ["https://rubygems.org"];
347 sha256 = "1b41gg1rsmms0m5mshy6h66y5rydl3nv6x9wf050ixfa1s2c8vzw";
348 type = "gem";
349 };
350 version = "0.20.6";
351 };
352 chunky_png = {
353 platforms = [];
354 source = {
355 remotes = ["https://rubygems.org"];
356 sha256 = "05g2xli9wbjylkmblln3bhvjalziwb92q452q8ibjagmb853424w";
357 type = "gem";
358 };
359 version = "1.3.10";
360 };
361 cliver = {
362 platforms = [];
363 source = {
364 remotes = ["https://rubygems.org"];
365 sha256 = "096f4rj7virwvqxhkavy0v55rax10r4jqf8cymbvn4n631948xc7";
366 type = "gem";
367 };
368 version = "0.3.2";
369 };
370 coderay = {
371 platforms = [];
372 source = {
373 remotes = ["https://rubygems.org"];
374 sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
375 type = "gem";
376 };
377 version = "1.1.2";
378 };
379 compass = {
380 dependencies = ["chunky_png" "compass-core" "compass-import-once" "rb-fsevent" "rb-inotify" "sass"];
381 platforms = [];
382 source = {
383 remotes = ["https://rubygems.org"];
384 sha256 = "0lfi83w8z75czr0pf0rmj9hda22082h3cmvczl8r1ma9agf88y2c";
385 type = "gem";
386 };
387 version = "1.0.3";
388 };
389 compass-core = {
390 dependencies = ["multi_json" "sass"];
391 platforms = [];
392 source = {
393 remotes = ["https://rubygems.org"];
394 sha256 = "0yaspqwdmzwdcqviclbs3blq7an16pysrfzylz8q1gxmmd6bpj3a";
395 type = "gem";
396 };
397 version = "1.0.3";
398 };
399 compass-import-once = {
400 dependencies = ["sass"];
401 platforms = [];
402 source = {
403 remotes = ["https://rubygems.org"];
404 sha256 = "0bn7gwbfz7jvvdd0qdfqlx67fcb83gyvxqc7dr9fhcnks3z8z5rq";
405 type = "gem";
406 };
407 version = "1.0.5";
408 };
409 compass-rails = {
410 dependencies = ["compass" "sass-rails" "sprockets"];
411 platforms = [];
412 source = {
413 remotes = ["https://rubygems.org"];
414 sha256 = "02ydlbl1qb80myjv5xrpwzhmmj6qd80jf5izvpqhq2bikv84j9wr";
415 type = "gem";
416 };
417 version = "3.1.0";
418 };
419 concurrent-ruby = {
420 platforms = [];
421 source = {
422 remotes = ["https://rubygems.org"];
423 sha256 = "18q9skp5pfq4jwbxzmw8q2rn4cpw6mf4561i2hsjcl1nxdag2jvb";
424 type = "gem";
425 };
426 version = "1.1.3";
427 };
428 configurate = {
429 platforms = [];
430 source = {
431 remotes = ["https://rubygems.org"];
432 sha256 = "1m6cppb4jf7liwc3f5dvgn2v2nhp2jq8ixb9papaqz24f4s8dnd1";
433 type = "gem";
434 };
435 version = "0.3.1";
436 };
437 connection_pool = {
438 platforms = [];
439 source = {
440 remotes = ["https://rubygems.org"];
441 sha256 = "0lflx29mlznf1hn0nihkgllzbj8xp5qasn8j7h838465pi399k68";
442 type = "gem";
443 };
444 version = "2.2.2";
445 };
446 coveralls = {
447 dependencies = ["json" "simplecov" "term-ansicolor" "thor" "tins"];
448 platforms = [];
449 source = {
450 remotes = ["https://rubygems.org"];
451 sha256 = "022kc16np6w4mv17hq3m9hhw9l8hjl78ld3fzqqx6337vwvwvwcg";
452 type = "gem";
453 };
454 version = "0.8.22";
455 };
456 crack = {
457 dependencies = ["safe_yaml"];
458 platforms = [];
459 source = {
460 remotes = ["https://rubygems.org"];
461 sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k";
462 type = "gem";
463 };
464 version = "0.4.3";
465 };
466 crass = {
467 platforms = [];
468 source = {
469 remotes = ["https://rubygems.org"];
470 sha256 = "0bpxzy6gjw9ggjynlxschbfsgmx8lv3zw1azkjvnb8b9i895dqfi";
471 type = "gem";
472 };
473 version = "1.0.4";
474 };
475 cucumber = {
476 dependencies = ["builder" "cucumber-core" "cucumber-expressions" "cucumber-wire" "diff-lcs" "gherkin" "multi_json" "multi_test"];
477 platforms = [];
478 source = {
479 remotes = ["https://rubygems.org"];
480 sha256 = "1s2brssrpal8hyhcgg974x3xyhpmvpwps5ypd9p8w2lg01l1pp3j";
481 type = "gem";
482 };
483 version = "3.1.2";
484 };
485 cucumber-api-steps = {
486 dependencies = ["cucumber" "jsonpath"];
487 platforms = [];
488 source = {
489 remotes = ["https://rubygems.org"];
490 sha256 = "0fij6bgzshda68jp7kac0hs5n6xsmv49g8ynqhy6s3znc9d4qjbw";
491 type = "gem";
492 };
493 version = "0.14.0";
494 };
495 cucumber-core = {
496 dependencies = ["backports" "cucumber-tag_expressions" "gherkin"];
497 platforms = [];
498 source = {
499 remotes = ["https://rubygems.org"];
500 sha256 = "1iavlh8hqj9lwljbpkw06259gdicbr1bdb6pbj5yy3n8szgr8k3c";
501 type = "gem";
502 };
503 version = "3.2.1";
504 };
505 cucumber-expressions = {
506 platforms = [];
507 source = {
508 remotes = ["https://rubygems.org"];
509 sha256 = "0zwmv6hznyz9vk81f5dhwcr9jhxx2vmbk8yyazayvllvhy0fkpdw";
510 type = "gem";
511 };
512 version = "6.0.1";
513 };
514 cucumber-rails = {
515 dependencies = ["capybara" "cucumber" "mime-types" "nokogiri" "railties"];
516 platforms = [];
517 source = {
518 remotes = ["https://rubygems.org"];
519 sha256 = "0pmlza6r2601k1i7v3z8gj4apdcq6qa830bzwkj1pnfjzn4z12n7";
520 type = "gem";
521 };
522 version = "1.6.0";
523 };
524 cucumber-tag_expressions = {
525 platforms = [];
526 source = {
527 remotes = ["https://rubygems.org"];
528 sha256 = "0cvmbljybws0qzjs1l67fvr9gqr005l8jk1ni5gcsis9pfmqh3vc";
529 type = "gem";
530 };
531 version = "1.1.1";
532 };
533 cucumber-wire = {
534 platforms = [];
535 source = {
536 remotes = ["https://rubygems.org"];
537 sha256 = "09ymvqb0sbw2if1nxg8rcj33sf0va88ancq5nmp8g01dfwzwma2f";
538 type = "gem";
539 };
540 version = "0.0.1";
541 };
542 database_cleaner = {
543 platforms = [];
544 source = {
545 remotes = ["https://rubygems.org"];
546 sha256 = "05i0nf2aj70m61y3fspypdkc6d1qgibf5kav05a71b5gjz0k7y5x";
547 type = "gem";
548 };
549 version = "1.7.0";
550 };
551 devise = {
552 dependencies = ["bcrypt" "orm_adapter" "railties" "responders" "warden"];
553 platforms = [];
554 source = {
555 remotes = ["https://rubygems.org"];
556 sha256 = "1vs8nibl568ghm6a7hbw6xgcv8zbm4gykprcxpnzi7bz5d4gvcjx";
557 type = "gem";
558 };
559 version = "4.5.0";
560 };
561 devise_lastseenable = {
562 dependencies = ["devise" "rails"];
563 platforms = [];
564 source = {
565 remotes = ["https://rubygems.org"];
566 sha256 = "1h83h73qjh8fc7lmr089shky8lc3wm4xn653rjdbb0cddflvrx8y";
567 type = "gem";
568 };
569 version = "0.0.6";
570 };
571 diaspora-prosody-config = {
572 platforms = [];
573 source = {
574 remotes = ["https://rubygems.org"];
575 sha256 = "1976ijqjf5jcq1jwr6vi0srjadhbqfa9y3nxyipzcv91pzskl2lp";
576 type = "gem";
577 };
578 version = "0.0.7";
579 };
580 diaspora_federation = {
581 dependencies = ["faraday" "faraday_middleware" "nokogiri" "typhoeus" "valid"];
582 platforms = [];
583 source = {
584 remotes = ["https://rubygems.org"];
585 sha256 = "1xxy6ahlhgyr00qkfmmq0h3nqm6gjkr9i6hsqr0nkb3l6qg0m0yc";
586 type = "gem";
587 };
588 version = "0.2.5";
589 };
590 diaspora_federation-json_schema = {
591 platforms = [];
592 source = {
593 remotes = ["https://rubygems.org"];
594 sha256 = "0hfv4cq5wfdg86xmbp5y0h50b11326ymzks1yr9dvr4wa7di00hr";
595 type = "gem";
596 };
597 version = "0.2.5";
598 };
599 diaspora_federation-rails = {
600 dependencies = ["actionpack" "diaspora_federation"];
601 platforms = [];
602 source = {
603 remotes = ["https://rubygems.org"];
604 sha256 = "1wrni7d9084v3pqd3sq8j532wx5ym6kmd959bw29bzwxc3zidd9h";
605 type = "gem";
606 };
607 version = "0.2.5";
608 };
609 diaspora_federation-test = {
610 dependencies = ["diaspora_federation" "fabrication" "uuid"];
611 platforms = [];
612 source = {
613 remotes = ["https://rubygems.org"];
614 sha256 = "1b09y78pyl9kix8slbybnks2cbq0ac9wml31j2s6qwjixranjsm4";
615 type = "gem";
616 };
617 version = "0.2.5";
618 };
619 diff-lcs = {
620 platforms = [];
621 source = {
622 remotes = ["https://rubygems.org"];
623 sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
624 type = "gem";
625 };
626 version = "1.3";
627 };
628 docile = {
629 platforms = [];
630 source = {
631 remotes = ["https://rubygems.org"];
632 sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17";
633 type = "gem";
634 };
635 version = "1.3.1";
636 };
637 domain_name = {
638 dependencies = ["unf"];
639 platforms = [];
640 source = {
641 remotes = ["https://rubygems.org"];
642 sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v";
643 type = "gem";
644 };
645 version = "0.5.20180417";
646 };
647 entypo-rails = {
648 dependencies = ["railties"];
649 platforms = [];
650 source = {
651 remotes = ["https://rubygems.org"];
652 sha256 = "124x0jszg6n0k2lcacd627ndlp1fv7cbgnv4scwy5s3czp0qwip6";
653 type = "gem";
654 };
655 version = "3.0.0";
656 };
657 equalizer = {
658 platforms = [];
659 source = {
660 remotes = ["https://rubygems.org"];
661 sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
662 type = "gem";
663 };
664 version = "0.0.11";
665 };
666 erubi = {
667 platforms = [];
668 source = {
669 remotes = ["https://rubygems.org"];
670 sha256 = "0bws86na9k565raiz0kk61yy5pxxp0fmwyzpibdwjkq0xzx8q6q1";
671 type = "gem";
672 };
673 version = "1.7.1";
674 };
675 eslintrb = {
676 dependencies = ["execjs" "multi_json" "rake"];
677 platforms = [];
678 source = {
679 remotes = ["https://rubygems.org"];
680 sha256 = "0kx9sbs7pnl436zyczylnqqb1858hffy66fwdqfmcn18q8xdqwkx";
681 type = "gem";
682 };
683 version = "2.1.0";
684 };
685 et-orbi = {
686 dependencies = ["tzinfo"];
687 platforms = [];
688 source = {
689 remotes = ["https://rubygems.org"];
690 sha256 = "0wk7i0bmsy46la8gcvbmdns0ni8lmdqas838phj97bdwykxw8m4b";
691 type = "gem";
692 };
693 version = "1.1.6";
694 };
695 ethon = {
696 dependencies = ["ffi"];
697 platforms = [];
698 source = {
699 remotes = ["https://rubygems.org"];
700 sha256 = "0y70szwm2p0b9qfvpqrzjrgm3jz0ig65vlbfr6ppc3z0m1h7kv48";
701 type = "gem";
702 };
703 version = "0.11.0";
704 };
705 excon = {
706 platforms = [];
707 source = {
708 remotes = ["https://rubygems.org"];
709 sha256 = "15l9w0938c19nxmrp09n75qpmm64k12xj69h47yvxzcxcpbgnkb2";
710 type = "gem";
711 };
712 version = "0.62.0";
713 };
714 execjs = {
715 platforms = [];
716 source = {
717 remotes = ["https://rubygems.org"];
718 sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
719 type = "gem";
720 };
721 version = "2.7.0";
722 };
723 eye = {
724 dependencies = ["celluloid" "celluloid-io" "kostya-sigar" "state_machines" "thor"];
725 platforms = [];
726 source = {
727 remotes = ["https://rubygems.org"];
728 sha256 = "0gqrrrisy492m6sczq775dyg9sxkl926r8lkr6z33kfb4cnimfzk";
729 type = "gem";
730 };
731 version = "0.10.0";
732 };
733 fabrication = {
734 platforms = [];
735 source = {
736 remotes = ["https://rubygems.org"];
737 sha256 = "0an28kjand4mjbkmnwd9fmgq3y5vf717zpmiijavar3sxqj52zri";
738 type = "gem";
739 };
740 version = "2.20.1";
741 };
742 factory_girl = {
743 dependencies = ["activesupport"];
744 platforms = [];
745 source = {
746 remotes = ["https://rubygems.org"];
747 sha256 = "0cc60v28r7w1gp34p4amzdnq7cyip6qhffvxywsj3ypilyf8jqla";
748 type = "gem";
749 };
750 version = "4.8.0";
751 };
752 factory_girl_rails = {
753 dependencies = ["factory_girl" "railties"];
754 platforms = [];
755 source = {
756 remotes = ["https://rubygems.org"];
757 sha256 = "0hw8qqp30vm4yf4a36r1r65wk78ihxmas7jg5fyl6fcf705z9fvv";
758 type = "gem";
759 };
760 version = "4.8.0";
761 };
762 faraday = {
763 dependencies = ["multipart-post"];
764 platforms = [];
765 source = {
766 remotes = ["https://rubygems.org"];
767 sha256 = "16hwxc8v0z6gkanckjhx0ffgqmzpc4ywz4dfhxpjlz2mbz8d5m52";
768 type = "gem";
769 };
770 version = "0.15.3";
771 };
772 faraday-cookie_jar = {
773 dependencies = ["faraday" "http-cookie"];
774 platforms = [];
775 source = {
776 remotes = ["https://rubygems.org"];
777 sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6";
778 type = "gem";
779 };
780 version = "0.0.6";
781 };
782 faraday_middleware = {
783 dependencies = ["faraday"];
784 platforms = [];
785 source = {
786 remotes = ["https://rubygems.org"];
787 sha256 = "1p7icfl28nvl8qqdsngryz1snqic9l8x6bk0dxd7ygn230y0k41d";
788 type = "gem";
789 };
790 version = "0.12.2";
791 };
792 ffi = {
793 platforms = [];
794 source = {
795 remotes = ["https://rubygems.org"];
796 sha256 = "0jpm2dis1j7zvvy3lg7axz9jml316zrn7s0j59vyq3qr127z0m7q";
797 type = "gem";
798 };
799 version = "1.9.25";
800 };
801 fixture_builder = {
802 dependencies = ["activerecord" "activesupport" "hashdiff"];
803 platforms = [];
804 source = {
805 remotes = ["https://rubygems.org"];
806 sha256 = "1qlq0nyfhjvz09hm0jankl9bgs9672k31b3lmsfq8p135x3xs627";
807 type = "gem";
808 };
809 version = "0.5.2.rc3";
810 };
811 fog-aws = {
812 dependencies = ["fog-core" "fog-json" "fog-xml" "ipaddress"];
813 platforms = [];
814 source = {
815 remotes = ["https://rubygems.org"];
816 sha256 = "1zprxg0spvkkri1jf40zg3rfr5h2gq6009d7l36lifpvhjn658cs";
817 type = "gem";
818 };
819 version = "3.3.0";
820 };
821 fog-core = {
822 dependencies = ["builder" "excon" "formatador" "mime-types"];
823 platforms = [];
824 source = {
825 remotes = ["https://rubygems.org"];
826 sha256 = "1fsama04wlxhv537bm4b7rr4zzn0mvisy87m3qzv6f0mhlrq3zp8";
827 type = "gem";
828 };
829 version = "2.1.2";
830 };
831 fog-json = {
832 dependencies = ["fog-core" "multi_json"];
833 platforms = [];
834 source = {
835 remotes = ["https://rubygems.org"];
836 sha256 = "1zj8llzc119zafbmfa4ai3z5s7c4vp9akfs0f9l2piyvcarmlkyx";
837 type = "gem";
838 };
839 version = "1.2.0";
840 };
841 fog-xml = {
842 dependencies = ["fog-core" "nokogiri"];
843 platforms = [];
844 source = {
845 remotes = ["https://rubygems.org"];
846 sha256 = "043lwdw2wsi6d55ifk0w3izi5l1d1h0alwyr3fixic7b94kc812n";
847 type = "gem";
848 };
849 version = "0.1.3";
850 };
851 formatador = {
852 platforms = [];
853 source = {
854 remotes = ["https://rubygems.org"];
855 sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
856 type = "gem";
857 };
858 version = "0.2.5";
859 };
860 fugit = {
861 dependencies = ["et-orbi" "raabro"];
862 platforms = [];
863 source = {
864 remotes = ["https://rubygems.org"];
865 sha256 = "1szijawzdii668z5is9xi849399gy786951dx0l5r2z5mbfqvl9i";
866 type = "gem";
867 };
868 version = "1.1.6";
869 };
870 fuubar = {
871 dependencies = ["rspec-core" "ruby-progressbar"];
872 platforms = [];
873 source = {
874 remotes = ["https://rubygems.org"];
875 sha256 = "1sqkr1nh49rlm86l3qyrgsdqavgqii4pnrjn7855z6dfavh3spxr";
876 type = "gem";
877 };
878 version = "2.3.2";
879 };
880 get_process_mem = {
881 platforms = [];
882 source = {
883 remotes = ["https://rubygems.org"];
884 sha256 = "1bvfjdign16r0zwm2rlfrq0sk1licvmlgbnlpnyckniv5r7i080g";
885 type = "gem";
886 };
887 version = "0.2.3";
888 };
889 gherkin = {
890 platforms = [];
891 source = {
892 remotes = ["https://rubygems.org"];
893 sha256 = "1cgcdchwwdm10rsk44frjwqd4ihprhxjbm799nscqy2q1raqfj5s";
894 type = "gem";
895 };
896 version = "5.1.0";
897 };
898 gitlab = {
899 dependencies = ["httparty" "terminal-table"];
900 platforms = [];
901 source = {
902 remotes = ["https://rubygems.org"];
903 sha256 = "1nncjmk71ivjxmgkpv100yybry5c7ld6xjgi1b5zsfv4g3mz0v34";
904 type = "gem";
905 };
906 version = "4.7.0";
907 };
908 globalid = {
909 dependencies = ["activesupport"];
910 platforms = [];
911 source = {
912 remotes = ["https://rubygems.org"];
913 sha256 = "02smrgdi11kziqi9zhnsy9i6yr2fnxrqlv3lllsvdjki3cd4is38";
914 type = "gem";
915 };
916 version = "0.4.1";
917 };
918 gon = {
919 dependencies = ["actionpack" "multi_json" "request_store"];
920 platforms = [];
921 source = {
922 remotes = ["https://rubygems.org"];
923 sha256 = "07sm7fd94pfscrbs4lyprs0das8s1yn32cw521ch738jaqb388xl";
924 type = "gem";
925 };
926 version = "6.2.1";
927 };
928 guard = {
929 dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"];
930 platforms = [];
931 source = {
932 remotes = ["https://rubygems.org"];
933 sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk";
934 type = "gem";
935 };
936 version = "2.15.0";
937 };
938 guard-compat = {
939 platforms = [];
940 source = {
941 remotes = ["https://rubygems.org"];
942 sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis";
943 type = "gem";
944 };
945 version = "1.2.1";
946 };
947 guard-rspec = {
948 dependencies = ["guard" "guard-compat" "rspec"];
949 platforms = [];
950 source = {
951 remotes = ["https://rubygems.org"];
952 sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4";
953 type = "gem";
954 };
955 version = "4.7.3";
956 };
957 guard-rubocop = {
958 dependencies = ["guard" "rubocop"];
959 platforms = [];
960 source = {
961 remotes = ["https://rubygems.org"];
962 sha256 = "1p97zkzasghl1md13rh57n3s2rr2kqly8w4vfn6vaj89igjpagdp";
963 type = "gem";
964 };
965 version = "1.3.0";
966 };
967 haml = {
968 dependencies = ["temple" "tilt"];
969 platforms = [];
970 source = {
971 remotes = ["https://rubygems.org"];
972 sha256 = "1q0a9fvqh8kn6wm97fcks6qzbjd400bv8bx748w8v87m7p4klhac";
973 type = "gem";
974 };
975 version = "5.0.4";
976 };
977 haml_lint = {
978 dependencies = ["haml" "rainbow" "rake" "rubocop" "sysexits"];
979 platforms = [];
980 source = {
981 remotes = ["https://rubygems.org"];
982 sha256 = "125aj0j84nx5gqm42hfx5d8486higlra423ahgfpsdjwbp399rwv";
983 type = "gem";
984 };
985 version = "0.28.0";
986 };
987 hamlit = {
988 dependencies = ["temple" "thor" "tilt"];
989 platforms = [];
990 source = {
991 remotes = ["https://rubygems.org"];
992 sha256 = "14fsc208qsf46cflk23vs2fdw435dk65fwv55zhziciwn96ld8sf";
993 type = "gem";
994 };
995 version = "2.9.1";
996 };
997 handlebars_assets = {
998 dependencies = ["execjs" "sprockets" "tilt"];
999 platforms = [];
1000 source = {
1001 remotes = ["https://rubygems.org"];
1002 sha256 = "18pyksz4jb0n28acqxv14ahy8mkc9ldqbbn73gcj28m0l9wjzsca";
1003 type = "gem";
1004 };
1005 version = "0.23.2";
1006 };
1007 hashdiff = {
1008 platforms = [];
1009 source = {
1010 remotes = ["https://rubygems.org"];
1011 sha256 = "0yj5l2rw8i8jc725hbcpc4wks0qlaaimr3dpaqamfjkjkxl0hjp9";
1012 type = "gem";
1013 };
1014 version = "0.3.7";
1015 };
1016 hashie = {
1017 platforms = [];
1018 source = {
1019 remotes = ["https://rubygems.org"];
1020 sha256 = "1hh5lybf8hm7d7xs4xm8hxvm8xqrs2flc8fnwkrclaj746izw6xb";
1021 type = "gem";
1022 };
1023 version = "3.5.7";
1024 };
1025 http = {
1026 dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"];
1027 platforms = [];
1028 source = {
1029 remotes = ["https://rubygems.org"];
1030 sha256 = "1jlm5prw437wqpfxcigh88lfap3m7g8mnmj5as7qw6dzqnvrxwmc";
1031 type = "gem";
1032 };
1033 version = "3.3.0";
1034 };
1035 http-cookie = {
1036 dependencies = ["domain_name"];
1037 platforms = [];
1038 source = {
1039 remotes = ["https://rubygems.org"];
1040 sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
1041 type = "gem";
1042 };
1043 version = "1.0.3";
1044 };
1045 http-form_data = {
1046 platforms = [];
1047 source = {
1048 remotes = ["https://rubygems.org"];
1049 sha256 = "15lpn604byf7cyxnw949xz4rvpcknqp7a48q73nm630gqxsa76f3";
1050 type = "gem";
1051 };
1052 version = "2.1.1";
1053 };
1054 http_accept_language = {
1055 platforms = [];
1056 source = {
1057 remotes = ["https://rubygems.org"];
1058 sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0";
1059 type = "gem";
1060 };
1061 version = "2.1.1";
1062 };
1063 "http_parser.rb" = {
1064 platforms = [];
1065 source = {
1066 remotes = ["https://rubygems.org"];
1067 sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
1068 type = "gem";
1069 };
1070 version = "0.6.0";
1071 };
1072 httparty = {
1073 dependencies = ["mime-types" "multi_xml"];
1074 platforms = [];
1075 source = {
1076 remotes = ["https://rubygems.org"];
1077 sha256 = "1xmm7pxmz3pblkdr76dg7qm5s60kpp3yvh46c2i0bn1dm0zgl730";
1078 type = "gem";
1079 };
1080 version = "0.16.3";
1081 };
1082 httpclient = {
1083 platforms = [];
1084 source = {
1085 remotes = ["https://rubygems.org"];
1086 sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
1087 type = "gem";
1088 };
1089 version = "2.8.3";
1090 };
1091 i18n = {
1092 dependencies = ["concurrent-ruby"];
1093 platforms = [];
1094 source = {
1095 remotes = ["https://rubygems.org"];
1096 sha256 = "1gcp1m1p6dpasycfz2sj82ci9ggz7lsskz9c9q6gvfwxrl8y9dx7";
1097 type = "gem";
1098 };
1099 version = "1.1.1";
1100 };
1101 i18n-inflector = {
1102 dependencies = ["i18n"];
1103 platforms = [];
1104 source = {
1105 remotes = ["https://rubygems.org"];
1106 sha256 = "081jr7z947aqjfmpbfs10w9jxi205jwgk4mgd8jds1b4m4i8mc7g";
1107 type = "gem";
1108 };
1109 version = "2.6.7";
1110 };
1111 i18n-inflector-rails = {
1112 dependencies = ["actionpack" "i18n-inflector" "railties"];
1113 platforms = [];
1114 source = {
1115 remotes = ["https://rubygems.org"];
1116 sha256 = "0c04jm657akp5n14syhcwnn3hnsvx7harvg97768bvf3f9a37hyk";
1117 type = "gem";
1118 };
1119 version = "1.0.7";
1120 };
1121 ipaddress = {
1122 platforms = [];
1123 source = {
1124 remotes = ["https://rubygems.org"];
1125 sha256 = "1x86s0s11w202j6ka40jbmywkrx8fhq8xiy8mwvnkhllj57hqr45";
1126 type = "gem";
1127 };
1128 version = "0.8.3";
1129 };
1130 jaro_winkler = {
1131 platforms = [];
1132 source = {
1133 remotes = ["https://rubygems.org"];
1134 sha256 = "0rr797nqz081bfk30m2apj5h24bg5d1jr1c8p3xwx4hbwsrbclah";
1135 type = "gem";
1136 };
1137 version = "1.5.1";
1138 };
1139 jasmine = {
1140 dependencies = ["jasmine-core" "phantomjs" "rack" "rake"];
1141 platforms = [];
1142 source = {
1143 remotes = ["https://rubygems.org"];
1144 sha256 = "1xfwf163wi5a9i0vlm564cqi6k30h15wnrwd15ph95jfa5516kv1";
1145 type = "gem";
1146 };
1147 version = "3.3.0";
1148 };
1149 jasmine-core = {
1150 platforms = [];
1151 source = {
1152 remotes = ["https://rubygems.org"];
1153 sha256 = "1b12bjfrxvb8mwjwlfyngykd80lz956glcpfz7rhhw7n75b2rdlv";
1154 type = "gem";
1155 };
1156 version = "3.3.0";
1157 };
1158 jasmine-jquery-rails = {
1159 platforms = [];
1160 source = {
1161 remotes = ["https://rubygems.org"];
1162 sha256 = "0cq5zd4ng5dlza45whd6sa7bzd60rlddk9760271mybdqyd96jlv";
1163 type = "gem";
1164 };
1165 version = "2.0.3";
1166 };
1167 jquery-rails = {
1168 dependencies = ["rails-dom-testing" "railties" "thor"];
1169 platforms = [];
1170 source = {
1171 remotes = ["https://rubygems.org"];
1172 sha256 = "17201sb8ddwy4yprizmqabq1kfx3m9c53p0yqngn63m07jjcpnh8";
1173 type = "gem";
1174 };
1175 version = "4.3.3";
1176 };
1177 js-routes = {
1178 dependencies = ["railties" "sprockets-rails"];
1179 platforms = [];
1180 source = {
1181 remotes = ["https://rubygems.org"];
1182 sha256 = "14yx3jrd4sgcwgj8yrrqdwl691mci1hcjqyyvp0v15jbzis1bclm";
1183 type = "gem";
1184 };
1185 version = "1.4.4";
1186 };
1187 js_image_paths = {
1188 dependencies = ["rails" "sprockets"];
1189 platforms = [];
1190 source = {
1191 remotes = ["https://rubygems.org"];
1192 sha256 = "1d4kq8895i61a338ddk5f2k16l5lvmnkby9cdjwnmm2jddw4q7nf";
1193 type = "gem";
1194 };
1195 version = "0.1.1";
1196 };
1197 json = {
1198 platforms = [];
1199 source = {
1200 remotes = ["https://rubygems.org"];
1201 sha256 = "01v6jjpvh3gnq6sgllpfqahlgxzj50ailwhj9b3cd20hi2dx0vxp";
1202 type = "gem";
1203 };
1204 version = "2.1.0";
1205 };
1206 json-jwt = {
1207 dependencies = ["activesupport" "aes_key_wrap" "bindata"];
1208 platforms = [];
1209 source = {
1210 remotes = ["https://rubygems.org"];
1211 sha256 = "065k7vffdki73f4nz89lxi6wxmcw5dlf593831pgvlbralll6x3r";
1212 type = "gem";
1213 };
1214 version = "1.9.4";
1215 };
1216 json-schema = {
1217 dependencies = ["addressable"];
1218 platforms = [];
1219 source = {
1220 remotes = ["https://rubygems.org"];
1221 sha256 = "1yv5lfmr2nzd14af498xqd5p89f3g080q8wk0klr3vxgypsikkb5";
1222 type = "gem";
1223 };
1224 version = "2.8.1";
1225 };
1226 json-schema-rspec = {
1227 dependencies = ["json-schema" "rspec"];
1228 platforms = [];
1229 source = {
1230 remotes = ["https://rubygems.org"];
1231 sha256 = "1ip30yjzyigqqp9jwkrw9x9vrfpnmwi160zmk2vkrwlv9pby0wr9";
1232 type = "gem";
1233 };
1234 version = "0.0.4";
1235 };
1236 jsonpath = {
1237 dependencies = ["multi_json" "to_regexp"];
1238 platforms = [];
1239 source = {
1240 remotes = ["https://rubygems.org"];
1241 sha256 = "06i41lwpj0dwvbxcpqrad5pjn2gmcv0srv0zw0ap7irwc21ifd7d";
1242 type = "gem";
1243 };
1244 version = "0.9.6";
1245 };
1246 jwt = {
1247 platforms = [];
1248 source = {
1249 remotes = ["https://rubygems.org"];
1250 sha256 = "1w0kaqrbl71cq9sbnixc20x5lqah3hs2i93xmhlfdg2y3by7yzky";
1251 type = "gem";
1252 };
1253 version = "2.1.0";
1254 };
1255 kgio = {
1256 platforms = [];
1257 source = {
1258 remotes = ["https://rubygems.org"];
1259 sha256 = "1528pyj1szzzp3pgj05fzjd36qjrxm9yj2x5radc9p1z7vl67y50";
1260 type = "gem";
1261 };
1262 version = "2.11.2";
1263 };
1264 kostya-sigar = {
1265 platforms = [];
1266 source = {
1267 remotes = ["https://rubygems.org"];
1268 sha256 = "0z0pcykhjyrb7kq76jfcyxc1qq23gj5zmgy3miy87v85ydrxiqwb";
1269 type = "gem";
1270 };
1271 version = "2.0.4";
1272 };
1273 leaflet-rails = {
1274 dependencies = ["rails"];
1275 platforms = [];
1276 source = {
1277 remotes = ["https://rubygems.org"];
1278 sha256 = "0dy7vhsjj1fhbbqm2s7pw57vgysd31qqi4y0hm91325hmvq75grb";
1279 type = "gem";
1280 };
1281 version = "1.3.1";
1282 };
1283 listen = {
1284 dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
1285 platforms = [];
1286 source = {
1287 remotes = ["https://rubygems.org"];
1288 sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
1289 type = "gem";
1290 };
1291 version = "3.1.5";
1292 };
1293 little-plugger = {
1294 platforms = [];
1295 source = {
1296 remotes = ["https://rubygems.org"];
1297 sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
1298 type = "gem";
1299 };
1300 version = "1.1.4";
1301 };
1302 logging = {
1303 dependencies = ["little-plugger" "multi_json"];
1304 platforms = [];
1305 source = {
1306 remotes = ["https://rubygems.org"];
1307 sha256 = "06j6iaj89h9jhkx1x3hlswqrfnqds8br05xb1qra69dpvbdmjcwn";
1308 type = "gem";
1309 };
1310 version = "2.2.2";
1311 };
1312 logging-rails = {
1313 dependencies = ["logging"];
1314 platforms = [];
1315 source = {
1316 remotes = ["https://rubygems.org"];
1317 sha256 = "022cnj9v177282kadd9ygzjpvlvbq9k5z0xhdbbmgypi05z4i239";
1318 type = "gem";
1319 };
1320 version = "0.6.0";
1321 };
1322 loofah = {
1323 dependencies = ["crass" "nokogiri"];
1324 platforms = [];
1325 source = {
1326 remotes = ["https://rubygems.org"];
1327 sha256 = "1ccsid33xjajd0im2xv941aywi58z7ihwkvaf1w2bv89vn5bhsjg";
1328 type = "gem";
1329 };
1330 version = "2.2.3";
1331 };
1332 lumberjack = {
1333 platforms = [];
1334 source = {
1335 remotes = ["https://rubygems.org"];
1336 sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n";
1337 type = "gem";
1338 };
1339 version = "1.0.13";
1340 };
1341 macaddr = {
1342 dependencies = ["systemu"];
1343 platforms = [];
1344 source = {
1345 remotes = ["https://rubygems.org"];
1346 sha256 = "1clii8mvhmh5lmnm95ljnjygyiyhdpja85c5vy487rhxn52scn0b";
1347 type = "gem";
1348 };
1349 version = "1.7.1";
1350 };
1351 mail = {
1352 dependencies = ["mini_mime"];
1353 platforms = [];
1354 source = {
1355 remotes = ["https://rubygems.org"];
1356 sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
1357 type = "gem";
1358 };
1359 version = "2.7.1";
1360 };
1361 markdown-it-html5-embed = {
1362 platforms = [];
1363 source = {
1364 remotes = ["https://rubygems.org"];
1365 sha256 = "10n2z6j0whc6makxvcf2jhpwb8xrj4s6vyywijsaaxs0cn490a5c";
1366 type = "gem";
1367 };
1368 version = "1.0.0";
1369 };
1370 markerb = {
1371 platforms = [];
1372 source = {
1373 remotes = ["https://rubygems.org"];
1374 sha256 = "08sm3kafc3086l0a9is2cysk7j2k71mxy6ba295pwwzyvy734y76";
1375 type = "gem";
1376 };
1377 version = "1.1.0";
1378 };
1379 memoizable = {
1380 dependencies = ["thread_safe"];
1381 platforms = [];
1382 source = {
1383 remotes = ["https://rubygems.org"];
1384 sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
1385 type = "gem";
1386 };
1387 version = "0.4.2";
1388 };
1389 method_source = {
1390 platforms = [];
1391 source = {
1392 remotes = ["https://rubygems.org"];
1393 sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
1394 type = "gem";
1395 };
1396 version = "0.9.2";
1397 };
1398 mime-types = {
1399 dependencies = ["mime-types-data"];
1400 platforms = [];
1401 source = {
1402 remotes = ["https://rubygems.org"];
1403 sha256 = "0fjxy1jm52ixpnv3vg9ld9pr9f35gy0jp66i1njhqjvmnvq0iwwk";
1404 type = "gem";
1405 };
1406 version = "3.2.2";
1407 };
1408 mime-types-data = {
1409 platforms = [];
1410 source = {
1411 remotes = ["https://rubygems.org"];
1412 sha256 = "07wvp0aw2gjm4njibb70as6rh5hi1zzri5vky1q6jx95h8l56idc";
1413 type = "gem";
1414 };
1415 version = "3.2018.0812";
1416 };
1417 mini_magick = {
1418 platforms = [];
1419 source = {
1420 remotes = ["https://rubygems.org"];
1421 sha256 = "0sisx59mr5kydmxmx5vr8spmrxhrjkfqv35zhsqdlyzmp1z5px9p";
1422 type = "gem";
1423 };
1424 version = "4.9.2";
1425 };
1426 mini_mime = {
1427 platforms = [];
1428 source = {
1429 remotes = ["https://rubygems.org"];
1430 sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3";
1431 type = "gem";
1432 };
1433 version = "1.0.1";
1434 };
1435 mini_portile2 = {
1436 platforms = [];
1437 source = {
1438 remotes = ["https://rubygems.org"];
1439 sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
1440 type = "gem";
1441 };
1442 version = "2.3.0";
1443 };
1444 minitest = {
1445 platforms = [];
1446 source = {
1447 remotes = ["https://rubygems.org"];
1448 sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
1449 type = "gem";
1450 };
1451 version = "5.11.3";
1452 };
1453 mobile-fu = {
1454 dependencies = ["rack-mobile-detect" "rails"];
1455 platforms = [];
1456 source = {
1457 remotes = ["https://rubygems.org"];
1458 sha256 = "0lxfcsd7dwwcpa1j2jbl382anmv6kksf5q1wqj14gc6jxxjq9s4i";
1459 type = "gem";
1460 };
1461 version = "1.4.0";
1462 };
1463 multi_json = {
1464 platforms = [];
1465 source = {
1466 remotes = ["https://rubygems.org"];
1467 sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
1468 type = "gem";
1469 };
1470 version = "1.13.1";
1471 };
1472 multi_test = {
1473 platforms = [];
1474 source = {
1475 remotes = ["https://rubygems.org"];
1476 sha256 = "1sx356q81plr67hg16jfwz9hcqvnk03bd9n75pmdw8pfxjfy1yxd";
1477 type = "gem";
1478 };
1479 version = "0.1.2";
1480 };
1481 multi_xml = {
1482 platforms = [];
1483 source = {
1484 remotes = ["https://rubygems.org"];
1485 sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj";
1486 type = "gem";
1487 };
1488 version = "0.6.0";
1489 };
1490 multipart-post = {
1491 platforms = [];
1492 source = {
1493 remotes = ["https://rubygems.org"];
1494 sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
1495 type = "gem";
1496 };
1497 version = "2.0.0";
1498 };
1499 mysql2 = {
1500 groups = ["mysql"];
1501 platforms = [];
1502 source = {
1503 remotes = ["https://rubygems.org"];
1504 sha256 = "1a2kdjgzwh1p2rkcmxaawy6ibi32b04wbdd5d4wr8i342pq76di4";
1505 type = "gem";
1506 };
1507 version = "0.5.2";
1508 };
1509 naught = {
1510 platforms = [];
1511 source = {
1512 remotes = ["https://rubygems.org"];
1513 sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
1514 type = "gem";
1515 };
1516 version = "1.1.0";
1517 };
1518 nenv = {
1519 platforms = [];
1520 source = {
1521 remotes = ["https://rubygems.org"];
1522 sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr";
1523 type = "gem";
1524 };
1525 version = "0.3.0";
1526 };
1527 net-ldap = {
1528 platforms = [];
1529 source = {
1530 remotes = ["https://rubygems.org"];
1531 sha256 = "016igqz81a8zcwqzp5bbhryqmb2skmyf57ij3nb5z8sxwhw22jgh";
1532 type = "gem";
1533 };
1534 version = "0.16.1";
1535 };
1536 nio4r = {
1537 platforms = [];
1538 source = {
1539 remotes = ["https://rubygems.org"];
1540 sha256 = "1a41ca1kpdmrypjp9xbgvckpy8g26zxphkja9vk7j5wl4n8yvlyr";
1541 type = "gem";
1542 };
1543 version = "2.3.1";
1544 };
1545 nokogiri = {
1546 dependencies = ["mini_portile2"];
1547 platforms = [];
1548 source = {
1549 remotes = ["https://rubygems.org"];
1550 sha256 = "0byyxrazkfm29ypcx5q4syrv126nvjnf7z6bqi01sqkv4llsi4qz";
1551 type = "gem";
1552 };
1553 version = "1.8.5";
1554 };
1555 notiffany = {
1556 dependencies = ["nenv" "shellany"];
1557 platforms = [];
1558 source = {
1559 remotes = ["https://rubygems.org"];
1560 sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx";
1561 type = "gem";
1562 };
1563 version = "0.1.1";
1564 };
1565 oauth = {
1566 platforms = [];
1567 source = {
1568 remotes = ["https://rubygems.org"];
1569 sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y";
1570 type = "gem";
1571 };
1572 version = "0.5.4";
1573 };
1574 oauth2 = {
1575 dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"];
1576 platforms = [];
1577 source = {
1578 remotes = ["https://rubygems.org"];
1579 sha256 = "0av6nlb5y2sm6m8fx669ywrqa9858yqaqfqzny75nqp3anag89qh";
1580 type = "gem";
1581 };
1582 version = "1.4.1";
1583 };
1584 octokit = {
1585 dependencies = ["sawyer"];
1586 platforms = [];
1587 source = {
1588 remotes = ["https://rubygems.org"];
1589 sha256 = "1yh0yzzqg575ix3y2l2261b9ag82gv2v4f1wczdhcmfbxcz755x6";
1590 type = "gem";
1591 };
1592 version = "4.13.0";
1593 };
1594 omniauth = {
1595 dependencies = ["hashie" "rack"];
1596 platforms = [];
1597 source = {
1598 remotes = ["https://rubygems.org"];
1599 sha256 = "1msqr4qq7mfdvl3rg89529isrv595hvjpj2gi0say4b8nwqfggmg";
1600 type = "gem";
1601 };
1602 version = "1.8.1";
1603 };
1604 omniauth-oauth = {
1605 dependencies = ["oauth" "omniauth"];
1606 platforms = [];
1607 source = {
1608 remotes = ["https://rubygems.org"];
1609 sha256 = "1n5vk4by7hkyc09d9blrw2argry5awpw4gbw1l4n2s9b3j4qz037";
1610 type = "gem";
1611 };
1612 version = "1.1.0";
1613 };
1614 omniauth-oauth2 = {
1615 dependencies = ["oauth2" "omniauth"];
1616 platforms = [];
1617 source = {
1618 remotes = ["https://rubygems.org"];
1619 sha256 = "0kscjf1y0lnggsl4z3w5bwllqshqjlsl5kmcya5haydajdnzvdjr";
1620 type = "gem";
1621 };
1622 version = "1.5.0";
1623 };
1624 omniauth-tumblr = {
1625 dependencies = ["multi_json" "omniauth-oauth"];
1626 platforms = [];
1627 source = {
1628 remotes = ["https://rubygems.org"];
1629 sha256 = "10ncmfym4l6k6aqp402g7mqxahbggcj5xkpsjxgngs746s82y97w";
1630 type = "gem";
1631 };
1632 version = "1.2";
1633 };
1634 omniauth-twitter = {
1635 dependencies = ["omniauth-oauth" "rack"];
1636 platforms = [];
1637 source = {
1638 remotes = ["https://rubygems.org"];
1639 sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65";
1640 type = "gem";
1641 };
1642 version = "1.4.0";
1643 };
1644 omniauth-wordpress = {
1645 dependencies = ["omniauth-oauth2"];
1646 platforms = [];
1647 source = {
1648 remotes = ["https://rubygems.org"];
1649 sha256 = "008zx4zwrbzyvlgv6hy68k1d05zskiwvcgwvxxbxhbl0mvlmh303";
1650 type = "gem";
1651 };
1652 version = "0.2.2";
1653 };
1654 open_graph_reader = {
1655 dependencies = ["faraday" "nokogiri"];
1656 platforms = [];
1657 source = {
1658 remotes = ["https://rubygems.org"];
1659 sha256 = "0af4yldyb0d8zglw73s13pyn0g90gs4m5zf7bwy8r4kym9zbvc21";
1660 type = "gem";
1661 };
1662 version = "0.6.2";
1663 };
1664 openid_connect = {
1665 dependencies = ["activemodel" "attr_required" "json-jwt" "rack-oauth2" "swd" "tzinfo" "validate_email" "validate_url" "webfinger"];
1666 platforms = [];
1667 source = {
1668 remotes = ["https://rubygems.org"];
1669 sha256 = "1r13bv18nyvw0g1nw3fzffvv2si99zj24w0k5zgawf4q6nn5f7vd";
1670 type = "gem";
1671 };
1672 version = "1.1.6";
1673 };
1674 orm_adapter = {
1675 platforms = [];
1676 source = {
1677 remotes = ["https://rubygems.org"];
1678 sha256 = "1fg9jpjlzf5y49qs9mlpdrgs5rpcyihq1s4k79nv9js0spjhnpda";
1679 type = "gem";
1680 };
1681 version = "0.5.0";
1682 };
1683 parallel = {
1684 platforms = [];
1685 source = {
1686 remotes = ["https://rubygems.org"];
1687 sha256 = "01hj8v1qnyl5ndrs33g8ld8ibk0rbcqdpkpznr04gkbxd11pqn67";
1688 type = "gem";
1689 };
1690 version = "1.12.1";
1691 };
1692 parser = {
1693 dependencies = ["ast"];
1694 platforms = [];
1695 source = {
1696 remotes = ["https://rubygems.org"];
1697 sha256 = "1zjk0w1kjj3xk8ymy1430aa4gg0k8ckphfj88br6il4pm83f0n1f";
1698 type = "gem";
1699 };
1700 version = "2.5.3.0";
1701 };
1702 pg = {
1703 platforms = [];
1704 source = {
1705 remotes = ["https://rubygems.org"];
1706 sha256 = "1pnjw3rspdfjssxyf42jnbsdlgri8ylysimp0s28wxb93k6ff2qb";
1707 type = "gem";
1708 };
1709 version = "1.1.3";
1710 };
1711 phantomjs = {
1712 platforms = [];
1713 source = {
1714 remotes = ["https://rubygems.org"];
1715 sha256 = "0y8pbbyq9dirxb7igkb2s5limz2895qmr41c09fjhx6k6fxcz4mk";
1716 type = "gem";
1717 };
1718 version = "2.1.1.0";
1719 };
1720 poltergeist = {
1721 dependencies = ["capybara" "cliver" "websocket-driver"];
1722 platforms = [];
1723 source = {
1724 remotes = ["https://rubygems.org"];
1725 sha256 = "0il80p97psmhs6scl0grq031gv7kws4ylvvd6zyr8xv91qadga95";
1726 type = "gem";
1727 };
1728 version = "1.18.1";
1729 };
1730 powerpack = {
1731 platforms = [];
1732 source = {
1733 remotes = ["https://rubygems.org"];
1734 sha256 = "1r51d67wd467rpdfl6x43y84vwm8f5ql9l9m85ak1s2sp3nc5hyv";
1735 type = "gem";
1736 };
1737 version = "0.1.2";
1738 };
1739 pronto = {
1740 dependencies = ["gitlab" "httparty" "octokit" "rainbow" "rugged" "thor"];
1741 platforms = [];
1742 source = {
1743 remotes = ["https://rubygems.org"];
1744 sha256 = "13xbg1pm3kz5zbzxad5qgqnkzkp3ddajj7wxx16aqbfr7rqggvhz";
1745 type = "gem";
1746 };
1747 version = "0.9.5";
1748 };
1749 pronto-eslint = {
1750 dependencies = ["eslintrb" "pronto"];
1751 platforms = [];
1752 source = {
1753 remotes = ["https://rubygems.org"];
1754 sha256 = "1cxyx6mlcdgv4ykliaizkx9cps68xf7qvy8lzxmv7pcqzkxaq7xc";
1755 type = "gem";
1756 };
1757 version = "0.9.1";
1758 };
1759 pronto-haml = {
1760 dependencies = ["haml_lint" "pronto"];
1761 platforms = [];
1762 source = {
1763 remotes = ["https://rubygems.org"];
1764 sha256 = "116iln1whwiqy55f86q33lnnic0awnqm415xvxwnhwlagcbwmnkg";
1765 type = "gem";
1766 };
1767 version = "0.9.0";
1768 };
1769 pronto-rubocop = {
1770 dependencies = ["pronto" "rubocop"];
1771 platforms = [];
1772 source = {
1773 remotes = ["https://rubygems.org"];
1774 sha256 = "0bcm34qlpp02wf69why5lpi5p53h5r4fq36f4b1fwi621fwzlgsy";
1775 type = "gem";
1776 };
1777 version = "0.9.1";
1778 };
1779 pronto-scss = {
1780 dependencies = ["pronto" "scss_lint"];
1781 platforms = [];
1782 source = {
1783 remotes = ["https://rubygems.org"];
1784 sha256 = "0kgaqd6l2w3brdsp5231fpfr6fwajciz2hdr925l1zhh6ni1y2za";
1785 type = "gem";
1786 };
1787 version = "0.9.1";
1788 };
1789 pry = {
1790 dependencies = ["coderay" "method_source"];
1791 platforms = [];
1792 source = {
1793 remotes = ["https://rubygems.org"];
1794 sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69";
1795 type = "gem";
1796 };
1797 version = "0.12.2";
1798 };
1799 pry-byebug = {
1800 dependencies = ["byebug" "pry"];
1801 platforms = [];
1802 source = {
1803 remotes = ["https://rubygems.org"];
1804 sha256 = "0y2758593i2ij0nhmv0j1pbdfx2cgi52ns6wkij0frgnk2lf650g";
1805 type = "gem";
1806 };
1807 version = "3.6.0";
1808 };
1809 public_suffix = {
1810 platforms = [];
1811 source = {
1812 remotes = ["https://rubygems.org"];
1813 sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
1814 type = "gem";
1815 };
1816 version = "3.0.3";
1817 };
1818 raabro = {
1819 platforms = [];
1820 source = {
1821 remotes = ["https://rubygems.org"];
1822 sha256 = "0xzdmbn48753f6k0ckirp8ja5p0xn1a92wbwxfyggyhj0hza9ylq";
1823 type = "gem";
1824 };
1825 version = "1.1.6";
1826 };
1827 rack = {
1828 platforms = [];
1829 source = {
1830 remotes = ["https://rubygems.org"];
1831 sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm";
1832 type = "gem";
1833 };
1834 version = "2.0.6";
1835 };
1836 rack-cors = {
1837 platforms = [];
1838 source = {
1839 remotes = ["https://rubygems.org"];
1840 sha256 = "1j27vy1bmhbqcyzhxg8d07qassmax769xjalfwcwz6qfiq8cf013";
1841 type = "gem";
1842 };
1843 version = "1.0.2";
1844 };
1845 rack-google-analytics = {
1846 dependencies = ["actionpack" "activesupport"];
1847 platforms = [];
1848 source = {
1849 remotes = ["https://rubygems.org"];
1850 sha256 = "09pv0z5dhjjrlhi9qj5qy48hi66f7iix337qrapg7mvwwz6czcvj";
1851 type = "gem";
1852 };
1853 version = "1.2.0";
1854 };
1855 rack-mobile-detect = {
1856 dependencies = ["rack"];
1857 platforms = [];
1858 source = {
1859 remotes = ["https://rubygems.org"];
1860 sha256 = "0bagli6ldhkpd1yym775sxy7w5n4jds6gbcjm3gmcl37vggvm8a5";
1861 type = "gem";
1862 };
1863 version = "0.4.0";
1864 };
1865 rack-oauth2 = {
1866 dependencies = ["activesupport" "attr_required" "httpclient" "json-jwt" "rack"];
1867 platforms = [];
1868 source = {
1869 remotes = ["https://rubygems.org"];
1870 sha256 = "0kmxj9hbjhhcs3yyb433s82hkpmzb536m0mwfadjiaisganx1cii";
1871 type = "gem";
1872 };
1873 version = "1.9.3";
1874 };
1875 rack-piwik = {
1876 platforms = [];
1877 source = {
1878 remotes = ["https://rubygems.org"];
1879 sha256 = "0raxrckapqh693lpid0cnx1j1v2i3mz5cyssg7grgrilgrn9318z";
1880 type = "gem";
1881 };
1882 version = "0.3.0";
1883 };
1884 rack-protection = {
1885 dependencies = ["rack"];
1886 platforms = [];
1887 source = {
1888 remotes = ["https://rubygems.org"];
1889 sha256 = "0ylx74ravz7nvnyygq0nk3v86qdzrmqxpwpayhppyy50l72rcajq";
1890 type = "gem";
1891 };
1892 version = "2.0.4";
1893 };
1894 rack-rewrite = {
1895 platforms = [];
1896 source = {
1897 remotes = ["https://rubygems.org"];
1898 sha256 = "0milw71dv96wnc6i48vbzypws51dgf415kkp8c4air0mkdhpj838";
1899 type = "gem";
1900 };
1901 version = "1.5.1";
1902 };
1903 rack-ssl = {
1904 dependencies = ["rack"];
1905 platforms = [];
1906 source = {
1907 remotes = ["https://rubygems.org"];
1908 sha256 = "0c21xqkjyl10fngq6dy8082vmn2png8cwkiyzv83ymixq5cx7ygp";
1909 type = "gem";
1910 };
1911 version = "1.4.1";
1912 };
1913 rack-test = {
1914 dependencies = ["rack"];
1915 platforms = [];
1916 source = {
1917 remotes = ["https://rubygems.org"];
1918 sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
1919 type = "gem";
1920 };
1921 version = "1.1.0";
1922 };
1923 rails = {
1924 dependencies = ["actioncable" "actionmailer" "actionpack" "actionview" "activejob" "activemodel" "activerecord" "activesupport" "railties" "sprockets-rails"];
1925 platforms = [];
1926 source = {
1927 remotes = ["https://rubygems.org"];
1928 sha256 = "0lb07cbwgm371zyn9i6fyj9q8rmv89lacmyzrfvzxqqx2n3ilc5q";
1929 type = "gem";
1930 };
1931 version = "5.1.6";
1932 };
1933 rails-assets-autosize = {
1934 platforms = [];
1935 source = {
1936 remotes = ["https://rails-assets.org"];
1937 sha256 = "0hr72mfprb9678lf7dj9lh801lm7p98nzkrnrz764sy9lmbpzcib";
1938 type = "gem";
1939 };
1940 version = "4.0.2";
1941 };
1942 rails-assets-backbone = {
1943 dependencies = ["rails-assets-underscore"];
1944 platforms = [];
1945 source = {
1946 remotes = ["https://rails-assets.org"];
1947 sha256 = "0zjgwhgfmg1jyyds7zfjp6g4bz8vw56qvhlrpj943wcqpdxm93id";
1948 type = "gem";
1949 };
1950 version = "1.3.3";
1951 };
1952 rails-assets-blueimp-gallery = {
1953 platforms = [];
1954 source = {
1955 remotes = ["https://rails-assets.org"];
1956 sha256 = "18b7xvvkdnd39xlbkyw46i86w3wzj349s8iv5wdiypa5qdcql8mq";
1957 type = "gem";
1958 };
1959 version = "2.33.0";
1960 };
1961 rails-assets-bootstrap = {
1962 dependencies = ["rails-assets-jquery"];
1963 platforms = [];
1964 source = {
1965 remotes = ["https://rails-assets.org"];
1966 sha256 = "0x4i11132qcmghmqb061iq47yksrr7i0la5hzzdm38dxybh87x5v";
1967 type = "gem";
1968 };
1969 version = "3.3.7";
1970 };
1971 rails-assets-bootstrap-markdown = {
1972 dependencies = ["rails-assets-bootstrap"];
1973 platforms = [];
1974 source = {
1975 remotes = ["https://rails-assets.org"];
1976 sha256 = "1nxirs9wx5jxrjmxjwvsqlf2rsypjn3ajg7fs28c4ib7wwpabwj3";
1977 type = "gem";
1978 };
1979 version = "2.10.0";
1980 };
1981 rails-assets-corejs-typeahead = {
1982 dependencies = ["rails-assets-jquery"];
1983 platforms = [];
1984 source = {
1985 remotes = ["https://rails-assets.org"];
1986 sha256 = "1p5i6afd156rakrin99c2ryaz3zykx21ir6y10l34jnw03rikcfg";
1987 type = "gem";
1988 };
1989 version = "1.2.1";
1990 };
1991 rails-assets-diaspora_jsxc = {
1992 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"];
1993 platforms = [];
1994 source = {
1995 remotes = ["https://rails-assets.org"];
1996 sha256 = "07vqdj0l8fsj4fd2sschba2jgfbimyfad56009ldzlcvb6ml5nhi";
1997 type = "gem";
1998 };
1999 version = "0.1.5.develop.7";
2000 };
2001 rails-assets-emojione = {
2002 platforms = [];
2003 source = {
2004 remotes = ["https://rails-assets.org"];
2005 sha256 = "1j29vbsf6v9ikiqlmnfgzxys4xsa1glvmfky8id5xfyymnjx2c52";
2006 type = "gem";
2007 };
2008 version = "2.0.1";
2009 };
2010 "rails-assets-favico.js" = {
2011 platforms = [];
2012 source = {
2013 remotes = ["https://rails-assets.org"];
2014 sha256 = "19yndhljmqlvarf49h5v71zq0p0ngvspjr2v0m6lac0q9ni7r5bv";
2015 type = "gem";
2016 };
2017 version = "0.3.10";
2018 };
2019 rails-assets-fine-uploader = {
2020 platforms = [];
2021 source = {
2022 remotes = ["https://rails-assets.org"];
2023 sha256 = "1vxj78x2vvlchpapxpaawysc9wn8alzdd3gxhwfwy11xv8ka9mdv";
2024 type = "gem";
2025 };
2026 version = "5.13.0";
2027 };
2028 rails-assets-highlightjs = {
2029 platforms = [];
2030 source = {
2031 remotes = ["https://rails-assets.org"];
2032 sha256 = "0spmb0gkfs13fmljjv1n53r53q69fhb6r573ndbxnhgb3izqgnqp";
2033 type = "gem";
2034 };
2035 version = "9.12.0";
2036 };
2037 rails-assets-jasmine = {
2038 platforms = [];
2039 source = {
2040 remotes = ["https://rails-assets.org"];
2041 sha256 = "1n6yixrl9cgq5kckay75b44p878s1kqi69mhgyw99w8dsq8i2vy5";
2042 type = "gem";
2043 };
2044 version = "3.3.0";
2045 };
2046 rails-assets-jasmine-ajax = {
2047 dependencies = ["rails-assets-jasmine"];
2048 platforms = [];
2049 source = {
2050 remotes = ["https://rails-assets.org"];
2051 sha256 = "0l8z0p75x1yzk1l1ryfvdlvq8yq4w2xngp4icz478axd5jcqx6kg";
2052 type = "gem";
2053 };
2054 version = "3.4.0";
2055 };
2056 rails-assets-jquery = {
2057 platforms = [];
2058 source = {
2059 remotes = ["https://rails-assets.org"];
2060 sha256 = "1wcaappk12w300733lrqb571cir9nw35d9q6d2i52wwdvhv2fx2y";
2061 type = "gem";
2062 };
2063 version = "3.3.1";
2064 };
2065 rails-assets-jquery-colorbox = {
2066 dependencies = ["rails-assets-jquery"];
2067 platforms = [];
2068 source = {
2069 remotes = ["https://rails-assets.org"];
2070 sha256 = "19ws3r1zfviwnfr9s0jh6iqss50iwqkf4a78zhrk0p3bb4lvmmsp";
2071 type = "gem";
2072 };
2073 version = "1.6.4";
2074 };
2075 rails-assets-jquery-fullscreen-plugin = {
2076 platforms = [];
2077 source = {
2078 remotes = ["https://rails-assets.org"];
2079 sha256 = "0ldvq4s15lap9p6w7d1yw6dajn2gh6p75dbkp79p0d8ylzapsd58";
2080 type = "gem";
2081 };
2082 version = "0.5.0";
2083 };
2084 rails-assets-jquery-placeholder = {
2085 dependencies = ["rails-assets-jquery"];
2086 platforms = [];
2087 source = {
2088 remotes = ["https://rails-assets.org"];
2089 sha256 = "0h17gjazc27pj4cm2ig232ww4d4ppq9bcginwzjss95pl63richi";
2090 type = "gem";
2091 };
2092 version = "2.3.1";
2093 };
2094 rails-assets-jquery-textchange = {
2095 dependencies = ["rails-assets-jquery"];
2096 platforms = [];
2097 source = {
2098 remotes = ["https://rails-assets.org"];
2099 sha256 = "0rsw3cn9a5njv80zy53339kmrmv60b8fqcrr7bacapbagb2rd4dj";
2100 type = "gem";
2101 };
2102 version = "0.2.3";
2103 };
2104 "rails-assets-jquery.are-you-sure" = {
2105 dependencies = ["rails-assets-jquery"];
2106 platforms = [];
2107 source = {
2108 remotes = ["https://rails-assets.org"];
2109 sha256 = "0nj04aqh9jpcg57xbjxpm2vn7mkd5clnpma907515a1nxy40bym0";
2110 type = "gem";
2111 };
2112 version = "1.9.0";
2113 };
2114 "rails-assets-jquery.slimscroll" = {
2115 platforms = [];
2116 source = {
2117 remotes = ["https://rails-assets.org"];
2118 sha256 = "1rymmd2rxy1vjjj70v88abmdlfs55276rs3rksj300dgirnnj998";
2119 type = "gem";
2120 };
2121 version = "1.3.8";
2122 };
2123 "rails-assets-jquery.ui" = {
2124 dependencies = ["rails-assets-jquery"];
2125 platforms = [];
2126 source = {
2127 remotes = ["https://rails-assets.org"];
2128 sha256 = "0xc9kfb29hi441irj49b7aawxkddk1dxzy938rpqv9ylpsj7knaa";
2129 type = "gem";
2130 };
2131 version = "1.11.4";
2132 };
2133 rails-assets-markdown-it = {
2134 platforms = [];
2135 source = {
2136 remotes = ["https://rails-assets.org"];
2137 sha256 = "0fxx7ldszsdqr5ry21bnxmv33byz7abpk9lcp100q5cqsjx091r9";
2138 type = "gem";
2139 };
2140 version = "8.4.2";
2141 };
2142 rails-assets-markdown-it--markdown-it-for-inline = {
2143 platforms = [];
2144 source = {
2145 remotes = ["https://rails-assets.org"];
2146 sha256 = "0fznv2x7ndadr3wb4dzhh86bpcpwz8f4d8rfhz4sfbqlai40j3jl";
2147 type = "gem";
2148 };
2149 version = "0.1.1";
2150 };
2151 rails-assets-markdown-it-diaspora-mention = {
2152 platforms = [];
2153 source = {
2154 remotes = ["https://rails-assets.org"];
2155 sha256 = "0asggm7wgmdll8x94291p2w6icmp2izi914dlh3b7vb7dpjq3jig";
2156 type = "gem";
2157 };
2158 version = "1.2.0";
2159 };
2160 rails-assets-markdown-it-hashtag = {
2161 platforms = [];
2162 source = {
2163 remotes = ["https://rails-assets.org"];
2164 sha256 = "0dr8fwaxgkfqm7z4rl4jdym0i1ycqw1sgkxshkd9k0849ry12cdk";
2165 type = "gem";
2166 };
2167 version = "0.4.0";
2168 };
2169 rails-assets-markdown-it-sanitizer = {
2170 platforms = [];
2171 source = {
2172 remotes = ["https://rails-assets.org"];
2173 sha256 = "0fkpffh83fc257zkzaia93j4hw2baz90lg10s5yxsxww06q5dn36";
2174 type = "gem";
2175 };
2176 version = "0.4.3";
2177 };
2178 rails-assets-markdown-it-sub = {
2179 platforms = [];
2180 source = {
2181 remotes = ["https://rails-assets.org"];
2182 sha256 = "08hjij5fqvhvg7s27n4g8qqsks974g3kc5k7xl2qmh41k7f4hcrk";
2183 type = "gem";
2184 };
2185 version = "1.0.0";
2186 };
2187 rails-assets-markdown-it-sup = {
2188 platforms = [];
2189 source = {
2190 remotes = ["https://rails-assets.org"];
2191 sha256 = "17nnnvky7zy0yiwwl6dm8ibbkyvvf63xfp3snch4dzmras05lmig";
2192 type = "gem";
2193 };
2194 version = "1.0.0";
2195 };
2196 rails-assets-underscore = {
2197 platforms = [];
2198 source = {
2199 remotes = ["https://rails-assets.org"];
2200 sha256 = "1ccnzj7aqrvngcs915y290pijryqmjygimdwlrykpyj8vwzifdnc";
2201 type = "gem";
2202 };
2203 version = "1.9.1";
2204 };
2205 rails-assets-utatti-perfect-scrollbar = {
2206 platforms = [];
2207 source = {
2208 remotes = ["https://rails-assets.org"];
2209 sha256 = "0m8syfv8p5bnwm8nrba6mpjnhrd29ffwzi6awhiw537jqw42b12v";
2210 type = "gem";
2211 };
2212 version = "1.4.0";
2213 };
2214 rails-controller-testing = {
2215 dependencies = ["actionpack" "actionview" "activesupport"];
2216 platforms = [];
2217 source = {
2218 remotes = ["https://rubygems.org"];
2219 sha256 = "16kdkk73mhhs73iz3i1i0ryjm84dadiyh817b3nh8acdi490jyhy";
2220 type = "gem";
2221 };
2222 version = "1.0.2";
2223 };
2224 rails-dom-testing = {
2225 dependencies = ["activesupport" "nokogiri"];
2226 platforms = [];
2227 source = {
2228 remotes = ["https://rubygems.org"];
2229 sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
2230 type = "gem";
2231 };
2232 version = "2.0.3";
2233 };
2234 rails-html-sanitizer = {
2235 dependencies = ["loofah"];
2236 platforms = [];
2237 source = {
2238 remotes = ["https://rubygems.org"];
2239 sha256 = "1gv7vr5d9g2xmgpjfq4nxsqr70r9pr042r9ycqqnfvw5cz9c7jwr";
2240 type = "gem";
2241 };
2242 version = "1.0.4";
2243 };
2244 rails-i18n = {
2245 dependencies = ["i18n" "railties"];
2246 platforms = [];
2247 source = {
2248 remotes = ["https://rubygems.org"];
2249 sha256 = "05lkhc737a9dw0hd5ljmja0yp4cw39r3200s1r0n4bs7z1g3ka7l";
2250 type = "gem";
2251 };
2252 version = "5.1.2";
2253 };
2254 rails-timeago = {
2255 dependencies = ["actionpack" "activesupport"];
2256 platforms = [];
2257 source = {
2258 remotes = ["https://rubygems.org"];
2259 sha256 = "01x1vs9hni9wn8dc4fmyqzkrn651chzsi2mhmk0pxdrfx9md0lxv";
2260 type = "gem";
2261 };
2262 version = "2.16.0";
2263 };
2264 railties = {
2265 dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"];
2266 platforms = [];
2267 source = {
2268 remotes = ["https://rubygems.org"];
2269 sha256 = "0ycy2gdaj0px1vfaghskvl6qkczwaigrli2zxn54w7zn1z29faj8";
2270 type = "gem";
2271 };
2272 version = "5.1.6";
2273 };
2274 rainbow = {
2275 dependencies = ["rake"];
2276 platforms = [];
2277 source = {
2278 remotes = ["https://rubygems.org"];
2279 sha256 = "08w2ghc5nv0kcq5b257h7dwjzjz1pqcavajfdx2xjyxqsvh2y34w";
2280 type = "gem";
2281 };
2282 version = "2.2.2";
2283 };
2284 raindrops = {
2285 platforms = [];
2286 source = {
2287 remotes = ["https://rubygems.org"];
2288 sha256 = "1qpbd9jif40c53fz2r0l8khfl016y8s8bkx37ibcaafclbl3xygp";
2289 type = "gem";
2290 };
2291 version = "0.19.0";
2292 };
2293 rake = {
2294 platforms = [];
2295 source = {
2296 remotes = ["https://rubygems.org"];
2297 sha256 = "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg";
2298 type = "gem";
2299 };
2300 version = "12.3.1";
2301 };
2302 rb-fsevent = {
2303 platforms = [];
2304 source = {
2305 remotes = ["https://rubygems.org"];
2306 sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
2307 type = "gem";
2308 };
2309 version = "0.10.3";
2310 };
2311 rb-inotify = {
2312 dependencies = ["ffi"];
2313 platforms = [];
2314 source = {
2315 remotes = ["https://rubygems.org"];
2316 sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
2317 type = "gem";
2318 };
2319 version = "0.9.10";
2320 };
2321 redcarpet = {
2322 platforms = [];
2323 source = {
2324 remotes = ["https://rubygems.org"];
2325 sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7";
2326 type = "gem";
2327 };
2328 version = "3.4.0";
2329 };
2330 redis = {
2331 platforms = [];
2332 source = {
2333 remotes = ["https://rubygems.org"];
2334 sha256 = "0i415x8gi0c5vsiy6ikvx5js6fhc4x80a5lqv8iidy2iymd20irv";
2335 type = "gem";
2336 };
2337 version = "3.3.5";
2338 };
2339 regexp_parser = {
2340 platforms = [];
2341 source = {
2342 remotes = ["https://rubygems.org"];
2343 sha256 = "18g5jyg3blsdrz3mc8d87bms6qqn6gcdh1nvdhvgbjdpk9pw21dq";
2344 type = "gem";
2345 };
2346 version = "1.3.0";
2347 };
2348 request_store = {
2349 dependencies = ["rack"];
2350 platforms = [];
2351 source = {
2352 remotes = ["https://rubygems.org"];
2353 sha256 = "1963330z03fk382fi8y231ygcbnh86m91dqlp5rh1mwy9ihzzl6d";
2354 type = "gem";
2355 };
2356 version = "1.4.1";
2357 };
2358 responders = {
2359 dependencies = ["actionpack" "railties"];
2360 platforms = [];
2361 source = {
2362 remotes = ["https://rubygems.org"];
2363 sha256 = "1rhdyyvvm26f2l3fgwdp6xasfl2y0whwgy766bhdwz697mf78zfn";
2364 type = "gem";
2365 };
2366 version = "2.4.0";
2367 };
2368 rspec = {
2369 dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
2370 platforms = [];
2371 source = {
2372 remotes = ["https://rubygems.org"];
2373 sha256 = "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3";
2374 type = "gem";
2375 };
2376 version = "3.8.0";
2377 };
2378 rspec-core = {
2379 dependencies = ["rspec-support"];
2380 platforms = [];
2381 source = {
2382 remotes = ["https://rubygems.org"];
2383 sha256 = "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p";
2384 type = "gem";
2385 };
2386 version = "3.8.0";
2387 };
2388 rspec-expectations = {
2389 dependencies = ["diff-lcs" "rspec-support"];
2390 platforms = [];
2391 source = {
2392 remotes = ["https://rubygems.org"];
2393 sha256 = "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm";
2394 type = "gem";
2395 };
2396 version = "3.8.2";
2397 };
2398 rspec-json_expectations = {
2399 platforms = [];
2400 source = {
2401 remotes = ["https://rubygems.org"];
2402 sha256 = "0l3dhvkb95zwyg72wz33azxigc9cisqgg3z16ksns1sx0b93nnbn";
2403 type = "gem";
2404 };
2405 version = "2.1.0";
2406 };
2407 rspec-mocks = {
2408 dependencies = ["diff-lcs" "rspec-support"];
2409 platforms = [];
2410 source = {
2411 remotes = ["https://rubygems.org"];
2412 sha256 = "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp";
2413 type = "gem";
2414 };
2415 version = "3.8.0";
2416 };
2417 rspec-rails = {
2418 dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"];
2419 platforms = [];
2420 source = {
2421 remotes = ["https://rubygems.org"];
2422 sha256 = "0sqj5da2kc937j5jb18jcf0hrmmzwgj7pk62j0q3qndhc2kvx88p";
2423 type = "gem";
2424 };
2425 version = "3.8.1";
2426 };
2427 rspec-support = {
2428 platforms = [];
2429 source = {
2430 remotes = ["https://rubygems.org"];
2431 sha256 = "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609";
2432 type = "gem";
2433 };
2434 version = "3.8.0";
2435 };
2436 rubocop = {
2437 dependencies = ["jaro_winkler" "parallel" "parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"];
2438 platforms = [];
2439 source = {
2440 remotes = ["https://rubygems.org"];
2441 sha256 = "1ivk049z3mp12nc6v1wn35bsq1g7nz1i2r4xwzqf0v25hm2v7n1i";
2442 type = "gem";
2443 };
2444 version = "0.60.0";
2445 };
2446 ruby-oembed = {
2447 platforms = [];
2448 source = {
2449 remotes = ["https://rubygems.org"];
2450 sha256 = "1kw4aplb3m13z3kchhb79wf87qb3prn1m99s6vl5cyp0xqwyymv0";
2451 type = "gem";
2452 };
2453 version = "0.12.0";
2454 };
2455 ruby-progressbar = {
2456 platforms = [];
2457 source = {
2458 remotes = ["https://rubygems.org"];
2459 sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk";
2460 type = "gem";
2461 };
2462 version = "1.10.0";
2463 };
2464 ruby_dep = {
2465 platforms = [];
2466 source = {
2467 remotes = ["https://rubygems.org"];
2468 sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
2469 type = "gem";
2470 };
2471 version = "1.5.0";
2472 };
2473 rubyzip = {
2474 platforms = [];
2475 source = {
2476 remotes = ["https://rubygems.org"];
2477 sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
2478 type = "gem";
2479 };
2480 version = "1.2.2";
2481 };
2482 rugged = {
2483 platforms = [];
2484 source = {
2485 remotes = ["https://rubygems.org"];
2486 sha256 = "1jv4nw9hvlxp8hhhlllrfcznki82i50fp1sj65zsjllfl2bvz8x6";
2487 type = "gem";
2488 };
2489 version = "0.27.5";
2490 };
2491 safe_yaml = {
2492 platforms = [];
2493 source = {
2494 remotes = ["https://rubygems.org"];
2495 sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
2496 type = "gem";
2497 };
2498 version = "1.0.4";
2499 };
2500 sass = {
2501 platforms = [];
2502 source = {
2503 remotes = ["https://rubygems.org"];
2504 sha256 = "0kfpcwh8dgw4lc81qglkvjl73689jy3g7196zkxm4fpskg1p5lkw";
2505 type = "gem";
2506 };
2507 version = "3.4.25";
2508 };
2509 sass-rails = {
2510 dependencies = ["railties" "sass" "sprockets" "sprockets-rails" "tilt"];
2511 platforms = [];
2512 source = {
2513 remotes = ["https://rubygems.org"];
2514 sha256 = "1wa63sbsimrsf7nfm8h0m1wbsllkfxvd7naph5d1j6pbc555ma7s";
2515 type = "gem";
2516 };
2517 version = "5.0.7";
2518 };
2519 sawyer = {
2520 dependencies = ["addressable" "faraday"];
2521 platforms = [];
2522 source = {
2523 remotes = ["https://rubygems.org"];
2524 sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd";
2525 type = "gem";
2526 };
2527 version = "0.8.1";
2528 };
2529 scss_lint = {
2530 dependencies = ["rake" "sass"];
2531 platforms = [];
2532 source = {
2533 remotes = ["https://rubygems.org"];
2534 sha256 = "11rl8kj32p34mqlkhxvlwfrwl8gdl0iha8q9xsrr3sjxjagzv8yp";
2535 type = "gem";
2536 };
2537 version = "0.55.0";
2538 };
2539 secure_headers = {
2540 platforms = [];
2541 source = {
2542 remotes = ["https://rubygems.org"];
2543 sha256 = "17cxci8jyvlgssix0cy7kbm5m2h7s8ym9caj8nilrbd21jis9pc5";
2544 type = "gem";
2545 };
2546 version = "6.0.0";
2547 };
2548 shellany = {
2549 platforms = [];
2550 source = {
2551 remotes = ["https://rubygems.org"];
2552 sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf";
2553 type = "gem";
2554 };
2555 version = "0.0.1";
2556 };
2557 shoulda-matchers = {
2558 dependencies = ["activesupport"];
2559 platforms = [];
2560 source = {
2561 remotes = ["https://rubygems.org"];
2562 sha256 = "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a";
2563 type = "gem";
2564 };
2565 version = "3.1.2";
2566 };
2567 sidekiq = {
2568 dependencies = ["connection_pool" "rack-protection" "redis"];
2569 platforms = [];
2570 source = {
2571 remotes = ["https://rubygems.org"];
2572 sha256 = "1zyf9y3rvzizbwh68i2g1lzd40lalrdc4iyjmaa74gnfwsf92i26";
2573 type = "gem";
2574 };
2575 version = "5.2.3";
2576 };
2577 sidekiq-cron = {
2578 dependencies = ["fugit" "sidekiq"];
2579 platforms = [];
2580 source = {
2581 remotes = ["https://rubygems.org"];
2582 sha256 = "1aliswahmpxn1ib2brn4126gk97ac3zdnwr71mn8vzbr3vdd7fl0";
2583 type = "gem";
2584 };
2585 version = "1.0.4";
2586 };
2587 simple_captcha2 = {
2588 dependencies = ["rails"];
2589 platforms = [];
2590 source = {
2591 remotes = ["https://rubygems.org"];
2592 sha256 = "0vdjydym8sjpa8c1q0n2hanj3n9vzi4ycdw2p6bbm6qqmm1f3fq3";
2593 type = "gem";
2594 };
2595 version = "0.4.3";
2596 };
2597 simple_oauth = {
2598 platforms = [];
2599 source = {
2600 remotes = ["https://rubygems.org"];
2601 sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
2602 type = "gem";
2603 };
2604 version = "0.3.1";
2605 };
2606 simplecov = {
2607 dependencies = ["docile" "json" "simplecov-html"];
2608 platforms = [];
2609 source = {
2610 remotes = ["https://rubygems.org"];
2611 sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947";
2612 type = "gem";
2613 };
2614 version = "0.16.1";
2615 };
2616 simplecov-html = {
2617 platforms = [];
2618 source = {
2619 remotes = ["https://rubygems.org"];
2620 sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn";
2621 type = "gem";
2622 };
2623 version = "0.10.2";
2624 };
2625 sinon-rails = {
2626 dependencies = ["railties"];
2627 platforms = [];
2628 source = {
2629 remotes = ["https://rubygems.org"];
2630 sha256 = "1b7996hb8vfky29b0zcql90x8i6vhdg2zy9nfzmhh820gjv3kggb";
2631 type = "gem";
2632 };
2633 version = "1.15.0";
2634 };
2635 spring = {
2636 dependencies = ["activesupport"];
2637 platforms = [];
2638 source = {
2639 remotes = ["https://rubygems.org"];
2640 sha256 = "168yz9c1fv21wc5i8q7n43b9nk33ivg3ws1fn6x0afgryz3ssx75";
2641 type = "gem";
2642 };
2643 version = "2.0.2";
2644 };
2645 spring-commands-cucumber = {
2646 dependencies = ["spring"];
2647 platforms = [];
2648 source = {
2649 remotes = ["https://rubygems.org"];
2650 sha256 = "0mw81gvms2svn4k4pc6ly7smkmf0j9r2xbf0d38vygbyhiwd1c9a";
2651 type = "gem";
2652 };
2653 version = "1.0.1";
2654 };
2655 spring-commands-rspec = {
2656 dependencies = ["spring"];
2657 platforms = [];
2658 source = {
2659 remotes = ["https://rubygems.org"];
2660 sha256 = "0b0svpq3md1pjz5drpa5pxwg8nk48wrshq8lckim4x3nli7ya0k2";
2661 type = "gem";
2662 };
2663 version = "1.0.4";
2664 };
2665 sprockets = {
2666 dependencies = ["concurrent-ruby" "rack"];
2667 platforms = [];
2668 source = {
2669 remotes = ["https://rubygems.org"];
2670 sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
2671 type = "gem";
2672 };
2673 version = "3.7.2";
2674 };
2675 sprockets-rails = {
2676 dependencies = ["actionpack" "activesupport" "sprockets"];
2677 platforms = [];
2678 source = {
2679 remotes = ["https://rubygems.org"];
2680 sha256 = "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1";
2681 type = "gem";
2682 };
2683 version = "3.2.1";
2684 };
2685 state_machines = {
2686 platforms = [];
2687 source = {
2688 remotes = ["https://rubygems.org"];
2689 sha256 = "00mi16hg3rhkxz4y58s173cbnjlba41y9bfcim90p4ja6yfj9ri3";
2690 type = "gem";
2691 };
2692 version = "0.5.0";
2693 };
2694 string-direction = {
2695 platforms = [];
2696 source = {
2697 remotes = ["https://rubygems.org"];
2698 sha256 = "0iyddwmkj425c6xbn5pmlr2yzwcq4snzlan7rky5b1yp2pvf70jj";
2699 type = "gem";
2700 };
2701 version = "1.2.1";
2702 };
2703 swd = {
2704 dependencies = ["activesupport" "attr_required" "httpclient"];
2705 platforms = [];
2706 source = {
2707 remotes = ["https://rubygems.org"];
2708 sha256 = "1s2vjb6f13za7p1iycl2p73d3p202xa6xny9fjrp8ynwsqix7lyd";
2709 type = "gem";
2710 };
2711 version = "1.1.2";
2712 };
2713 sysexits = {
2714 platforms = [];
2715 source = {
2716 remotes = ["https://rubygems.org"];
2717 sha256 = "0qjng6pllznmprzx8vb0zg0c86hdrkyjs615q41s9fjpmv2430jr";
2718 type = "gem";
2719 };
2720 version = "1.2.0";
2721 };
2722 systemu = {
2723 platforms = [];
2724 source = {
2725 remotes = ["https://rubygems.org"];
2726 sha256 = "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1";
2727 type = "gem";
2728 };
2729 version = "2.6.5";
2730 };
2731 temple = {
2732 platforms = [];
2733 source = {
2734 remotes = ["https://rubygems.org"];
2735 sha256 = "00nxf610nzi4n1i2lkby43nrnarvl89fcl6lg19406msr0k3ycmq";
2736 type = "gem";
2737 };
2738 version = "0.8.0";
2739 };
2740 term-ansicolor = {
2741 dependencies = ["tins"];
2742 platforms = [];
2743 source = {
2744 remotes = ["https://rubygems.org"];
2745 sha256 = "079hbagd9mk0839rkajsdrbzkn992gj8ah2n45qd64v25ml27i6d";
2746 type = "gem";
2747 };
2748 version = "1.7.0";
2749 };
2750 terminal-table = {
2751 dependencies = ["unicode-display_width"];
2752 platforms = [];
2753 source = {
2754 remotes = ["https://rubygems.org"];
2755 sha256 = "1512cngw35hsmhvw4c05rscihc59mnj09m249sm9p3pik831ydqk";
2756 type = "gem";
2757 };
2758 version = "1.8.0";
2759 };
2760 thor = {
2761 platforms = [];
2762 source = {
2763 remotes = ["https://rubygems.org"];
2764 sha256 = "01n5dv9kql60m6a00zc0r66jvaxx98qhdny3klyj0p3w34pad2ns";
2765 type = "gem";
2766 };
2767 version = "0.19.4";
2768 };
2769 thread_safe = {
2770 platforms = [];
2771 source = {
2772 remotes = ["https://rubygems.org"];
2773 sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
2774 type = "gem";
2775 };
2776 version = "0.3.6";
2777 };
2778 tilt = {
2779 platforms = [];
2780 source = {
2781 remotes = ["https://rubygems.org"];
2782 sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra";
2783 type = "gem";
2784 };
2785 version = "2.0.8";
2786 };
2787 timecop = {
2788 platforms = [];
2789 source = {
2790 remotes = ["https://rubygems.org"];
2791 sha256 = "0d7mm786180v4kzvn1f77rhfppsg5n0sq2bdx63x9nv114zm8jrp";
2792 type = "gem";
2793 };
2794 version = "0.9.1";
2795 };
2796 timers = {
2797 platforms = [];
2798 source = {
2799 remotes = ["https://rubygems.org"];
2800 sha256 = "04zbs9wyzajn7g9xfgg2zqz5kzf0qa7jgh4hgry4pfcxfmlnwdwx";
2801 type = "gem";
2802 };
2803 version = "4.2.0";
2804 };
2805 tins = {
2806 platforms = [];
2807 source = {
2808 remotes = ["https://rubygems.org"];
2809 sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj";
2810 type = "gem";
2811 };
2812 version = "1.20.2";
2813 };
2814 to_regexp = {
2815 platforms = [];
2816 source = {
2817 remotes = ["https://rubygems.org"];
2818 sha256 = "1rgabfhnql6l4fx09mmj5d0vza924iczqf2blmn82l782b6qqi9v";
2819 type = "gem";
2820 };
2821 version = "0.2.1";
2822 };
2823 turbo_dev_assets = {
2824 platforms = [];
2825 source = {
2826 remotes = ["https://rubygems.org"];
2827 sha256 = "08yp7gpishjfj8b7d61hxs677288ycv6yg78a7hfzn631gxczipx";
2828 type = "gem";
2829 };
2830 version = "0.0.2";
2831 };
2832 twitter = {
2833 dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"];
2834 platforms = [];
2835 source = {
2836 remotes = ["https://rubygems.org"];
2837 sha256 = "0fjyz3viabz3xs5d9aad18zgdbhfwm51jsnzigc8kxk77p1x58n5";
2838 type = "gem";
2839 };
2840 version = "6.2.0";
2841 };
2842 twitter-text = {
2843 dependencies = ["unf"];
2844 platforms = [];
2845 source = {
2846 remotes = ["https://rubygems.org"];
2847 sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg";
2848 type = "gem";
2849 };
2850 version = "1.14.7";
2851 };
2852 typhoeus = {
2853 dependencies = ["ethon"];
2854 platforms = [];
2855 source = {
2856 remotes = ["https://rubygems.org"];
2857 sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
2858 type = "gem";
2859 };
2860 version = "1.3.1";
2861 };
2862 tzinfo = {
2863 dependencies = ["thread_safe"];
2864 platforms = [];
2865 source = {
2866 remotes = ["https://rubygems.org"];
2867 sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
2868 type = "gem";
2869 };
2870 version = "1.2.5";
2871 };
2872 uglifier = {
2873 dependencies = ["execjs"];
2874 platforms = [];
2875 source = {
2876 remotes = ["https://rubygems.org"];
2877 sha256 = "1g203kly5wp4qlkc7371skyvyin6iinc8i0p5wrpiqgblqxxgcf1";
2878 type = "gem";
2879 };
2880 version = "4.1.19";
2881 };
2882 unf = {
2883 dependencies = ["unf_ext"];
2884 platforms = [];
2885 source = {
2886 remotes = ["https://rubygems.org"];
2887 sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
2888 type = "gem";
2889 };
2890 version = "0.1.4";
2891 };
2892 unf_ext = {
2893 platforms = [];
2894 source = {
2895 remotes = ["https://rubygems.org"];
2896 sha256 = "06p1i6qhy34bpb8q8ms88y6f2kz86azwm098yvcc0nyqk9y729j1";
2897 type = "gem";
2898 };
2899 version = "0.0.7.5";
2900 };
2901 unicode-display_width = {
2902 platforms = [];
2903 source = {
2904 remotes = ["https://rubygems.org"];
2905 sha256 = "0040bsdpcmvp8w31lqi2s9s4p4h031zv52401qidmh25cgyh4a57";
2906 type = "gem";
2907 };
2908 version = "1.4.0";
2909 };
2910 unicorn = {
2911 dependencies = ["kgio" "raindrops"];
2912 platforms = [];
2913 source = {
2914 remotes = ["https://rubygems.org"];
2915 sha256 = "1qfhvzs4i6ja1s43j8p1kfbzm10n7a02ngki30a38y5m46a2qrak";
2916 type = "gem";
2917 };
2918 version = "5.4.1";
2919 };
2920 unicorn-worker-killer = {
2921 dependencies = ["get_process_mem" "unicorn"];
2922 platforms = [];
2923 source = {
2924 remotes = ["https://rubygems.org"];
2925 sha256 = "0rrdxpwdsapx47axjin8ymxb4f685qlpx8a26bql4ay1559c3gva";
2926 type = "gem";
2927 };
2928 version = "0.4.4";
2929 };
2930 uuid = {
2931 dependencies = ["macaddr"];
2932 platforms = [];
2933 source = {
2934 remotes = ["https://rubygems.org"];
2935 sha256 = "1mr405vg4ccnndkyf7pb49gp1fha8i6gj7iwq43nxkak41cwzh5f";
2936 type = "gem";
2937 };
2938 version = "2.3.9";
2939 };
2940 valid = {
2941 platforms = [];
2942 source = {
2943 remotes = ["https://rubygems.org"];
2944 sha256 = "0vxrgik9gxyh5j2w16nz5azjk0cbzmvv883hq9pvxm9anfbbj8d3";
2945 type = "gem";
2946 };
2947 version = "1.2.0";
2948 };
2949 validate_email = {
2950 dependencies = ["activemodel" "mail"];
2951 platforms = [];
2952 source = {
2953 remotes = ["https://rubygems.org"];
2954 sha256 = "1r1fz29l699arka177c9xw7409d1a3ff95bf7a6pmc97slb91zlx";
2955 type = "gem";
2956 };
2957 version = "0.1.6";
2958 };
2959 validate_url = {
2960 dependencies = ["activemodel" "addressable"];
2961 platforms = [];
2962 source = {
2963 remotes = ["https://rubygems.org"];
2964 sha256 = "1df4gch8dizimpbl185vfgw95yb8ffr6zwj6whzbxfil95c3f2qh";
2965 type = "gem";
2966 };
2967 version = "1.0.2";
2968 };
2969 versionist = {
2970 dependencies = ["activesupport" "railties" "yard"];
2971 platforms = [];
2972 source = {
2973 remotes = ["https://rubygems.org"];
2974 sha256 = "1p8wizg6jml7gz1qiqk7d77hy0w5650g812jhgd0zzkwwdmzm38m";
2975 type = "gem";
2976 };
2977 version = "1.7.0";
2978 };
2979 warden = {
2980 dependencies = ["rack"];
2981 platforms = [];
2982 source = {
2983 remotes = ["https://rubygems.org"];
2984 sha256 = "1fr9n9i9r82xb6i61fdw4xgc7zjv7fsdrr4k0njchy87iw9fl454";
2985 type = "gem";
2986 };
2987 version = "1.2.8";
2988 };
2989 webfinger = {
2990 dependencies = ["activesupport" "httpclient"];
2991 platforms = [];
2992 source = {
2993 remotes = ["https://rubygems.org"];
2994 sha256 = "0m0jh8k7c0ifh2jhbn7ihqrmn5fi754wflva97zgy70hpdvxyjar";
2995 type = "gem";
2996 };
2997 version = "1.1.0";
2998 };
2999 webmock = {
3000 dependencies = ["addressable" "crack" "hashdiff"];
3001 platforms = [];
3002 source = {
3003 remotes = ["https://rubygems.org"];
3004 sha256 = "03994dxs4xayvkxqp01dd1ivhg4xxx7z35f7cxw7y2mwj3xn24ib";
3005 type = "gem";
3006 };
3007 version = "3.4.2";
3008 };
3009 websocket-driver = {
3010 dependencies = ["websocket-extensions"];
3011 platforms = [];
3012 source = {
3013 remotes = ["https://rubygems.org"];
3014 sha256 = "1943442yllhldh9dbp374x2q39cxa49xrm28nb78b7mfbv3y195l";
3015 type = "gem";
3016 };
3017 version = "0.6.5";
3018 };
3019 websocket-extensions = {
3020 platforms = [];
3021 source = {
3022 remotes = ["https://rubygems.org"];
3023 sha256 = "034sdr7fd34yag5l6y156rkbhiqgmy395m231dwhlpcswhs6d270";
3024 type = "gem";
3025 };
3026 version = "0.1.3";
3027 };
3028 will_paginate = {
3029 platforms = [];
3030 source = {
3031 remotes = ["https://rubygems.org"];
3032 sha256 = "0ihf15yaj8883ddhkxq7q60zrg3zfsvqaf5853gybhcg18zq8bn9";
3033 type = "gem";
3034 };
3035 version = "3.1.6";
3036 };
3037 xpath = {
3038 dependencies = ["nokogiri"];
3039 platforms = [];
3040 source = {
3041 remotes = ["https://rubygems.org"];
3042 sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd";
3043 type = "gem";
3044 };
3045 version = "3.2.0";
3046 };
3047 yard = {
3048 platforms = [];
3049 source = {
3050 remotes = ["https://rubygems.org"];
3051 sha256 = "0lmmr1839qgbb3zxfa7jf5mzy17yjl1yirwlgzdhws4452gqhn67";
3052 type = "gem";
3053 };
3054 version = "0.9.16";
3055 };
3056} \ No newline at end of file
diff --git a/nixops/modules/websites/tools/diaspora/ldap.patch b/nixops/modules/websites/tools/diaspora/ldap.patch
deleted file mode 100644
index 3d4f785..0000000
--- a/nixops/modules/websites/tools/diaspora/ldap.patch
+++ /dev/null
@@ -1,256 +0,0 @@
1commit 936a14e225037aca4cdeac11c843c7985e636c88
2Author: Ismaël Bouya <ismael.bouya@normalesup.org>
3Date: Mon Jul 24 19:58:24 2017 +0200
4
5 Add LDAP to diaspora
6
7diff --git a/Gemfile b/Gemfile
8index 414b0138d..2a934e9c9 100644
9--- a/Gemfile
10+++ b/Gemfile
11@@ -217,6 +217,9 @@ gem "thor", "0.19.1"
12
13 # gem "therubyracer", :platform => :ruby
14
15+# LDAP
16+gem 'net-ldap', '~> 0.16'
17+
18 group :production do # we don"t install these on travis to speed up test runs
19 # Analytics
20
21diff --git a/Gemfile.lock b/Gemfile.lock
22index 84f8172e4..cdbf19fcd 100644
23--- a/Gemfile.lock 2019-01-13 19:55:52.538561762 +0100
24+++ b/Gemfile.lock 2019-01-13 19:58:11.087099067 +0100
25@@ -398,6 +398,7 @@
26 mysql2 (0.5.2)
27 naught (1.1.0)
28 nenv (0.3.0)
29+ net-ldap (0.16.1)
30 nio4r (2.3.1)
31 nokogiri (1.8.5)
32 mini_portile2 (~> 2.3.0)
33@@ -820,6 +821,7 @@
34 minitest
35 mobile-fu (= 1.4.0)
36 mysql2 (= 0.5.2)
37+ net-ldap (~> 0.16)
38 nokogiri (= 1.8.5)
39 omniauth (= 1.8.1)
40 omniauth-tumblr (= 1.2)
41diff --git a/app/models/user.rb b/app/models/user.rb
42index 940a48f25..d1e2beeee 100644
43--- a/app/models/user.rb
44+++ b/app/models/user.rb
45@@ -337,6 +337,12 @@ class User < ActiveRecord::Base
46 end
47
48 def send_confirm_email
49+ if skip_email_confirmation?
50+ self.email = unconfirmed_email
51+ self.unconfirmed_email = nil
52+ save
53+ end
54+
55 return if unconfirmed_email.blank?
56 Workers::Mail::ConfirmEmail.perform_async(id)
57 end
58@@ -554,6 +560,14 @@ class User < ActiveRecord::Base
59 end
60 end
61
62+ def ldap_user?
63+ AppConfig.ldap.enable? && ldap_dn.present?
64+ end
65+
66+ def skip_email_confirmation?
67+ ldap_user? && AppConfig.ldap.skip_email_confirmation?
68+ end
69+
70 private
71
72 def clearable_fields
73diff --git a/config/defaults.yml b/config/defaults.yml
74index c046aff07..66e9afa13 100644
75--- a/config/defaults.yml
76+++ b/config/defaults.yml
77@@ -202,6 +202,20 @@ defaults:
78 scope: tags
79 include_user_tags: false
80 pod_tags:
81+ ldap:
82+ enable: false
83+ host: localhost
84+ port: 389
85+ only_ldap: true
86+ mail_attribute: mail
87+ skip_email_confirmation: true
88+ use_bind_dn: true
89+ bind_dn: "cn=diaspora,dc=example,dc=com"
90+ bind_pw: "password"
91+ search_base: "dc=example,dc=com"
92+ search_filter: "uid=%{username}"
93+ bind_template: "uid=%{username},dc=example,dc=com"
94+
95
96 development:
97 environment:
98diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example
99index b2573625d..c357c8651 100644
100--- a/config/diaspora.yml.example
101+++ b/config/diaspora.yml.example
102@@ -710,6 +710,36 @@ configuration: ## Section
103 ## If scope is 'tags', a comma separated list of tags here can be set.
104 ## For example "linux,diaspora", to receive posts related to these tags
105 #pod_tags:
106+ ldap:
107+ # Uncomment next line if you want to use LDAP on your instance
108+ enable: true
109+ host: localhost
110+ port: 389
111+ # Use only LDAP authentication (don't try other means)
112+ only_ldap: true
113+ # LDAP attribute to find the user's e-mail. Necessary to create accounts
114+ # for not existing users
115+ mail_attribute: mail
116+ # Skip e-mail confirmation when creating an account via LDAP.
117+ skip_email_confirmation: true
118+ # ----- Using bind_dn and bind_pw
119+ # bind_dn and bind_pw may be used if the diaspora instance
120+ # should be able to connect to LDAP to find and search for users.
121+
122+ use_bind_dn: true
123+ bind_dn: "cn=diaspora,dc=example,dc=com"
124+ bind_pw: "password"
125+ search_base: "dc=example,dc=com"
126+ # This is the filter with which to search for the user. %{username} will
127+ # be replaced by the given login.
128+ search_filter: "uid=%{username}"
129+ #
130+ # ----- Using template
131+ # This setting doesn't require a diaspora LDAP user. Use a template, and
132+ # diaspora will try to login with the templated dn and password
133+ #
134+ # bind_template: "uid=%{username},dc=example,dc=com"
135+
136
137 ## Here you can override settings defined above if you need
138 ## to have them different in different environments.
139diff --git a/config/initializers/0_ldap_authenticatable.rb b/config/initializers/0_ldap_authenticatable.rb
140new file mode 100644
141index 000000000..49846502f
142--- /dev/null
143+++ b/config/initializers/0_ldap_authenticatable.rb
144@@ -0,0 +1,82 @@
145+require 'net/ldap'
146+require 'devise/strategies/authenticatable'
147+
148+module Devise
149+ module Strategies
150+ class LdapAuthenticatable < Authenticatable
151+ def valid?
152+ AppConfig.ldap.enable? && params[:user].present?
153+ end
154+
155+ def authenticate!
156+ ldap = Net::LDAP.new(
157+ host: AppConfig.ldap.host,
158+ port: AppConfig.ldap.port,
159+ encryption: :simple_tls,
160+ )
161+
162+ if AppConfig.ldap.use_bind_dn?
163+ ldap.auth AppConfig.ldap.bind_dn, AppConfig.ldap.bind_pw
164+
165+ if !ldap.bind
166+ return fail(:ldap_configuration_error)
167+ end
168+
169+ search_filter = AppConfig.ldap.search_filter % { username: params[:user][:username] }
170+
171+ result = ldap.search(base: AppConfig.ldap.search_base, filter: search_filter, result_set: true)
172+
173+ if result.count != 1
174+ return login_fail
175+ end
176+
177+ user_dn = result.first.dn
178+ user_email = result.first[AppConfig.ldap.mail_attribute].first
179+ else
180+ user_dn = AppConfig.ldap.bind_template % { username: params[:user][:username] }
181+ end
182+
183+ ldap.auth user_dn, params[:user][:password]
184+
185+ if ldap.bind
186+ user = User.find_by(ldap_dn: user_dn)
187+
188+ # We don't want to trust too much the email attribute from
189+ # LDAP: if the user can edit it himself, he may login as
190+ # anyone
191+ if user.nil?
192+ if !AppConfig.ldap.use_bind_dn?
193+ result = ldap.search(base: user_dn, scope: Net::LDAP::SearchScope_BaseObject, filter: "(objectClass=*)", result_set: true)
194+ user_email = result.first[AppConfig.ldap.mail_attribute].first
195+ end
196+
197+ if user_email.present? && User.find_by(email: user_email).nil?
198+ # Password is used for remember_me token
199+ user = User.build(email: user_email, ldap_dn: user_dn, password: SecureRandom.hex, username: params[:user][:username])
200+ user.save
201+ user.seed_aspects
202+ elsif User.find_by(email: user_email).present?
203+ return fail(:ldap_existing_email)
204+ else
205+ return fail(:ldap_cannot_create_account_without_email)
206+ end
207+ end
208+
209+ success!(user)
210+ else
211+ return login_fail
212+ end
213+ end
214+
215+ def login_fail
216+ if AppConfig.ldap.only_ldap?
217+ return fail(:ldap_invalid_login)
218+ else
219+ return pass
220+ end
221+ end
222+ end
223+ end
224+end
225+
226+Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
227diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
228index 3698e2373..14e88063e 100644
229--- a/config/initializers/devise.rb
230+++ b/config/initializers/devise.rb
231@@ -250,10 +250,9 @@ Devise.setup do |config|
232 # If you want to use other strategies, that are not supported by Devise, or
233 # change the failure app, you can configure them inside the config.warden block.
234 #
235- # config.warden do |manager|
236- # manager.intercept_401 = false
237- # manager.default_strategies(:scope => :user).unshift :some_external_strategy
238- # end
239+ config.warden do |manager|
240+ manager.default_strategies(scope: :user).unshift :ldap_authenticatable
241+ end
242
243 # ==> Mountable engine configurations
244 # When using Devise inside an engine, let's call it `MyEngine`, and this engine
245diff --git a/db/migrate/20170724182100_add_ldap_dn_to_users.rb b/db/migrate/20170724182100_add_ldap_dn_to_users.rb
246new file mode 100644
247index 000000000..f5cc84d11
248--- /dev/null
249+++ b/db/migrate/20170724182100_add_ldap_dn_to_users.rb
250@@ -0,0 +1,6 @@
251+class AddLdapDnToUsers < ActiveRecord::Migration
252+ def change
253+ add_column :users, :ldap_dn, :text, null: true, default: nil
254+ add_index :users, ['ldap_dn'], :length => { "ldap_dn" => 191 }
255+ end
256+end