[DRE-commits] [ruby-diaspora-vines] 01/01: remove temporary files
Praveen Arimbrathodiyil
praveen at moszumanska.debian.org
Tue Jun 7 09:00:24 UTC 2016
This is an automated email from the git hooks/post-receive script.
praveen pushed a commit to branch master
in repository ruby-diaspora-vines.
commit 592400bf01ae43b893b2de7a84a248691ce44564
Author: Praveen Arimbrathodiyil <praveen at debian.org>
Date: Tue Jun 7 14:29:47 2016 +0530
remove temporary files
---
debian/files | 1 -
debian/ruby-diaspora-vines.debhelper.log | 18 --
debian/ruby-diaspora-vines.substvars | 2 -
debian/ruby-diaspora-vines/DEBIAN/control | 14 -
debian/ruby-diaspora-vines/DEBIAN/md5sums | 112 -------
.../usr/lib/ruby/vendor_ruby/vines.rb | 216 -------------
.../usr/lib/ruby/vendor_ruby/vines/cli.rb | 103 ------
.../usr/lib/ruby/vendor_ruby/vines/cluster.rb | 246 ---------------
.../ruby/vendor_ruby/vines/cluster/connection.rb | 26 --
.../ruby/vendor_ruby/vines/cluster/publisher.rb | 55 ----
.../lib/ruby/vendor_ruby/vines/cluster/pubsub.rb | 92 ------
.../lib/ruby/vendor_ruby/vines/cluster/sessions.rb | 125 --------
.../ruby/vendor_ruby/vines/cluster/subscriber.rb | 133 --------
.../usr/lib/ruby/vendor_ruby/vines/command/cert.rb | 50 ---
.../lib/ruby/vendor_ruby/vines/command/restart.rb | 12 -
.../lib/ruby/vendor_ruby/vines/command/start.rb | 28 --
.../usr/lib/ruby/vendor_ruby/vines/command/stop.rb | 18 --
.../usr/lib/ruby/vendor_ruby/vines/config.rb | 236 --------------
.../lib/ruby/vendor_ruby/vines/config/diaspora.rb | 37 ---
.../usr/lib/ruby/vendor_ruby/vines/config/host.rb | 137 --------
.../usr/lib/ruby/vendor_ruby/vines/config/port.rb | 132 --------
.../lib/ruby/vendor_ruby/vines/config/pubsub.rb | 108 -------
.../usr/lib/ruby/vendor_ruby/vines/contact.rb | 115 -------
.../usr/lib/ruby/vendor_ruby/vines/daemon.rb | 78 -----
.../usr/lib/ruby/vendor_ruby/vines/error.rb | 150 ---------
.../usr/lib/ruby/vendor_ruby/vines/jid.rb | 95 ------
.../usr/lib/ruby/vendor_ruby/vines/kit.rb | 30 --
.../usr/lib/ruby/vendor_ruby/vines/log.rb | 28 --
.../usr/lib/ruby/vendor_ruby/vines/node.rb | 31 --
.../usr/lib/ruby/vendor_ruby/vines/router.rb | 184 -----------
.../usr/lib/ruby/vendor_ruby/vines/stanza.rb | 175 -----------
.../lib/ruby/vendor_ruby/vines/stanza/dialback.rb | 28 --
.../usr/lib/ruby/vendor_ruby/vines/stanza/iq.rb | 48 ---
.../lib/ruby/vendor_ruby/vines/stanza/iq/auth.rb | 18 --
.../ruby/vendor_ruby/vines/stanza/iq/disco_info.rb | 45 ---
.../vendor_ruby/vines/stanza/iq/disco_items.rb | 29 --
.../lib/ruby/vendor_ruby/vines/stanza/iq/error.rb | 16 -
.../lib/ruby/vendor_ruby/vines/stanza/iq/ping.rb | 16 -
.../vendor_ruby/vines/stanza/iq/private_storage.rb | 83 -----
.../lib/ruby/vendor_ruby/vines/stanza/iq/query.rb | 10 -
.../lib/ruby/vendor_ruby/vines/stanza/iq/result.rb | 16 -
.../lib/ruby/vendor_ruby/vines/stanza/iq/roster.rb | 140 ---------
.../ruby/vendor_ruby/vines/stanza/iq/session.rb | 17 -
.../lib/ruby/vendor_ruby/vines/stanza/iq/vcard.rb | 56 ----
.../ruby/vendor_ruby/vines/stanza/iq/version.rb | 25 --
.../lib/ruby/vendor_ruby/vines/stanza/message.rb | 43 ---
.../lib/ruby/vendor_ruby/vines/stanza/presence.rb | 182 -----------
.../vendor_ruby/vines/stanza/presence/error.rb | 23 --
.../vendor_ruby/vines/stanza/presence/probe.rb | 37 ---
.../vendor_ruby/vines/stanza/presence/subscribe.rb | 42 ---
.../vines/stanza/presence/subscribed.rb | 51 ---
.../vines/stanza/presence/unavailable.rb | 15 -
.../vines/stanza/presence/unsubscribe.rb | 38 ---
.../vines/stanza/presence/unsubscribed.rb | 38 ---
.../lib/ruby/vendor_ruby/vines/stanza/pubsub.rb | 22 --
.../ruby/vendor_ruby/vines/stanza/pubsub/create.rb | 39 ---
.../ruby/vendor_ruby/vines/stanza/pubsub/delete.rb | 41 ---
.../vendor_ruby/vines/stanza/pubsub/publish.rb | 66 ----
.../vendor_ruby/vines/stanza/pubsub/subscribe.rb | 44 ---
.../vendor_ruby/vines/stanza/pubsub/unsubscribe.rb | 30 --
.../usr/lib/ruby/vendor_ruby/vines/storage.rb | 291 -----------------
.../lib/ruby/vendor_ruby/vines/storage/local.rb | 151 ---------
.../usr/lib/ruby/vendor_ruby/vines/storage/null.rb | 51 ---
.../usr/lib/ruby/vendor_ruby/vines/storage/sql.rb | 346 ---------------------
.../usr/lib/ruby/vendor_ruby/vines/store.rb | 152 ---------
.../usr/lib/ruby/vendor_ruby/vines/stream.rb | 309 ------------------
.../lib/ruby/vendor_ruby/vines/stream/client.rb | 88 ------
.../ruby/vendor_ruby/vines/stream/client/auth.rb | 74 -----
.../vines/stream/client/auth_restart.rb | 29 --
.../ruby/vendor_ruby/vines/stream/client/bind.rb | 64 ----
.../vines/stream/client/bind_restart.rb | 30 --
.../ruby/vendor_ruby/vines/stream/client/closed.rb | 13 -
.../ruby/vendor_ruby/vines/stream/client/ready.rb | 17 -
.../vendor_ruby/vines/stream/client/session.rb | 210 -------------
.../ruby/vendor_ruby/vines/stream/client/start.rb | 27 --
.../ruby/vendor_ruby/vines/stream/client/tls.rb | 38 ---
.../lib/ruby/vendor_ruby/vines/stream/component.rb | 58 ----
.../vines/stream/component/handshake.rb | 26 --
.../vendor_ruby/vines/stream/component/ready.rb | 23 --
.../vendor_ruby/vines/stream/component/start.rb | 19 --
.../usr/lib/ruby/vendor_ruby/vines/stream/http.rb | 185 -----------
.../lib/ruby/vendor_ruby/vines/stream/http/auth.rb | 22 --
.../lib/ruby/vendor_ruby/vines/stream/http/bind.rb | 32 --
.../vendor_ruby/vines/stream/http/bind_restart.rb | 37 ---
.../ruby/vendor_ruby/vines/stream/http/ready.rb | 29 --
.../ruby/vendor_ruby/vines/stream/http/request.rb | 193 ------------
.../ruby/vendor_ruby/vines/stream/http/session.rb | 128 --------
.../ruby/vendor_ruby/vines/stream/http/sessions.rb | 65 ----
.../ruby/vendor_ruby/vines/stream/http/start.rb | 23 --
.../lib/ruby/vendor_ruby/vines/stream/parser.rb | 79 -----
.../usr/lib/ruby/vendor_ruby/vines/stream/sasl.rb | 128 --------
.../lib/ruby/vendor_ruby/vines/stream/server.rb | 207 ------------
.../ruby/vendor_ruby/vines/stream/server/auth.rb | 30 --
.../vendor_ruby/vines/stream/server/auth_method.rb | 66 ----
.../vines/stream/server/auth_restart.rb | 39 ---
.../vines/stream/server/final_restart.rb | 21 --
.../vines/stream/server/outbound/auth.rb | 65 ----
.../stream/server/outbound/auth_dialback_result.rb | 39 ---
.../vines/stream/server/outbound/auth_external.rb | 33 --
.../stream/server/outbound/auth_external_result.rb | 32 --
.../vines/stream/server/outbound/auth_restart.rb | 27 --
.../vines/stream/server/outbound/authoritative.rb | 48 ---
.../vines/stream/server/outbound/final_features.rb | 28 --
.../vines/stream/server/outbound/final_restart.rb | 20 --
.../vines/stream/server/outbound/start.rb | 20 --
.../vines/stream/server/outbound/tls_result.rb | 34 --
.../ruby/vendor_ruby/vines/stream/server/ready.rb | 24 --
.../ruby/vendor_ruby/vines/stream/server/start.rb | 40 ---
.../usr/lib/ruby/vendor_ruby/vines/stream/state.rb | 46 ---
.../usr/lib/ruby/vendor_ruby/vines/token_bucket.rb | 55 ----
.../usr/lib/ruby/vendor_ruby/vines/user.rb | 125 --------
.../usr/lib/ruby/vendor_ruby/vines/version.rb | 6 -
.../usr/lib/ruby/vendor_ruby/vines/xmpp_server.rb | 25 --
.../doc/ruby-diaspora-vines/changelog.Debian.gz | Bin 176 -> 0 bytes
.../usr/share/doc/ruby-diaspora-vines/copyright | 31 --
.../diaspora-vines-0.2.0.develop.4.gemspec | 66 ----
.../diaspora-vines-0.2.0.develop.4.gemspec | 66 ----
vines.log | 130 --------
118 files changed, 8305 deletions(-)
diff --git a/debian/files b/debian/files
deleted file mode 100644
index 6827cfd..0000000
--- a/debian/files
+++ /dev/null
@@ -1 +0,0 @@
-ruby-diaspora-vines_0.2.0~develop.4-1_all.deb ruby optional
diff --git a/debian/ruby-diaspora-vines.debhelper.log b/debian/ruby-diaspora-vines.debhelper.log
deleted file mode 100644
index 63f42d6..0000000
--- a/debian/ruby-diaspora-vines.debhelper.log
+++ /dev/null
@@ -1,18 +0,0 @@
-dh_auto_configure
-dh_auto_build
-dh_auto_test
-dh_prep
-dh_auto_install
-override_dh_install dh_install
-dh_install
-dh_installdocs
-dh_installchangelogs
-dh_perl
-dh_link
-dh_compress
-dh_fixperms
-dh_installdeb
-dh_gencontrol
-dh_md5sums
-dh_builddeb
-dh_builddeb
diff --git a/debian/ruby-diaspora-vines.substvars b/debian/ruby-diaspora-vines.substvars
deleted file mode 100644
index 17ae1fe..0000000
--- a/debian/ruby-diaspora-vines.substvars
+++ /dev/null
@@ -1,2 +0,0 @@
-ruby:Versions=ruby1.9.1 ruby2.0
-misc:Depends=
diff --git a/debian/ruby-diaspora-vines/DEBIAN/control b/debian/ruby-diaspora-vines/DEBIAN/control
deleted file mode 100644
index 77e676b..0000000
--- a/debian/ruby-diaspora-vines/DEBIAN/control
+++ /dev/null
@@ -1,14 +0,0 @@
-Package: ruby-diaspora-vines
-Version: 0.2.0~develop.4-1
-Architecture: all
-Maintainer: Debian Ruby Extras Maintainers <pkg-ruby-extras-maintainers at lists.alioth.debian.org>
-Installed-Size: 371
-Depends: ruby | ruby-interpreter, ruby-activerecord (>= 4.1), ruby-bcrypt (>= 3.1), ruby-em-hiredis (>= 0.3.0), ruby-eventmachine (>= 1.0.8), ruby-http-parser.rb (>= 0.6), ruby-nokogiri (>= 1.6)
-Section: ruby
-Priority: optional
-Homepage: https://github.com/diaspora/vines
-Description: Vines fork build for diaspora integration
- The vines gem installs a fully standards-compliant XMPP chat server.
- Vines is an XMPP chat server that connects you with large clusters easily.
- DO NOT use it unless you know what you are doing!
-Ruby-Versions: ruby1.9.1 ruby2.0
diff --git a/debian/ruby-diaspora-vines/DEBIAN/md5sums b/debian/ruby-diaspora-vines/DEBIAN/md5sums
deleted file mode 100644
index c840134..0000000
--- a/debian/ruby-diaspora-vines/DEBIAN/md5sums
+++ /dev/null
@@ -1,112 +0,0 @@
-4cebb877edead3b1bd8915e4ad6dba48 usr/lib/ruby/vendor_ruby/vines.rb
-2dc850867be96859426755728e267af3 usr/lib/ruby/vendor_ruby/vines/cli.rb
-badf6a7a9fc46ee0067eb13b5599fa77 usr/lib/ruby/vendor_ruby/vines/cluster.rb
-2098d4a439c6ee1b7cc05356a999986a usr/lib/ruby/vendor_ruby/vines/cluster/connection.rb
-0b6667c1c5e707f6850fc3bbc80c144f usr/lib/ruby/vendor_ruby/vines/cluster/publisher.rb
-8707222a7de873d171a6cc48b55a06df usr/lib/ruby/vendor_ruby/vines/cluster/pubsub.rb
-5b15fafbfbbd042b66187bc2a5fc92f4 usr/lib/ruby/vendor_ruby/vines/cluster/sessions.rb
-cb0051fe68004b6b2fde4c0b241da7f9 usr/lib/ruby/vendor_ruby/vines/cluster/subscriber.rb
-b640856536f20010260903b657c47405 usr/lib/ruby/vendor_ruby/vines/command/cert.rb
-5582d203ef8bbae582f9e57bfec0f6f7 usr/lib/ruby/vendor_ruby/vines/command/restart.rb
-3c557a504455c1373344ee781fb272eb usr/lib/ruby/vendor_ruby/vines/command/start.rb
-33e742a4272c5d1fcb9a28ae4b88401b usr/lib/ruby/vendor_ruby/vines/command/stop.rb
-fba2849d8d7241854dd3fec26ca1046c usr/lib/ruby/vendor_ruby/vines/config.rb
-d6fa258bde8697ee15589ab4c24c591c usr/lib/ruby/vendor_ruby/vines/config/diaspora.rb
-a9864bc87a95b8e52a1422066a9a41e3 usr/lib/ruby/vendor_ruby/vines/config/host.rb
-cfc3978df3243f1d436d1ee42d0f35c1 usr/lib/ruby/vendor_ruby/vines/config/port.rb
-5d19ca69673de62411e608905717e167 usr/lib/ruby/vendor_ruby/vines/config/pubsub.rb
-7bfe4841fcee429dc8bc6d7e6e27ae1b usr/lib/ruby/vendor_ruby/vines/contact.rb
-c0c9ca8230157e622f6bd1018ac6e427 usr/lib/ruby/vendor_ruby/vines/daemon.rb
-3d7011624ed652f8a24570deef176286 usr/lib/ruby/vendor_ruby/vines/error.rb
-a7f7ecb00f16c0345300c0f552a82c18 usr/lib/ruby/vendor_ruby/vines/jid.rb
-bd72e5c5c3f5685e2f4f25c61127f085 usr/lib/ruby/vendor_ruby/vines/kit.rb
-650a3d05111780b90e699b06ee9a2304 usr/lib/ruby/vendor_ruby/vines/log.rb
-102b73b1343b1e7593cb8494c53cdcf6 usr/lib/ruby/vendor_ruby/vines/node.rb
-2816017a9630637208d3acf8b7b1ec9d usr/lib/ruby/vendor_ruby/vines/router.rb
-b8035b4ad13af09f7b9da415ce51a1e2 usr/lib/ruby/vendor_ruby/vines/stanza.rb
-211a1b97c8cd8eae679b59f4323d1deb usr/lib/ruby/vendor_ruby/vines/stanza/dialback.rb
-0697ae4bf2bbce8aace044d1f668a611 usr/lib/ruby/vendor_ruby/vines/stanza/iq.rb
-d9cc57a6703a1db5f8ea2843151f065b usr/lib/ruby/vendor_ruby/vines/stanza/iq/auth.rb
-9e262b914f14af3146d8c668c36092cc usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_info.rb
-f8062e7096dc86fcd09f921f62798461 usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_items.rb
-faf435287c88c1ede3d2d8f31185d6d0 usr/lib/ruby/vendor_ruby/vines/stanza/iq/error.rb
-5066c4465bf4e4d935d2cca8b1689bce usr/lib/ruby/vendor_ruby/vines/stanza/iq/ping.rb
-ebf2f305ae4b09dfb4b6f879a49e2ad4 usr/lib/ruby/vendor_ruby/vines/stanza/iq/private_storage.rb
-cd08e2a43769c825407681a5906661f6 usr/lib/ruby/vendor_ruby/vines/stanza/iq/query.rb
-00cc42d5ff747b88e9a4fd16d31cce5b usr/lib/ruby/vendor_ruby/vines/stanza/iq/result.rb
-0630e07740214a23d45c36d84762d809 usr/lib/ruby/vendor_ruby/vines/stanza/iq/roster.rb
-f5c3446c275a287e610bf9f1980a3d07 usr/lib/ruby/vendor_ruby/vines/stanza/iq/session.rb
-87a707373de38ecd28f47d8c09607dec usr/lib/ruby/vendor_ruby/vines/stanza/iq/vcard.rb
-ffc4e43c7428ee72e9a702beb0620d6f usr/lib/ruby/vendor_ruby/vines/stanza/iq/version.rb
-023b80a741d47ac68d7e42fc2dc74092 usr/lib/ruby/vendor_ruby/vines/stanza/message.rb
-b9ee7e521ba7b9a6c37847d4b568d955 usr/lib/ruby/vendor_ruby/vines/stanza/presence.rb
-df5993fa2142b5f537275731284974d5 usr/lib/ruby/vendor_ruby/vines/stanza/presence/error.rb
-225d1b018d1b6e61d93d4d6cd012093f usr/lib/ruby/vendor_ruby/vines/stanza/presence/probe.rb
-211759563ed021379db8c104aaf2078a usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribe.rb
-c2331041fbd02c2b09149d766a6e677d usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribed.rb
-9dc4a8b21982070c3b1027266cb62a72 usr/lib/ruby/vendor_ruby/vines/stanza/presence/unavailable.rb
-f01c1b5ce588d624e1359f3755f70176 usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribe.rb
-37d7acafc6f0adb33717debf6f2e1df9 usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribed.rb
-59de91b51eb81636735281321ca3df01 usr/lib/ruby/vendor_ruby/vines/stanza/pubsub.rb
-f7538132e1ed90e7fab7fadba8ff3aac usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/create.rb
-84195b776c4bd72bd9c8d404c1d234c3 usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/delete.rb
-4b6772aa684db7706fbf6f6ac218c4a2 usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/publish.rb
-cdf30ccc2016e6eb1043ffcb686364e4 usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/subscribe.rb
-5922338be22794ecb92cc1cf4af29f16 usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/unsubscribe.rb
-53683b3f11aa7a3ea180eedc35953461 usr/lib/ruby/vendor_ruby/vines/storage.rb
-167f8d11586c9fb12bc8b533ccc2ee13 usr/lib/ruby/vendor_ruby/vines/storage/local.rb
-ea4af6f25d6c0d7d7c20361c4f961659 usr/lib/ruby/vendor_ruby/vines/storage/null.rb
-6cadd393c8b6b1f631fb1a59392e042d usr/lib/ruby/vendor_ruby/vines/storage/sql.rb
-4a7d755d2df447f1f11df8f826cbdd67 usr/lib/ruby/vendor_ruby/vines/store.rb
-98ba4c7df9dd7585bb457850e0300f57 usr/lib/ruby/vendor_ruby/vines/stream.rb
-a352adf2074b018cb58cdf7e305d98ae usr/lib/ruby/vendor_ruby/vines/stream/client.rb
-d3befae6bb1ea89e48b642f8cc5bb842 usr/lib/ruby/vendor_ruby/vines/stream/client/auth.rb
-663a3330d899a5b17a4a44c18397c480 usr/lib/ruby/vendor_ruby/vines/stream/client/auth_restart.rb
-778eac3c054201744e31f434c01f73bb usr/lib/ruby/vendor_ruby/vines/stream/client/bind.rb
-59a4e3bdb6bd363bb0fa4ee182375a47 usr/lib/ruby/vendor_ruby/vines/stream/client/bind_restart.rb
-975012a25d2c60bf8fa4549dbe351de8 usr/lib/ruby/vendor_ruby/vines/stream/client/closed.rb
-ec0bacf752442eef0d3d6e5100b1eec2 usr/lib/ruby/vendor_ruby/vines/stream/client/ready.rb
-c45946f98442954356fc338e4dcdcff3 usr/lib/ruby/vendor_ruby/vines/stream/client/session.rb
-abb60e592a34c6fea433f8244af83392 usr/lib/ruby/vendor_ruby/vines/stream/client/start.rb
-66502ab2f8beb75ba1d528c768ceffba usr/lib/ruby/vendor_ruby/vines/stream/client/tls.rb
-ff92d63b90f85ab5f2b463da7561c688 usr/lib/ruby/vendor_ruby/vines/stream/component.rb
-8546bd23564476dee5cb46d6ee14b876 usr/lib/ruby/vendor_ruby/vines/stream/component/handshake.rb
-b8ecd74915232049371b92332a3b5f85 usr/lib/ruby/vendor_ruby/vines/stream/component/ready.rb
-f5c522dcaa53addd14328cfbb699992b usr/lib/ruby/vendor_ruby/vines/stream/component/start.rb
-6516c8a6d2e378ffab61151b673bfbe7 usr/lib/ruby/vendor_ruby/vines/stream/http.rb
-0f85aa42b6e689bc0343902050779901 usr/lib/ruby/vendor_ruby/vines/stream/http/auth.rb
-8dbdbb82e01768d899c8a2cb17f95ac0 usr/lib/ruby/vendor_ruby/vines/stream/http/bind.rb
-a65cfaf0af94297d263324ed790650d4 usr/lib/ruby/vendor_ruby/vines/stream/http/bind_restart.rb
-7ac55b15f6db8f53bd27c2640050d316 usr/lib/ruby/vendor_ruby/vines/stream/http/ready.rb
-90708b2f9774173e9b96ff403123bc65 usr/lib/ruby/vendor_ruby/vines/stream/http/request.rb
-76907f8a1a43af83ec2d20249b6710e2 usr/lib/ruby/vendor_ruby/vines/stream/http/session.rb
-be75f7e199dd7c3b247519e135c7b575 usr/lib/ruby/vendor_ruby/vines/stream/http/sessions.rb
-d2b4551dc53cd472d269b06907c875f8 usr/lib/ruby/vendor_ruby/vines/stream/http/start.rb
-779968f538175e851a9ca9c32cd2672d usr/lib/ruby/vendor_ruby/vines/stream/parser.rb
-0e55475603a113e658b85f67774868c8 usr/lib/ruby/vendor_ruby/vines/stream/sasl.rb
-83760ab1eb5462ecd722e2f6154bef6d usr/lib/ruby/vendor_ruby/vines/stream/server.rb
-0fe4debf64f0c81de0d22c9cde725830 usr/lib/ruby/vendor_ruby/vines/stream/server/auth.rb
-fc874998cba50403ef944284d7b5115c usr/lib/ruby/vendor_ruby/vines/stream/server/auth_method.rb
-1a3bd54771a79be47adbccc18808eb21 usr/lib/ruby/vendor_ruby/vines/stream/server/auth_restart.rb
-a9a832f7ced91342b36bae240d139d64 usr/lib/ruby/vendor_ruby/vines/stream/server/final_restart.rb
-7bf5d304375f728c0423a8e73d69a5fa usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth.rb
-c323ec0a8a24e5f67e23fc69fd07eb8b usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_dialback_result.rb
-a37bc98cfc7aac2790d205153cc38b20 usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external.rb
-49e4348e61e949e90f807753e85cbcd5 usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external_result.rb
-647bf4c9083055968ac445fc2231f3fd usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_restart.rb
-ca2eb9760a77b9d2142b6b22c27116c6 usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/authoritative.rb
-dec2558692525a2c40041df1ad534bba usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_features.rb
-1e0cc723c521463476b6dc1cf2e775e8 usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_restart.rb
-cc8b9197358277671ca3638e68f396f1 usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/start.rb
-1f060b7bb290c89a4b4b6c511c0bd65a usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/tls_result.rb
-30e533393450de814a31bf6162ad83a6 usr/lib/ruby/vendor_ruby/vines/stream/server/ready.rb
-b04af899f7b120337b953186b3204d4f usr/lib/ruby/vendor_ruby/vines/stream/server/start.rb
-ef08f22bb12f11a542e5483e27825ec7 usr/lib/ruby/vendor_ruby/vines/stream/state.rb
-c9a259957fd1553c1226ad9ab76f1335 usr/lib/ruby/vendor_ruby/vines/token_bucket.rb
-3fa87b9be603d4b9ddae54974bccfa86 usr/lib/ruby/vendor_ruby/vines/user.rb
-38352e690eb69553c96dd7f690d86b0a usr/lib/ruby/vendor_ruby/vines/version.rb
-636f92f05e0003cd8db554b0e585fe1c usr/lib/ruby/vendor_ruby/vines/xmpp_server.rb
-29a37069c5b9c9fa96084b0aaed670d0 usr/share/doc/ruby-diaspora-vines/changelog.Debian.gz
-57c43b1061f69f12ce71e7a5c50c7bc4 usr/share/doc/ruby-diaspora-vines/copyright
-a4bedd83404ea553d09dbbe4f3c2d0a0 usr/share/rubygems-integration/1.9.1/specifications/diaspora-vines-0.2.0.develop.4.gemspec
-a4bedd83404ea553d09dbbe4f3c2d0a0 usr/share/rubygems-integration/2.0/specifications/diaspora-vines-0.2.0.develop.4.gemspec
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines.rb
deleted file mode 100644
index 139e7ea..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines.rb
+++ /dev/null
@@ -1,216 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- NAMESPACES = {
- :stream => 'http://etherx.jabber.org/streams'.freeze,
- :client => 'jabber:client'.freeze,
- :server => 'jabber:server'.freeze,
- :component => 'jabber:component:accept'.freeze,
- :roster => 'jabber:iq:roster'.freeze,
- :non_sasl => 'jabber:iq:auth'.freeze,
- :storage => 'jabber:iq:private'.freeze,
- :version => 'jabber:iq:version'.freeze,
- :sasl => 'urn:ietf:params:xml:ns:xmpp-sasl'.freeze,
- :tls => 'urn:ietf:params:xml:ns:xmpp-tls'.freeze,
- :bind => 'urn:ietf:params:xml:ns:xmpp-bind'.freeze,
- :session => 'urn:ietf:params:xml:ns:xmpp-session'.freeze,
- :stanzas => 'urn:ietf:params:xml:ns:xmpp-stanzas'.freeze,
- :ping => 'urn:xmpp:ping'.freeze,
- :delay => 'urn:xmpp:delay'.freeze,
- :pubsub => 'http://jabber.org/protocol/pubsub'.freeze,
- :pubsub_event => 'http://jabber.org/protocol/pubsub#event'.freeze,
- :pubsub_create => 'http://jabber.org/protocol/pubsub#create-nodes'.freeze,
- :pubsub_delete => 'http://jabber.org/protocol/pubsub#delete-nodes'.freeze,
- :pubsub_instant => 'http://jabber.org/protocol/pubsub#instant-nodes'.freeze,
- :pubsub_item_ids => 'http://jabber.org/protocol/pubsub#item-ids'.freeze,
- :pubsub_publish => 'http://jabber.org/protocol/pubsub#publish'.freeze,
- :pubsub_subscribe => 'http://jabber.org/protocol/pubsub#subscribe'.freeze,
- :disco_items => 'http://jabber.org/protocol/disco#items'.freeze,
- :disco_info => 'http://jabber.org/protocol/disco#info'.freeze,
- :http_bind => 'http://jabber.org/protocol/httpbind'.freeze,
- :offline => 'msgoffline'.freeze,
- :bosh => 'urn:xmpp:xbosh'.freeze,
- :vcard => 'vcard-temp'.freeze,
- :vcard_update => 'vcard-temp:x:update'.freeze,
- :si => 'http://jabber.org/protocol/si'.freeze,
- :byte_streams => 'http://jabber.org/protocol/bytestreams'.freeze,
- :dialback => 'urn:xmpp:features:dialback'.freeze,
- :legacy_dialback => 'jabber:server:dialback'.freeze
- }.freeze
-
- module Log
- @@logger = nil
- def log
- unless @@logger
- @@logger = Logger.new(STDOUT)
- @@logger.level = Logger::INFO
- @@logger.progname = 'vines'
- @@logger.formatter = Class.new(Logger::Formatter) do
- def initialize
- @time = "%Y-%m-%dT%H:%M:%SZ".freeze
- @fmt = "[%s] %5s -- %s: %s\n".freeze
- end
- def call(severity, time, program, msg)
- @fmt % [time.utc.strftime(@time), severity, program, msg2str(msg)]
- end
- end.new
- end
- @@logger
- end
- end
-end
-
-%w[
- active_record
- base64
- bcrypt
- digest/sha1
- em-hiredis
- eventmachine
- fiber
- fileutils
- http/parser
- json
- logger
- nokogiri
- openssl
- optparse
- resolv
- set
- socket
- time
- uri
- yaml
-
- vines/cli
- vines/log
- vines/jid
-
- vines/stanza
- vines/stanza/iq
- vines/stanza/iq/query
- vines/stanza/iq/auth
- vines/stanza/iq/disco_info
- vines/stanza/iq/disco_items
- vines/stanza/iq/error
- vines/stanza/iq/ping
- vines/stanza/iq/private_storage
- vines/stanza/iq/result
- vines/stanza/iq/roster
- vines/stanza/iq/session
- vines/stanza/iq/vcard
- vines/stanza/iq/version
- vines/stanza/dialback
- vines/stanza/message
- vines/stanza/presence
- vines/stanza/presence/error
- vines/stanza/presence/probe
- vines/stanza/presence/subscribe
- vines/stanza/presence/subscribed
- vines/stanza/presence/unavailable
- vines/stanza/presence/unsubscribe
- vines/stanza/presence/unsubscribed
- vines/stanza/pubsub
- vines/stanza/pubsub/create
- vines/stanza/pubsub/delete
- vines/stanza/pubsub/publish
- vines/stanza/pubsub/subscribe
- vines/stanza/pubsub/unsubscribe
-
- vines/storage
- vines/storage/local
- vines/storage/sql
- vines/storage/null
-
- vines/config
- vines/config/host
- vines/config/port
- vines/config/pubsub
-
- vines/store
- vines/contact
- vines/daemon
- vines/error
- vines/kit
- vines/node
- vines/router
- vines/token_bucket
- vines/user
- vines/version
- vines/xmpp_server
-
- vines/cluster
- vines/cluster/connection
- vines/cluster/publisher
- vines/cluster/pubsub
- vines/cluster/sessions
- vines/cluster/subscriber
-
- vines/stream
- vines/stream/sasl
- vines/stream/state
- vines/stream/parser
-
- vines/stream/client
- vines/stream/client/session
- vines/stream/client/start
- vines/stream/client/tls
- vines/stream/client/auth_restart
- vines/stream/client/auth
- vines/stream/client/bind_restart
- vines/stream/client/bind
- vines/stream/client/ready
- vines/stream/client/closed
-
- vines/stream/component
- vines/stream/component/start
- vines/stream/component/handshake
- vines/stream/component/ready
-
- vines/stream/http
- vines/stream/http/session
- vines/stream/http/sessions
- vines/stream/http/request
- vines/stream/http/start
- vines/stream/http/auth
- vines/stream/http/bind_restart
- vines/stream/http/bind
- vines/stream/http/ready
-
- vines/stream/server
- vines/stream/server/start
- vines/stream/server/auth_method
- vines/stream/server/auth_restart
- vines/stream/server/auth
- vines/stream/server/final_restart
- vines/stream/server/ready
-
- vines/stream/server/outbound/start
- vines/stream/server/outbound/auth
- vines/stream/server/outbound/tls_result
- vines/stream/server/outbound/authoritative
- vines/stream/server/outbound/auth_restart
- vines/stream/server/outbound/auth_external
- vines/stream/server/outbound/auth_external_result
- vines/stream/server/outbound/auth_dialback_result
- vines/stream/server/outbound/final_restart
- vines/stream/server/outbound/final_features
-
- vines/command/cert
- vines/command/restart
- vines/command/start
- vines/command/stop
-].each {|f| require f }
-
-# Try loading diaspora configuration
-%w[
- config/application.rb
- config/load_config.rb
- config/initializers/devise.rb
-].each {|c|
- begin
- require "#{Dir.pwd}/#{c}"
- rescue LoadError
- puts "Was not able to load #{c}! This not a standalone version. You should use it only in a diaspora environment."
- end
-}
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cli.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cli.rb
deleted file mode 100644
index c5c9029..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cli.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-module Vines
- # The command line application that's invoked by the `vines` binary included
- # in the gem. Parses the command line arguments to create a new server
- # directory, and starts and stops the server.
- class CLI
- COMMANDS = %w[start stop restart cert]
-
- def self.start
- self.new.start
- end
-
- # Run the command line application to parse arguments and run sub-commands.
- # Exits the process with a non-zero return code to indicate failure.
- #
- # Returns nothing.
- def start
- opts = parse(ARGV)
- command = Command.const_get(opts[:command].capitalize).new
- begin
- command.run(opts)
- rescue SystemExit
- # do nothing
- end
- end
-
- private
-
- # Parse the command line arguments and run the matching sub-command
- # (e.g. init, start, stop, etc).
- #
- # args - The ARGV array provided by the command line.
- #
- # Returns nothing.
- def parse(args)
- options = {}
- parser = OptionParser.new do |opts|
- opts.banner = "Usage: vines [options] #{COMMANDS.join('|')}"
-
- opts.separator ""
- opts.separator "Daemon options:"
-
- opts.on('-d', '--daemonize', 'Run daemonized in the background') do |daemonize|
- options[:daemonize] = daemonize
- end
-
- options[:log] = 'log/vines.log'
- opts.on('-l', '--log FILE', 'File to redirect output (default: log/vines.log)') do |log|
- options[:log] = log
- end
-
- options[:pid] = 'pid/vines.pid'
- opts.on('-P', '--pid FILE', 'File to store PID (default: pid/vines.pid)') do |pid|
- options[:pid] = pid
- end
-
- opts.separator ""
- opts.separator "Common options:"
-
- opts.on('-h', '--help', 'Show this message') do |help|
- options[:help] = help
- end
-
- opts.on('-v', '--version', 'Show version') do |version|
- options[:version] = version
- end
- end
-
- begin
- parser.parse!(args)
- rescue
- puts parser
- exit(1)
- end
-
- if options[:version]
- puts Vines::VERSION
- exit
- end
-
- if options[:help]
- puts parser
- exit
- end
-
- command = args.shift
- unless COMMANDS.include?(command)
- puts parser
- exit(1)
- end
-
- options.tap do |opts|
- opts[:args] = args
- opts[:command] = command
- opts[:config] = File.expand_path("conf/config.rb")
- opts[:pid] = File.expand_path(opts[:pid])
- opts[:log] = File.expand_path(opts[:log])
- if defined? AppConfig
- opts[:config] = "vines/config/diaspora"
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster.rb
deleted file mode 100644
index 29f559e..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster.rb
+++ /dev/null
@@ -1,246 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- # Server instances may be connected to one another in a cluster so they
- # can host a single chat domain, or set of domains, across many servers,
- # transparently to users. A redis database is used for the session routing
- # table, mapping JIDs to their node's location. Redis pubsub channels are
- # used to communicate amongst nodes.
- #
- # Using a shared in-memory cache, like redis, rather than synchronizing the
- # cache to each node, allows us to add cluster nodes dynamically, without
- # updating all other nodes' config files. It also greatly reduces the amount
- # of memory required by the chat server processes.
- class Cluster
- include Vines::Log
-
- attr_reader :id
-
- %w[host port database password].each do |name|
- define_method(name) do |*args|
- if args.first
- @connection.send("#{name}=", args.first)
- else
- @connection.send(name)
- end
- end
- end
-
- def initialize(config, &block)
- @config, @id = config, Kit.uuid
- @connection = Connection.new
- @sessions = Sessions.new(self)
- @publisher = Publisher.new(self)
- @subscriber = Subscriber.new(self)
- @pubsub = PubSub.new(self)
- instance_eval(&block)
- end
-
- # Join this node to the cluster by broadcasting its state to the
- # other nodes, subscribing to redis channels, and scheduling periodic
- # heartbeat broadcasts. This method must be called after initialize
- # or this node will not be a cluster member.
- def start
- @connection.connect
- @publisher.broadcast(:online)
- @subscriber.subscribe
-
- EM.add_periodic_timer(1) { heartbeat }
-
- at_exit do
- @publisher.broadcast(:offline)
- @sessions.delete_all(@id)
- end
- end
-
- # Returns any streams hosted at remote nodes for these JIDs. The streams act
- # like normal EM::Connections, but are actually proxies that route stanzas
- # over redis pubsub channels to remote nodes.
- def remote_sessions(*jids)
- @sessions.find(*jids).map do |session|
- StreamProxy.new(self, session)
- end
- end
-
- # Persist the user's session to the shared redis cache so that other cluster
- # nodes can locate the node hosting this user's connection and route messages
- # to them.
- def save_session(jid, attrs)
- @sessions.save(jid, attrs)
- end
-
- # Remove this user from the cluster routing table so that no further stanzas
- # may be routed to them. This must be called when the user's session is
- # terminated, either by logout or stream disconnect.
- def delete_session(jid)
- @sessions.delete(jid)
- end
-
- # Remove all user sessions from the routing table associated with the
- # given node ID. Cluster nodes call this themselves during normal shutdown.
- # However, if a node dies without being properly shutdown, the other nodes
- # will cleanup its sessions when they detect the node is offline.
- def delete_sessions(node)
- @sessions.delete_all(node)
- end
-
- # Notify the session store that this node is still alive. The node
- # broadcasts its current time, so all cluster members' clocks don't
- # necessarily need to be in sync.
- def poke(node, time)
- @sessions.poke(node, time)
- end
-
- # Send the stanza to the node hosting the user's session. The stanza is
- # published to the channel to which the remote node is listening for
- # messages.
- def route(stanza, node)
- @publisher.route(stanza, node)
- end
-
- # Notify the remote node that the user's roster has changed and it should
- # reload the user from storage.
- def update_user(jid, node)
- @publisher.update_user(jid, node)
- end
-
- # Return the shared redis connection for most queries to use.
- def connection
- @connection.connect
- end
-
- # Create a new redis connection.
- def connect
- @connection.create
- end
-
- # Turn an asynchronous redis query into a blocking call by pausing the
- # fiber in which this code is running. Return the result of the query
- # from this method, rather than passing it to a callback block.
- def query(name, *args)
- fiber, yielding = Fiber.current, true
- req = connection.send(name, *args)
- req.errback { fiber.resume rescue yielding = false }
- req.callback {|response| fiber.resume(response) }
- Fiber.yield if yielding
- end
-
- # Return the connected streams for this user, without any proxy streams
- # to remote cluster nodes (locally connected streams only).
- def connected_resources(jid)
- @config.router.connected_resources(jid, jid, false)
- end
-
- # Return the Storage implementation for this domain or nil if the
- # domain is not hosted here.
- def storage(domain)
- @config.storage(domain)
- end
-
- # Create a pubsub topic (a.k.a. node), in the given domain, to which
- # messages may be published. The domain argument will be one of the
- # configured pubsub subdomains in conf/config.rb (e.g. games.wonderland.lit,
- # topics.wonderland.lit, etc).
- def add_pubsub_node(domain, node)
- @pubsub.add_node(domain, node)
- end
-
- # Remove a pubsub topic so messages may no longer be broadcast to it.
- def delete_pubsub_node(domain, node)
- @pubsub.delete_node(domain, node)
- end
-
- # Subscribe the JID to the pubsub topic so it will receive any messages
- # published to it.
- def subscribe_pubsub(domain, node, jid)
- @pubsub.subscribe(domain, node, jid)
- end
-
- # Unsubscribe the JID from the pubsub topic, deregistering its interest
- # in receiving any messages published to it.
- def unsubscribe_pubsub(domain, node, jid)
- @pubsub.unsubscribe(domain, node, jid)
- end
-
- # Unsubscribe the JID from all pubsub topics. This is useful when the
- # JID's session ends by logout or disconnect.
- def unsubscribe_all_pubsub(domain, jid)
- @pubsub.unsubscribe_all(domain, jid)
- end
-
- # Return true if the pubsub topic exists and messages may be published to it.
- def pubsub_node?(domain, node)
- @pubsub.node?(domain, node)
- end
-
- # Return true if the JID is a registered subscriber to the pubsub topic and
- # messages published to it should be routed to the JID.
- def pubsub_subscribed?(domain, node, jid)
- @pubsub.subscribed?(domain, node, jid)
- end
-
- # Return a list of JIDs subscribed to the pubsub topic.
- def pubsub_subscribers(domain, node)
- @pubsub.subscribers(domain, node)
- end
-
- private
-
- # Call this method once per second to broadcast this node's heartbeat and
- # expire stale user sessions. This method must not raise exceptions or the
- # timer will stop.
- def heartbeat
- @publisher.broadcast(:heartbeat)
- @sessions.expire
- rescue => e
- log.error("Cluster session cleanup failed: #{e}")
- end
-
- # StreamProxy behaves like an EM::Connection so that stanzas may be sent to
- # remote nodes just as they are to locally connected streams. The rest of the
- # system doesn't know or care that these "streams" send their traffic over
- # redis pubsub channels.
- class StreamProxy
- attr_reader :user
-
- def initialize(cluster, session)
- @cluster, @user = cluster, UserProxy.new(cluster, session)
- @node, @available, @interested, @presence =
- session.values_at('node', 'available', 'interested', 'presence')
-
- unless @presence.nil? || @presence.empty?
- @presence = Nokogiri::XML(@presence).root rescue nil
- end
- end
-
- def available?
- @available
- end
-
- def interested?
- @interested
- end
-
- def last_broadcast_presence
- @presence
- end
-
- def write(stanza)
- @cluster.route(stanza, @node)
- end
- end
-
- # Proxy User#update_from calls to remote cluster nodes over redis
- # pubsub channels.
- class UserProxy < User
- def initialize(cluster, session)
- super(jid: session['jid'])
- @cluster, @node = cluster, session['node']
- end
-
- def update_from(user)
- @cluster.update_user(@jid.bare, @node)
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/connection.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/connection.rb
deleted file mode 100644
index 84d8dca..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/connection.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Cluster
- # Create and cache a redis database connection.
- class Connection
- attr_accessor :host, :port, :database, :password
-
- def initialize
- @redis, @host, @port, @database, @password = nil, nil, nil, nil, nil
- end
-
- # Return a shared redis connection.
- def connect
- @redis ||= create
- end
-
- # Return a new redis connection.
- def create
- conn = EM::Hiredis::Client.new(@host, @port, @password, @database)
- conn.connect
- conn
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/publisher.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/publisher.rb
deleted file mode 100644
index 83731ad..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/publisher.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Cluster
- # Broadcast messages to other cluster nodes via redis pubsub channels. All
- # members subscribe to a channel for heartbeats, online, and offline
- # messages from other nodes. This allows new nodes to be added to the
- # cluster dynamically, without configuring all other nodes.
- class Publisher
- include Vines::Log
-
- ALL, STANZA, USER = %w[cluster:nodes:all stanza user].map {|s| s.freeze }
-
- def initialize(cluster)
- @cluster = cluster
- end
-
- # Publish a :heartbeat, :online, or :offline message to the nodes:all
- # broadcast channel.
- def broadcast(type)
- redis.publish(ALL, {
- from: @cluster.id,
- type: type,
- time: Time.now.to_i
- }.to_json)
- end
-
- # Send the stanza to the node hosting the user's session. The stanza is
- # published to the channel to which the remote node is listening for
- # messages.
- def route(stanza, node)
- log.debug { "Sent cluster stanza: %s -> %s\n%s\n" % [@cluster.id, node, stanza] }
- redis.publish("cluster:nodes:#{node}", {
- from: @cluster.id,
- type: STANZA,
- stanza: stanza.to_s
- }.to_json)
- end
-
- # Notify the remote node that the user's roster has changed and it should
- # reload the user from storage.
- def update_user(jid, node)
- redis.publish("cluster:nodes:#{node}", {
- from: @cluster.id,
- type: USER,
- jid: jid.to_s
- }.to_json)
- end
-
- def redis
- @cluster.connection
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/pubsub.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/pubsub.rb
deleted file mode 100644
index 2e14679..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/pubsub.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Cluster
- # Manages the pubsub topic list and subscribers stored in redis. When a
- # message is published to a topic, the receiving cluster node broadcasts
- # the message to all subscribers at all other cluster nodes.
- class PubSub
- def initialize(cluster)
- @cluster = cluster
- end
-
- # Create a pubsub topic (a.k.a. node), in the given domain, to which
- # messages may be published. The domain argument will be one of the
- # configured pubsub subdomains in conf/config.rb (e.g. games.wonderland.lit,
- # topics.wonderland.lit, etc).
- def add_node(domain, node)
- redis.sadd("pubsub:#{domain}:nodes", node)
- end
-
- # Remove a pubsub topic so messages may no longer be broadcast to it.
- def delete_node(domain, node)
- redis.smembers("pubsub:#{domain}:subscribers_#{node}") do |subscribers|
- redis.multi
- subscribers.each do |jid|
- redis.srem("pubsub:#{domain}:subscriptions_#{jid}", node)
- end
- redis.del("pubsub:#{domain}:subscribers_#{node}")
- redis.srem("pubsub:#{domain}:nodes", node)
- redis.exec
- end
- end
-
- # Subscribe the JID to the pubsub topic so it will receive any messages
- # published to it.
- def subscribe(domain, node, jid)
- jid = JID.new(jid)
- redis.multi
- redis.sadd("pubsub:#{domain}:subscribers_#{node}", jid.to_s)
- redis.sadd("pubsub:#{domain}:subscriptions_#{jid}", node)
- redis.exec
- end
-
- # Unsubscribe the JID from the pubsub topic, deregistering its interest
- # in receiving any messages published to it.
- def unsubscribe(domain, node, jid)
- jid = JID.new(jid)
- redis.multi
- redis.srem("pubsub:#{domain}:subscribers_#{node}", jid.to_s)
- redis.srem("pubsub:#{domain}:subscriptions_#{jid}", node)
- redis.exec
- redis.scard("pubsub:#{domain}:subscribers_#{node}") do |count|
- delete_node(domain, node) if count == 0
- end
- end
-
- # Unsubscribe the JID from all pubsub topics. This is useful when the
- # JID's session ends by logout or disconnect.
- def unsubscribe_all(domain, jid)
- jid = JID.new(jid)
- redis.smembers("pubsub:#{domain}:subscriptions_#{jid}") do |nodes|
- nodes.each do |node|
- unsubscribe(domain, node, jid)
- end
- end
- end
-
- # Return true if the pubsub topic exists and messages may be published to it.
- def node?(domain, node)
- @cluster.query(:sismember, "pubsub:#{domain}:nodes", node) == 1
- end
-
- # Return true if the JID is a registered subscriber to the pubsub topic and
- # messages published to it should be routed to the JID.
- def subscribed?(domain, node, jid)
- jid = JID.new(jid)
- @cluster.query(:sismember, "pubsub:#{domain}:subscribers_#{node}", jid.to_s) == 1
- end
-
- # Return a list of JIDs subscribed to the pubsub topic.
- def subscribers(domain, node)
- @cluster.query(:smembers, "pubsub:#{domain}:subscribers_#{node}")
- end
-
- private
-
- def redis
- @cluster.connection
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/sessions.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/sessions.rb
deleted file mode 100644
index a343667..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/sessions.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Cluster
- # Manages the cluster node list and user session routing table stored in
- # redis. All cluster nodes share this in-memory database to quickly discover
- # the node hosting a particular user session. Once a session is located,
- # stanzas can be routed to that node via the +Publisher+.
- class Sessions
- include Vines::Log
-
- NODES = 'cluster:nodes'.freeze
-
- def initialize(cluster)
- @cluster, @nodes = cluster, {}
- end
-
- # Return the sessions for these JIDs. If a bare JID is used, all sessions
- # for that user will be returned. If a full JID is used, the session for
- # that single connected stream is returned.
- def find(*jids)
- jids.flatten.map do |jid|
- jid = JID.new(jid)
- jid.bare? ? user_sessions(jid) : user_session(jid)
- end.compact.flatten
- end
-
- # Persist the user's session to the shared redis cache so that other cluster
- # nodes can locate the node hosting this user's connection and route messages
- # to them.
- def save(jid, attrs)
- jid = JID.new(jid)
- session = {node: @cluster.id}.merge(attrs)
- redis.multi
- redis.hset("sessions:#{jid.bare}", jid.resource, session.to_json)
- redis.sadd("cluster:nodes:#{@cluster.id}", jid.to_s)
- redis.exec
- end
-
- # Remove this user from the cluster routing table so that no further stanzas
- # may be routed to them. This must be called when the user's session is
- # terminated, either by logout or stream disconnect.
- def delete(jid)
- jid = JID.new(jid)
- redis.hget("sessions:#{jid.bare}", jid.resource) do |response|
- if doc = JSON.parse(response) rescue nil
- redis.multi
- redis.hdel("sessions:#{jid.bare}", jid.resource)
- redis.srem("cluster:nodes:#{doc['node']}", jid.to_s)
- redis.exec
- end
- end
- end
-
- # Remove all user sessions from the routing table associated with the
- # given node ID. Cluster nodes call this themselves during normal shutdown.
- # However, if a node dies without being properly shutdown, the other nodes
- # will cleanup its sessions when they detect the node is offline.
- def delete_all(node)
- @nodes.delete(node)
- redis.smembers("cluster:nodes:#{node}") do |jids|
- redis.multi
- redis.del("cluster:nodes:#{node}")
- redis.hdel(NODES, node)
- jids.each do |jid|
- jid = JID.new(jid)
- redis.hdel("sessions:#{jid.bare}", jid.resource)
- end
- redis.exec
- end
- end
-
- # Cluster nodes broadcast a heartbeat to other members every second. If we
- # haven't heard from a node in five seconds, assume it's offline and cleanup
- # its session cache for it. Nodes may die abrubtly, without a chance to clear
- # their sessions, so other members cleanup for them.
- def expire
- redis.hset(NODES, @cluster.id, Time.now.to_i)
- redis.hgetall(NODES) do |response|
- now = Time.now
- expired = Hash[*response].select do |node, active|
- offset = @nodes[node] || 0
- (now - offset) - Time.at(active.to_i) > 5
- end.keys
- expired.each {|node| delete_all(node) }
- end
- end
-
- # Notify the session store that this node is still alive. The node
- # broadcasts its current time, so all cluster members' clocks don't
- # necessarily need to be in sync.
- def poke(node, time)
- offset = Time.now.to_i - time
- @nodes[node] = offset
- end
-
- private
-
- # Return all remote sessions for this user's bare JID.
- def user_sessions(jid)
- response = @cluster.query(:hgetall, "sessions:#{jid.bare}") || []
- Hash[*response].map do |resource, json|
- if session = JSON.parse(json) rescue nil
- session['jid'] = JID.new(jid.node, jid.domain, resource).to_s
- end
- session
- end.compact.reject {|session| session['node'] == @cluster.id }
- end
-
- # Return the remote session for this full JID or nil if not found.
- def user_session(jid)
- response = @cluster.query(:hget, "sessions:#{jid.bare}", jid.resource)
- return unless response
- session = JSON.parse(response) rescue nil
- return if session.nil? || session['node'] == @cluster.id
- session['jid'] = jid.to_s
- session
- end
-
- def redis
- @cluster.connection
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/subscriber.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/subscriber.rb
deleted file mode 100644
index 0d7845a..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/cluster/subscriber.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Cluster
- # Subscribes to the redis `nodes:all` broadcast channel to listen for
- # heartbeats from other cluster members. Also subscribes to a channel
- # exclusively for this particular node, listening for stanzas routed to us
- # from other nodes.
- class Subscriber
- include Vines::Log
-
- ALL, FROM, HEARTBEAT, OFFLINE, ONLINE, STANZA, TIME, TO, TYPE, USER =
- %w[cluster:nodes:all from heartbeat offline online stanza time to type user].map {|s| s.freeze }
-
- def initialize(cluster)
- @cluster = cluster
- @channel = "cluster:nodes:#{@cluster.id}"
- @messages = EM::Queue.new
- process_messages
- end
-
- # Create a new redis connection and subscribe to the nodes:all broadcast
- # channel as well as the channel for this cluster node. Redis connections
- # in subscribe mode cannot be used for other key/value operations.
- #
- # Returns nothing.
- def subscribe
- conn = @cluster.connect
- conn.subscribe(ALL)
- conn.subscribe(@channel)
- conn.on(:message) do |channel, message|
- @messages.push([channel, message])
- end
- end
-
- private
-
- # Recursively process incoming messages from the queue, guaranteeing they
- # are processed in the order they are received.
- #
- # Returns nothing.
- def process_messages
- @messages.pop do |channel, message|
- Fiber.new do
- on_message(channel, message)
- process_messages
- end.resume
- end
- end
-
- # Process messages as they arrive on the pubsub channels to which we're
- # subscribed.
- #
- # channel - The String channel name on which the message was received.
- # message - The JSON formatted message String.
- #
- # Returns nothing.
- def on_message(channel, message)
- doc = JSON.parse(message)
- case channel
- when ALL then to_all(doc)
- when @channel then to_node(doc)
- end
- rescue => e
- log.error("Cluster subscription message failed: #{e}")
- end
-
- # Process a message sent to the `nodes:all` broadcast channel. In the case
- # of node heartbeats, we update the last time we heard from this node so
- # we can cleanup its session if it goes offline.
- #
- # message - The parsed Hash of received message data.
- #
- # Returns nothing.
- def to_all(message)
- case message[TYPE]
- when ONLINE, HEARTBEAT
- @cluster.poke(message[FROM], message[TIME])
- when OFFLINE
- @cluster.delete_sessions(message[FROM])
- end
- end
-
- # Process a message published to this node's channel. Messages sent to
- # this channel are stanzas that need to be routed to connections attached
- # to this node.
- #
- # message - The parsed Hash of received message data.
- #
- # Returns nothing.
- def to_node(message)
- case message[TYPE]
- when STANZA then route_stanza(message)
- when USER then update_user(message)
- end
- end
-
- # Send the stanza, from a remote cluster node, to locally connected
- # streams for the destination user.
- #
- # message - The parsed Hash of received message data.
- #
- # Returns nothing.
- def route_stanza(message)
- node = Nokogiri::XML(message[STANZA]).root rescue nil
- return unless node
- log.debug { "Received cluster stanza: %s -> %s\n%s\n" % [message[FROM], @cluster.id, node] }
- if node[TO]
- @cluster.connected_resources(node[TO]).each do |recipient|
- recipient.write(node)
- end
- else
- log.warn("Cluster stanza missing address:\n#{node}")
- end
- end
-
- # Update the roster information, that's cached in locally connected
- # streams, for this user.
- #
- # message - The parsed Hash of received message data.
- #
- # Returns nothing.
- def update_user(message)
- jid = JID.new(message['jid']).bare
- if user = @cluster.storage(jid.domain).find_user(jid)
- @cluster.connected_resources(jid).each do |stream|
- stream.user.update_from(user)
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/cert.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/cert.rb
deleted file mode 100644
index 7bcbc16..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/cert.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- module Command
- class Cert
- def run(opts)
- raise 'vines cert <domain>' unless opts[:args].size == 1
- require opts[:config]
- create_cert(opts[:args].first, Config.instance.certs)
- end
-
- def create_cert(domain, dir)
- domain = domain.downcase
- key = OpenSSL::PKey::RSA.generate(2048)
- ca = OpenSSL::X509::Name.parse("/C=US/ST=Colorado/L=Denver/O=Vines XMPP Server/CN=#{domain}")
- cert = OpenSSL::X509::Certificate.new
- cert.version = 2
- cert.subject = ca
- cert.issuer = ca
- cert.serial = Time.now.to_i
- cert.public_key = key.public_key
- cert.not_before = Time.now - (24 * 60 * 60)
- cert.not_after = Time.now + (365 * 24 * 60 * 60)
-
- factory = OpenSSL::X509::ExtensionFactory.new
- factory.subject_certificate = cert
- factory.issuer_certificate = cert
- cert.extensions = [
- %w[basicConstraints CA:TRUE],
- %w[subjectKeyIdentifier hash],
- %w[subjectAltName] << [domain, hostname].map {|n| "DNS:#{n}" }.join(',')
- ].map {|k, v| factory.create_ext(k, v) }
-
- cert.sign(key, OpenSSL::Digest::SHA1.new)
-
- {'key' => key, 'crt' => cert}.each_pair do |ext, o|
- name = File.join(dir, "#{domain}.#{ext}")
- File.open(name, 'w:utf-8') {|f| f.write(o.to_pem) }
- File.chmod(0600, name) if ext == 'key'
- end
- end
-
- private
-
- def hostname
- Socket.gethostbyname(Socket.gethostname).first.downcase
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/restart.rb
deleted file mode 100644
index f7f2530..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/restart.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- module Command
- class Restart
- def run(opts)
- Stop.new.run(opts)
- Start.new.run(opts)
- end
- end
- end
-end
\ No newline at end of file
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/start.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/start.rb
deleted file mode 100644
index 6ab3615..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/start.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- module Command
- class Start
- def run(opts)
- raise 'vines [--pid FILE] start' unless opts[:args].size == 0
- require opts[:config]
- server = XmppServer.new(Config.instance)
- daemonize(opts) if opts[:daemonize]
- server.start
- end
-
- private
-
- def daemonize(opts)
- daemon = Daemon.new(:pid => opts[:pid], :stdout => opts[:log],
- :stderr => opts[:log])
- if daemon.running?
- raise "Vines is running as process #{daemon.pid}"
- else
- puts "Vines has started"
- daemon.start
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/stop.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/stop.rb
deleted file mode 100644
index 1474b4f..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/command/stop.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- module Command
- class Stop
- def run(opts)
- raise 'vines [--pid FILE] stop' unless opts[:args].size == 0
- daemon = Daemon.new(:pid => opts[:pid])
- if daemon.running?
- daemon.stop
- puts 'Vines has been shutdown'
- else
- puts 'Vines is not running'
- end
- end
- end
- end
-end
\ No newline at end of file
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config.rb
deleted file mode 100644
index a43c6b9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config.rb
+++ /dev/null
@@ -1,236 +0,0 @@
-# encoding: UTF-8
-
-module Vines
-
- # A Config object is passed to the stream handlers to give them access
- # to server configuration information like virtual host names, storage
- # systems, etc. This class provides the DSL methods used in the
- # conf/config.rb file.
- class Config
- LOG_LEVELS = %w[debug info warn error fatal].freeze
-
- attr_reader :router
-
- @@instance = nil
- def self.configure(&block)
- @@instance = self.new(&block)
- end
-
- def self.instance
- @@instance
- end
-
- def initialize(&block)
- @max_offline_msgs = 150
- @certs = File.expand_path('conf/certs')
- @vhosts, @ports, @cluster = {}, {}, nil
- @null = Storage::Null.new
- @router = Router.new(self)
- instance_eval(&block)
- raise "must define at least one virtual host" if @vhosts.empty?
- end
-
- def certs(dir=nil)
- dir ? @certs = File.expand_path(dir) : @certs
- end
-
- def max_offline_msgs(count=nil)
- count ? @max_offline_msgs = count : @max_offline_msgs
- end
-
- def host(*names, &block)
- names = names.flatten.map {|name| name.downcase }
- dupes = names.uniq.size != names.size || (@vhosts.keys & names).any?
- raise "one host definition per domain allowed" if dupes
- names.each do |name|
- @vhosts[name] = Host.new(self, name, &block)
- end
- end
-
- def diaspora_domain
- AppConfig.environment.url
- .gsub(/^http(s){0,1}:\/\/|\/$/, '')
- .to_s rescue "localhost"
- end
-
- %w[client server http component].each do |name|
- define_method(name) do |*args, &block|
- port = Vines::Config.const_get("#{name.capitalize}Port")
- raise "one #{name} port definition allowed" if @ports[name.to_sym]
- @ports[name.to_sym] = port.new(self, *args) do
- instance_eval(&block) if block
- end
- end
- end
-
- def cluster(&block)
- return @cluster unless block
- raise "one cluster definition allowed" if @cluster
- @cluster = Cluster.new(self, &block)
- end
-
- def log(file=nil, &block)
- unless file.nil?
- unless File.exists?(file)
- File.new(file, 'w') rescue raise "log directory doesn't exists"
- end
-
- if File.exists?(file)
- Vines::Log.set_log_file(file)
- end
- end
- instance_eval(&block) if block
- end
-
- def level(level)
- const = Logger.const_get(level.to_s.upcase) rescue nil
- unless LOG_LEVELS.include?(level.to_s) && const
- raise "log level must be one of: #{LOG_LEVELS.join(', ')}"
- end
- Class.new.extend(Vines::Log).log.level = const
- end
-
- def ports
- @ports.values
- end
-
- # Return true if the domain is virtual hosted by this server.
- def vhost?(domain)
- !!vhost(domain)
- end
-
- # Return the Host config object for this domain if it's hosted by this
- # server.
- def vhost(domain)
- @vhosts[domain.to_s]
- end
-
- # Returns the storage system for the domain or a Storage::Null instance if
- # the domain is not hosted at this server.
- def storage(domain)
- host = vhost(domain)
- host ? host.storage : @null
- end
-
- # Returns the PubSub system for the domain or nil if pubsub is not enabled
- # for this domain.
- def pubsub(domain)
- host = @vhosts.values.find {|host| host.pubsub?(domain) }
- host.pubsubs[domain.to_s] if host
- end
-
- # Return true if the domain is a pubsub service hosted at a virtual host
- # at this server.
- def pubsub?(domain)
- @vhosts.values.any? {|host| host.pubsub?(domain) }
- end
-
- # Return true if all JIDs belong to components hosted by this server.
- def component?(*jids)
- !jids.flatten.index do |jid|
- !component_password(JID.new(jid).domain)
- end
- end
-
- # Return the password for the component or nil if it's not hosted here.
- def component_password(domain)
- host = @vhosts.values.find {|host| host.component?(domain) }
- host.password(domain) if host
- end
-
- # Return true if all of the JIDs are hosted by this server.
- def local_jid?(*jids)
- !jids.flatten.index do |jid|
- !vhost?(JID.new(jid).domain)
- end
- end
-
- # Return true if private XML fragment storage is enabled for this domain.
- def private_storage?(domain)
- host = vhost(domain)
- host.private_storage? if host
- end
-
- # Returns true if server-to-server connections are allowed with the
- # given domain.
- def s2s?(domain)
- # Disabled whitelisting to allow anonymous hosts,
- # otherwise everyone has to add manually all hosts.
- # Using blacklist in case we have to block a malicious host.
- @ports[:server] && !@ports[:server].blacklist.include?(domain.to_s)
- end
-
- # Return true if the server is a member of a cluster, serving the same
- # domains from different machines.
- def cluster?
- !!@cluster
- end
-
- # Retrieve the Port subclass with this name:
- # [:client, :server, :http, :component]
- def [](name)
- @ports[name] or raise ArgumentError.new("no port named #{name}")
- end
-
- # Return true if the two JIDs are allowed to send messages to each other.
- # Both domains must have enabled cross_domain_messages in their config files.
- def allowed?(to, from)
- to, from = JID.new(to), JID.new(from)
- return false if to.empty? || from.empty?
- return true if to.domain == from.domain # same domain always allowed
- return cross_domain?(to, from) if local_jid?(to, from) # both virtual hosted here
- return check_subdomains(to, from) if subdomain?(to, from) # component/pubsub to component/pubsub
- return check_subdomain(to, from) if subdomain?(to) # to component/pubsub
- return check_subdomain(from, to) if subdomain?(from) # from component/pubsub
- return cross_domain?(to) if local_jid?(to) # from is remote
- return cross_domain?(from) if local_jid?(from) # to is remote
- return false
- end
-
- private
-
- # Return true if all of the JIDs are some kind of subdomain resource hosted
- # here (either a component or a pubsub domain).
- def subdomain?(*jids)
- !jids.flatten.index do |jid|
- !component?(jid) && !pubsub?(jid)
- end
- end
-
- # Return true if the third-level subdomain JIDs (components and pubsubs)
- # are allowed to communicate with each other. For example, a
- # tea.wonderland.lit component should be allowed to send messages to
- # pubsub.wonderland.lit because they share the second-level wonderland.lit
- # domain.
- def check_subdomains(to, from)
- sub1, sub2 = strip_domain(to), strip_domain(from)
- (sub1 == sub2) || cross_domain?(sub1, sub2)
- end
-
- # Return true if the third-level subdomain JID (component or pubsub) is
- # allowed to communicate with the other JID. For example,
- # pubsub.wonderland.lit should be allowed to send messages to
- # alice at wonderland.lit because they share the second-level wonderland.lit
- # domain.
- def check_subdomain(subdomain, jid)
- comp = strip_domain(subdomain)
- return true if comp.domain == jid.domain
- local_jid?(jid) ? cross_domain?(comp, jid) : cross_domain?(comp)
- end
-
- # Return the third-level JID's domain with the first subdomain stripped off
- # to create a second-level domain. For example, alice at tea.wonderland.lit
- # returns wonderland.lit.
- def strip_domain(jid)
- domain = jid.domain.split('.').drop(1).join('.')
- JID.new(domain)
- end
-
- # Return true if all JIDs are allowed to exchange cross domain messages.
- def cross_domain?(*jids)
- !jids.flatten.index do |jid|
- !vhost(jid.domain).cross_domain_messages?
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/diaspora.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/diaspora.rb
deleted file mode 100644
index 24d7907..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/diaspora.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# ############################################################## #
-# Do NOT touch this file you'll find the options in diaspora.yml #
-# ############################################################## #
-
-Vines::Config.configure do
- log AppConfig.chat.server.log.file.to_s do
- level AppConfig.chat.server.log.level.to_sym
- end
-
- certs AppConfig.chat.server.certs.to_s
-
- max_offline_msgs AppConfig.chat.server.max_offline_msgs.to_i
-
- host diaspora_domain do
- cross_domain_messages AppConfig.chat.server.cross_domain_messages
- accept_self_signed AppConfig.chat.server.accept_self_signed
- storage 'sql'
- end
-
- client AppConfig.chat.server.c2s.address.to_s, AppConfig.chat.server.c2s.port.to_i do
- max_stanza_size AppConfig.chat.server.c2s.max_stanza_size.to_i
- max_resources_per_account AppConfig.chat.server.c2s.max_resources_per_account.to_i
- end
-
- server AppConfig.chat.server.s2s.address.to_s, AppConfig.chat.server.s2s.port.to_i do
- max_stanza_size AppConfig.chat.server.s2s.max_stanza_size.to_i
- blacklist AppConfig.chat.server.s2s.blacklist.get
- end
-
- http AppConfig.chat.server.bosh.address.to_s, AppConfig.chat.server.bosh.port.to_i do
- bind AppConfig.chat.server.bosh.bind.to_s
- max_stanza_size AppConfig.chat.server.bosh.max_stanza_size.to_i
- max_resources_per_account AppConfig.chat.server.bosh.max_resources_per_account.to_i
- root 'public'
- vroute ''
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/host.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/host.rb
deleted file mode 100644
index 92ad26e..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/host.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Config
-
- # Provides the DSL methods for the virtual host definitions in the
- # conf/config.rb file. Host instances can be accessed at runtime through
- # the +Config#vhosts+ method.
- class Host
- attr_reader :pubsubs
-
- def initialize(config, name, &block)
- @config, @name = config, name.downcase
- @storage = nil
- @cross_domain_messages = false
- @private_storage = false
- @accept_self_signed = false
- @force_s2s_encryption = false
- @components, @pubsubs = {}, {}
- validate_domain(@name)
- instance_eval(&block)
- raise "storage required for #{@name}" unless @storage
- end
-
- def storage(name=nil, &block)
- if name
- raise "one storage mechanism per host allowed" if @storage
- @storage = Storage.from_name(name, &block)
- else
- @storage
- end
- end
-
- def force_s2s_encryption(enabled)
- @force_s2s_encryption = !!enabled
- end
-
- def force_s2s_encryption?
- @force_s2s_encryption
- end
-
- def accept_self_signed(enabled)
- @accept_self_signed = !!enabled
- end
-
- def accept_self_signed?
- @accept_self_signed
- end
-
- def cross_domain_messages(enabled)
- @cross_domain_messages = !!enabled
- end
-
- def cross_domain_messages?
- @cross_domain_messages
- end
-
- def components(options=nil)
- return @components unless options
-
- names = options.keys.map {|domain| "#{domain}.#{@name}".downcase }
- raise "duplicate component domains not allowed" if dupes?(names, @components.keys)
- raise "pubsub domains overlap component domains" if dupes?(names, @pubsubs.keys)
-
- options.each do |domain, password|
- raise 'component domain required' if (domain || '').to_s.strip.empty?
- raise 'component password required' if (password || '').strip.empty?
- name = "#{domain}.#{@name}".downcase
- raise "components must be one level below their host: #{name}" if domain.to_s.include?('.')
- validate_domain(name)
- @components[name] = password
- end
- end
-
- def component?(domain)
- !!@components[domain.to_s]
- end
-
- def password(domain)
- @components[domain.to_s]
- end
-
- def pubsub(*domains)
- domains.flatten!
- raise 'define at least one pubsub domain' if domains.empty?
- names = domains.map {|domain| "#{domain}.#{@name}".downcase }
- raise "duplicate pubsub domains not allowed" if dupes?(names, @pubsubs.keys)
- raise "pubsub domains overlap component domains" if dupes?(names, @components.keys)
- domains.each do |domain|
- raise 'pubsub domain required' if (domain || '').to_s.strip.empty?
- name = "#{domain}.#{@name}".downcase
- raise "pubsub domains must be one level below their host: #{name}" if domain.to_s.include?('.')
- validate_domain(name)
- @pubsubs[name] = PubSub.new(@config, name)
- end
- end
-
- def pubsub?(domain)
- @pubsubs.key?(domain.to_s)
- end
-
- # Unsubscribe this JID from all pubsub topics hosted at this virtual host.
- # This should be called when the user's session ends via logout or
- # disconnect.
- def unsubscribe_pubsub(jid)
- @pubsubs.values.each do |pubsub|
- pubsub.unsubscribe_all(jid)
- end
- end
-
- def disco_items
- [@components.keys, @pubsubs.keys].flatten.sort
- end
-
- def private_storage(enabled)
- @private_storage = !!enabled
- end
-
- def private_storage?
- @private_storage
- end
-
- private
-
- # Return true if the arrays contain any duplicate items.
- def dupes?(a, b)
- a.uniq.size != a.size || b.uniq.size != b.size || (a & b).any?
- end
-
- # Prevent domains in config files that won't form valid JIDs.
- def validate_domain(name)
- jid = JID.new(name)
- raise "incorrect domain: #{name}" if jid.node || jid.resource
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/port.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/port.rb
deleted file mode 100644
index 40f7fad..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/port.rb
+++ /dev/null
@@ -1,132 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Config
- class Port
- include Vines::Log
-
- attr_reader :config, :stream
-
- %w[host port].each do |name|
- define_method(name) do
- @settings[name.to_sym]
- end
- end
-
- def initialize(config, host, port, &block)
- @config, @settings = config, {}
- instance_eval(&block) if block
- defaults = {:host => host, :port => port,
- :max_resources_per_account => 5, :max_stanza_size => 128 * 1024}
- @settings = defaults.merge(@settings)
- end
-
- def max_stanza_size(max=nil)
- if max
- # rfc 6120 section 13.12
- @settings[:max_stanza_size] = [10000, max].max
- else
- @settings[:max_stanza_size]
- end
- end
-
- def start
- type = stream.name.split('::').last.downcase
- log.info("Accepting #{type} connections on #{host}:#{port}")
- EventMachine::start_server(host, port, stream, config)
- end
- end
-
- class ClientPort < Port
- def initialize(config, host='0.0.0.0', port=5222, &block)
- @stream = Vines::Stream::Client
- super(config, host, port, &block)
- end
-
- def max_resources_per_account(max=nil)
- if max
- @settings[:max_resources_per_account] = max
- else
- @settings[:max_resources_per_account]
- end
- end
-
- def start
- super
- config.cluster.start if config.cluster?
- end
- end
-
- class ServerPort < Port
- def initialize(config, host='0.0.0.0', port=5269, &block)
- @blacklist, @stream = [], Vines::Stream::Server
- super(config, host, port, &block)
- end
-
- def blacklist(*blacklist)
- if blacklist.any?
- @blacklist << blacklist
- @blacklist.flatten!
- else
- @blacklist
- end
- end
- end
-
- class HttpPort < Port
- def initialize(config, host='0.0.0.0', port=5280, &block)
- @stream = Vines::Stream::Http
- super(config, host, port, &block)
- defaults = {:root => File.expand_path('web'), :bind => '/xmpp'}
- @settings = defaults.merge(@settings)
- end
-
- def max_resources_per_account(max=nil)
- if max
- @settings[:max_resources_per_account] = max
- else
- @settings[:max_resources_per_account]
- end
- end
-
- def root(dir=nil)
- if dir
- @settings[:root] = File.expand_path(dir)
- else
- @settings[:root]
- end
- end
-
- def bind(url=nil)
- if url
- @settings[:bind] = url
- else
- @settings[:bind]
- end
- end
-
- def vroute(id=nil)
- if id
- id = id.to_s.strip
- @settings[:vroute] = id.empty? ? nil : id
- else
- @settings[:vroute]
- end
- end
-
- def start
- super
- if config.cluster? && vroute.nil?
- log.warn("vroute sticky session cookie not set")
- end
- end
- end
-
- class ComponentPort < Port
- def initialize(config, host='0.0.0.0', port=5347, &block)
- @stream = Vines::Stream::Component
- super(config, host, port, &block)
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/pubsub.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/pubsub.rb
deleted file mode 100644
index 2423629..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/config/pubsub.rb
+++ /dev/null
@@ -1,108 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Config
- # Provides the configuration DSL to conf/config.rb for pubsub subdomains and
- # exposes the storage and notification systems that the pubsub stanzas need
- # to process. This class hides the complexity of determining pubsub behavior
- # in a standalone vs. clustered chat server environment from the stanzas.
- class PubSub
- def initialize(config, name)
- @config, @name = config, name
- @nodes = {}
- end
-
- def add_node(id)
- if @config.cluster?
- @config.cluster.add_pubsub_node(@name, id)
- else
- @nodes[id] ||= Set.new
- end
- end
-
- def delete_node(id)
- if @config.cluster?
- @config.cluster.delete_pubsub_node(@name, id)
- else
- @nodes.delete(id)
- end
- end
-
- def subscribe(node, jid)
- return unless node?(node) && @config.allowed?(jid, @name)
- if @config.cluster?
- @config.cluster.subscribe_pubsub(@name, node, jid)
- else
- @nodes[node] << JID.new(jid)
- end
- end
-
- def unsubscribe(node, jid)
- return unless node?(node)
- if @config.cluster?
- @config.cluster.unsubscribe_pubsub(@name, node, jid)
- else
- @nodes[node].delete(JID.new(jid))
- delete_node(node) if subscribers(node).empty?
- end
- end
-
- def unsubscribe_all(jid)
- if @config.cluster?
- @config.cluster.unsubscribe_all_pubsub(@name, jid)
- else
- @nodes.keys.each do |node|
- unsubscribe(node, jid)
- end
- end
- end
-
- def node?(node)
- if @config.cluster?
- @config.cluster.pubsub_node?(@name, node)
- else
- @nodes.key?(node)
- end
- end
-
- def subscribed?(node, jid)
- return false unless node?(node)
- if @config.cluster?
- @config.cluster.pubsub_subscribed?(@name, node, jid)
- else
- @nodes[node].include?(JID.new(jid))
- end
- end
-
- def publish(node, stanza)
- stanza['id'] = Kit.uuid
- stanza['from'] = @name
-
- local, remote = subscribers(node).partition {|jid| @config.local_jid?(jid) }
-
- local.flat_map do |jid|
- @config.router.connected_resources(jid, @name)
- end.each do |recipient|
- stanza['to'] = recipient.user.jid.to_s
- recipient.write(stanza)
- end
-
- remote.each do |jid|
- el = stanza.clone
- el['to'] = jid.to_s
- @config.router.route(el) rescue nil # ignore RemoteServerNotFound
- end
- end
-
- private
-
- def subscribers(node)
- if @config.cluster?
- @config.cluster.pubsub_subscribers(@name, node)
- else
- @nodes[node] || []
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/contact.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/contact.rb
deleted file mode 100644
index 4701da9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/contact.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Contact
- include Comparable
-
- attr_accessor :name, :subscription, :ask, :groups, :from_diaspora
- attr_reader :jid
-
- def initialize(args={})
- @jid = JID.new(args[:jid]).bare
- raise ArgumentError, 'invalid jid' if @jid.empty?
- @name = args[:name]
- @subscription = args[:subscription] || 'none'
- @from_diaspora = args[:from_diaspora] || false
- @ask = args[:ask]
- @groups = args[:groups] || []
- end
-
- def <=>(contact)
- contact.is_a?(Contact) ? self.jid.to_s <=> contact.jid.to_s : nil
- end
-
- alias :eql? :==
-
- def hash
- jid.to_s.hash
- end
-
- def update_from(contact)
- @name = contact.name
- @subscription = contact.subscription
- @from_diaspora = contact.from_diaspora
- @ask = contact.ask
- @groups = contact.groups.clone
- end
-
- # Returns true if this contact is in a state that allows the user
- # to subscribe to their presence updates.
- def can_subscribe?
- @ask == 'subscribe' && %w[none from].include?(@subscription)
- end
-
- def subscribe_to
- @subscription = (@subscription == 'none') ? 'to' : 'both'
- @ask = nil
- end
-
- def unsubscribe_to
- @subscription = (@subscription == 'both') ? 'from' : 'none'
- end
-
- def subscribe_from
- @subscription = (@subscription == 'none') ? 'from' : 'both'
- @ask = nil
- end
-
- def unsubscribe_from
- @subscription = (@subscription == 'both') ? 'to' : 'none'
- end
-
- # Returns true if the user is subscribed to this contact's
- # presence updates.
- def subscribed_to?
- %w[to both].include?(@subscription)
- end
-
- # Returns true if the user has a presence subscription from
- # this contact. The contact is subscribed to this user's presence.
- def subscribed_from?
- %w[from both].include?(@subscription)
- end
-
- # Returns a hash of this contact's attributes suitable for persisting in
- # a document store.
- def to_h
- {
- 'name' => @name,
- 'subscription' => @subscription,
- 'from_diaspora' => @from_diaspora,
- 'ask' => @ask,
- 'groups' => @groups.sort!
- }
- end
-
- # Write an iq stanza to the recipient stream representing this contact's
- # current roster item state.
- def send_roster_push(recipient)
- doc = Nokogiri::XML::Document.new
- node = doc.create_element('iq',
- 'id' => Kit.uuid,
- 'to' => recipient.user.jid.to_s,
- 'type' => 'set')
- node << doc.create_element('query', 'xmlns' => NAMESPACES[:roster]) do |query|
- query << to_roster_xml
- end
- recipient.write(node)
- end
-
- # Returns this contact as an xmpp <item> element.
- def to_roster_xml
- doc = Nokogiri::XML::Document.new
- doc.create_element('item') do |el|
- el['ask'] = @ask unless @ask.nil? || @ask.empty?
- el['jid'] = @jid.bare.to_s
- el['name'] = @name unless @name.nil? || @name.empty?
- el['subscription'] = @subscription
- el['from_diaspora'] = @from_diaspora
- @groups.sort!.each do |group|
- el << doc.create_element('group', group)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/daemon.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/daemon.rb
deleted file mode 100644
index a666b38..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/daemon.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-# encoding: UTF-8
-
-module Vines
-
- # Fork the current process into the background and manage pid
- # files so we can kill the process later.
- class Daemon
-
- # Configure a new daemon process. Arguments hash can include the following
- # keys: :pid (pid file name, required),
- # :stdin, :stdout, :stderr (default to /dev/null)
- def initialize(args)
- @pid = args[:pid]
- raise ArgumentError.new('pid file is required') unless @pid
- raise ArgumentError.new('pid must be a file name') if File.directory?(@pid)
- raise ArgumentError.new('pid file must be writable') unless File.writable?(File.dirname(@pid))
- @stdin, @stdout, @stderr = [:stdin, :stdout, :stderr].map {|k| args[k] || '/dev/null' }
- end
-
- # Fork the current process into the background to start the
- # daemon. Do nothing if the daemon is already running.
- def start
- daemonize unless running?
- end
-
- # Use the pid stored in the pid file created from a previous
- # call to start to send a TERM signal to the process. Do nothing
- # if the daemon is not running.
- def stop
- 10.times do
- break unless running?
- Process.kill('TERM', pid)
- sleep(0.1)
- end
- end
-
- # Returns true if the process is running as determined by the numeric
- # pid stored in the pid file created by a previous call to start.
- def running?
- begin
- pid && Process.kill(0, pid)
- rescue Errno::ESRCH
- delete_pid
- false
- rescue Errno::EPERM
- true
- end
- end
-
- # Returns the numeric process ID from the pid file.
- # If the pid file does not exist, returns nil.
- def pid
- File.read(@pid).to_i if File.exists?(@pid)
- end
-
- private
-
- def delete_pid
- File.delete(@pid) if File.exists?(@pid)
- end
-
- # Fork process into background twice to release it from
- # the controlling tty. Point open file descriptors shared
- # with the parent process to separate destinations (e.g. /dev/null).
- def daemonize
- exit if fork
- Process.setsid
- exit if fork
- Dir.chdir('/')
- $stdin.reopen(@stdin)
- $stdout.reopen(@stdout, 'a').sync = true
- $stderr.reopen(@stderr, 'a').sync = true
- File.open(@pid, 'w') {|f| f.write(Process.pid) }
- at_exit { delete_pid }
- trap('TERM') { exit }
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/error.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/error.rb
deleted file mode 100644
index 2098ed0..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/error.rb
+++ /dev/null
@@ -1,150 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class XmppError < StandardError
- include Nokogiri::XML
-
- # Returns the XML element name based on the exception class name.
- # For example, Vines::BadFormat becomes bad-format.
- def element_name
- name = self.class.name.split('::').last
- name.gsub(/([A-Z])/, '-\1').downcase[1..-1]
- end
- end
-
- class SaslError < XmppError
- NAMESPACE = 'urn:ietf:params:xml:ns:xmpp-sasl'.freeze
-
- def initialize(text=nil)
- @text = text
- end
-
- def to_xml
- doc = Document.new
- doc.create_element('failure') do |node|
- node.add_namespace(nil, NAMESPACE)
- node << doc.create_element(element_name)
- if @text
- node << doc.create_element('text') do |text|
- text['xml:lang'] = 'en'
- text.content = @text
- end
- end
- end.to_xml(:indent => 0).gsub(/\n/, '')
- end
- end
-
- class StreamError < XmppError
- NAMESPACE = 'urn:ietf:params:xml:ns:xmpp-streams'.freeze
-
- def initialize(text=nil)
- @text = text
- end
-
- def to_xml
- doc = Document.new
- doc.create_element('stream:error') do |el|
- el << doc.create_element(element_name, 'xmlns' => NAMESPACE)
- if @text
- el << doc.create_element('text', @text, 'xmlns' => NAMESPACE, 'xml:lang' => 'en')
- end
- end.to_xml(:indent => 0).gsub(/\n/, '')
- end
- end
-
- class StanzaError < XmppError
- TYPES = %w[auth cancel continue modify wait].freeze
- KINDS = %w[message presence iq].freeze
- NAMESPACE = 'urn:ietf:params:xml:ns:xmpp-stanzas'.freeze
-
- def initialize(el, type, text=nil)
- raise "type must be one of: %s" % TYPES.join(', ') unless TYPES.include?(type)
- raise "stanza must be one of: %s" % KINDS.join(', ') unless KINDS.include?(el.name)
- @stanza_kind, @type, @text = el.name, type, text
- @id, @from, @to = %w[id from to].map {|a| el[a] }
- end
-
- def to_xml
- doc = Document.new
- doc.create_element(@stanza_kind) do |el|
- el['from'] = @to if @to
- el['id'] = @id if @id
- el['to'] = @from if @from
- el['type'] = 'error'
- el << doc.create_element('error', 'type' => @type) do |error|
- error << doc.create_element(element_name, 'xmlns' => NAMESPACE)
- if @text
- error << doc.create_element('text', @text, 'xmlns' => NAMESPACE, 'xml:lang' => 'en')
- end
- end
- end.to_xml(:indent => 0).gsub(/\n/, '')
- end
- end
-
- module SaslErrors
- class Aborted < SaslError; end
- class AccountDisabled < SaslError; end
- class CredentialsExpired < SaslError; end
- class EncryptionRequired < SaslError; end
- class IncorrectEncoding < SaslError; end
- class InvalidAuthzid < SaslError; end
- class InvalidMechanism < SaslError; end
- class MalformedRequest < SaslError; end
- class MechanismTooWeak < SaslError; end
- class NotAuthorized < SaslError; end
- class TemporaryAuthFailure < SaslError; end
- end
-
- module StreamErrors
- class BadFormat < StreamError; end
- class BadNamespacePrefix < StreamError; end
- class Conflict < StreamError; end
- class ConnectionTimeout < StreamError; end
- class HostGone < StreamError; end
- class HostUnknown < StreamError; end
- class ImproperAddressing < StreamError; end
- class InternalServerError < StreamError; end
- class InvalidFrom < StreamError; end
- class InvalidNamespace < StreamError; end
- class InvalidXml < StreamError; end
- class NotAuthorized < StreamError; end
- class NotWellFormed < StreamError; end
- class PolicyViolation < StreamError; end
- class RemoteConnectionFailed < StreamError; end
- class Reset < StreamError; end
- class ResourceConstraint < StreamError; end
- class RestrictedXml < StreamError; end
- class SeeOtherHost < StreamError; end
- class SystemShutdown < StreamError; end
- class UndefinedCondition < StreamError; end
- class UnsupportedEncoding < StreamError; end
- class UnsupportedFeature < StreamError; end
- class UnsupportedStanzaType < StreamError; end
- class UnsupportedVersion < StreamError; end
- end
-
- module StanzaErrors
- class BadRequest < StanzaError; end
- class Conflict < StanzaError; end
- class FeatureNotImplemented < StanzaError; end
- class Forbidden < StanzaError; end
- class Gone < StanzaError; end
- class InternalServerError < StanzaError; end
- class ItemNotFound < StanzaError; end
- class JidMalformed < StanzaError; end
- class NotAcceptable < StanzaError; end
- class NotAllowed < StanzaError; end
- class NotAuthorized < StanzaError; end
- class PolicyViolation < StanzaError; end
- class RecipientUnavailable < StanzaError; end
- class Redirect < StanzaError; end
- class RegistrationRequired < StanzaError; end
- class RemoteServerNotFound < StanzaError; end
- class RemoteServerTimeout < StanzaError; end
- class ResourceConstraint < StanzaError; end
- class ServiceUnavailable < StanzaError; end
- class SubscriptionRequired < StanzaError; end
- class UndefinedCondition < StanzaError; end
- class UnexpectedRequest < StanzaError; end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/jid.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/jid.rb
deleted file mode 100644
index b84c00c..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/jid.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class JID
- include Comparable
-
- PATTERN = /\A(?:([^@]*)@)??([^@\/]*)(?:\/(.*?))?\Z/.freeze
-
- # http://tools.ietf.org/html/rfc6122#appendix-A
- NODE_PREP = /[[:cntrl:] "&'\/:<>@]/.freeze
-
- # http://tools.ietf.org/html/rfc3454#appendix-C
- NAME_PREP = /[[:cntrl:] ]/.freeze
-
- # http://tools.ietf.org/html/rfc6122#appendix-B
- RESOURCE_PREP = /[[:cntrl:]]/.freeze
-
- attr_reader :node, :domain, :resource
- attr_writer :resource
-
- def self.new(node, domain=nil, resource=nil)
- node.is_a?(JID) ? node : super
- end
-
- def initialize(node, domain=nil, resource=nil)
- @node, @domain, @resource = node, domain, resource
-
- if @domain.nil? && @resource.nil?
- @node, @domain, @resource = @node.to_s.scan(PATTERN).first
- end
- [@node, @domain].each {|part| part.downcase! if part }
-
- validate
- end
-
- # Strip the resource part from this JID and return it as a new
- # JID object. The new JID contains only the optional node part
- # and the required domain part from the original. This JID remains
- # unchanged.
- def bare
- JID.new(@node, @domain)
- end
-
- # Return true if this is a bare JID without a resource part.
- def bare?
- @resource.nil?
- end
-
- # Return true if this is a domain-only JID without a node or resource part.
- def domain?
- !empty? && to_s == @domain
- end
-
- # Return true if this JID is equal to the empty string ''. That is, it's
- # missing the node, domain, and resource parts that form a valid JID. It
- # makes for easier error handling to be able to create JID objects from
- # strings and then check if they're empty rather than nil.
- def empty?
- to_s == ''
- end
-
- def <=>(jid)
- self.to_s <=> jid.to_s
- end
-
- def eql?(jid)
- jid.is_a?(JID) && self == jid
- end
-
- def hash
- self.to_s.hash
- end
-
- def to_s
- s = @domain
- s = "#{@node}@#{s}" if @node
- s = "#{s}/#{@resource}" if @resource
- s
- end
-
- private
-
- def validate
- [@node, @domain, @resource].each do |part|
- raise ArgumentError, 'jid too long' if (part || '').size > 1023
- end
- raise ArgumentError, 'empty node' if @node && @node.strip.empty?
- raise ArgumentError, 'node contains invalid characters' if @node && @node =~ NODE_PREP
- raise ArgumentError, 'empty resource' if @resource && @resource.strip.empty?
- raise ArgumentError, 'resource contains invalid characters' if @resource && @resource =~ RESOURCE_PREP
- raise ArgumentError, 'empty domain' if @domain == '' && (@node || @resource)
- raise ArgumentError, 'domain contains invalid characters' if @domain && @domain =~ NAME_PREP
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/kit.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/kit.rb
deleted file mode 100644
index 33b71c4..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/kit.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- # A module for utility methods with no better home.
- module Kit
- # Create a hex-encoded, SHA-512 HMAC of the data, using the secret key.
- def self.hmac(key, data)
- digest = OpenSSL::Digest.new("sha512")
- OpenSSL::HMAC.hexdigest(digest, key, data)
- end
-
- # Generates a random uuid per rfc 4122 that's useful for including in
- # stream, iq, and other xmpp stanzas.
- def self.uuid
- SecureRandom.uuid
- end
-
- # Generates a random 128 character authentication token.
- def self.auth_token
- SecureRandom.hex(64)
- end
-
- # Generate a HMAC for dialback as recommended in XEP-0185
- def self.dialback_key(key, receiving, originating, id)
- digest = OpenSSL::Digest.new('sha256')
- data = "#{receiving} #{originating} #{id}"
- OpenSSL::HMAC.hexdigest(digest, digest.hexdigest(key), data)
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/log.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/log.rb
deleted file mode 100644
index 8041c29..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/log.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- module Log
- @@logger = nil
- def log
- unless @@logger
- @@logger = Logger.new(STDOUT)
- @@logger.level = Logger::INFO
- @@logger.progname = 'vines'
- @@logger.formatter = Class.new(Logger::Formatter) do
- def initialize
- @time = "%Y-%m-%dT%H:%M:%SZ".freeze
- @fmt = "[%s] %5s -- %s: %s\n".freeze
- end
- def call(severity, time, program, msg)
- @fmt % [time.utc.strftime(@time), severity, program, msg2str(msg)]
- end
- end.new
- end
- @@logger
- end
-
- def self.set_log_file(file)
- @@logger = Logger.new(file)
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/node.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/node.rb
deleted file mode 100644
index 2cc4f3d..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/node.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-module Vines
- # Utility functions to work with nodes
- module Node
-
- STREAM = 'stream'.freeze
- BODY = 'body'.freeze
-
- module_function
-
- # Check if node starts a new stream
- def stream?(node)
- node.name == STREAM && namespace(node) == NAMESPACES[:stream]
- end
-
- # Check if BOSH body
- def body?(node)
- node.name == BODY && namespace(node) == NAMESPACES[:http_bind]
- end
-
- # Get the namespace
- def namespace(node)
- namespace = node.namespace
- namespace && namespace.href
- end
-
- # Convert to stanza
- def to_stanza(node, stream)
- Stanza.from_node(node, stream)
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/router.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/router.rb
deleted file mode 100644
index b8ab653..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/router.rb
+++ /dev/null
@@ -1,184 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- # The router tracks all stream connections to the server for all clients,
- # servers, and components. It sends stanzas to the correct stream based on
- # the 'to' attribute. Router is a singleton, shared by all streams, that must
- # be accessed with +Config#router+.
- class Router
- EMPTY = [].freeze
-
- STREAM_TYPES = [:client, :server, :component].freeze
-
- def initialize(config)
- @config = config
- @clients, @servers, @components = {}, [], []
- @pending = Hash.new {|h,k| h[k] = [] }
- end
-
- # Returns streams for all connected resources for this JID. A resource is
- # considered connected after it has completed authentication and resource
- # binding.
- def connected_resources(jid, from, proxies=true)
- jid, from = JID.new(jid), JID.new(from)
- return [] unless @config.allowed?(jid, from)
-
- local = @clients[jid.bare] || EMPTY
- local = local.select {|stream| stream.user.jid == jid } unless jid.bare?
- remote = proxies ? proxies(jid) : EMPTY
- [local, remote].flatten
- end
-
- # Returns streams for all available resources for this JID. A resource is
- # marked available after it sends initial presence.
- def available_resources(*jids, from)
- clients(jids, from) do |stream|
- stream.available?
- end
- end
-
- # Returns streams for all interested resources for this JID. A resource is
- # marked interested after it requests the roster.
- def interested_resources(*jids, from)
- clients(jids, from) do |stream|
- stream.interested?
- end
- end
-
- # Add the connection to the routing table. The connection must return
- # :client, :server, or :component from its +stream_type+ method so the
- # router can properly route stanzas to the stream.
- def <<(stream)
- case stream_type(stream)
- when :client then
- return unless stream.connected?
- jid = stream.user.jid.bare
- @clients[jid] ||= []
- @clients[jid] << stream
- when :server then @servers << stream
- when :component then @components << stream
- end
- end
-
- # Remove the connection from the routing table.
- def delete(stream)
- case stream_type(stream)
- when :client then
- return unless stream.connected?
- jid = stream.user.jid.bare
- streams = @clients[jid] || []
- streams.delete(stream)
- @clients.delete(jid) if streams.empty?
- when :server then @servers.delete(stream)
- when :component then @components.delete(stream)
- end
- end
-
- # Send the stanza to the appropriate remote server-to-server stream
- # or an external component stream.
- def route(stanza)
- to, from = %w[to from].map {|attr| JID.new(stanza[attr]) }
- return unless @config.allowed?(to, from)
- key = [to.domain, from.domain]
-
- if stream = connection_to(to, from)
- stream.write(stanza)
- elsif @pending.key?(key)
- @pending[key] << stanza
- elsif @config.s2s?(to.domain)
- @pending[key] << stanza
- Vines::Stream::Server.start(@config, to.domain, from.domain) do |stream|
- stream ? send_pending(key, stream) : return_pending(key)
- @pending.delete(key)
- end
- else
- raise StanzaErrors::RemoteServerNotFound.new(stanza, 'cancel')
- end
- end
-
- # Return stream by id
- def stream_by_id(id)
- (@servers+ at clients.values.flatten+@components).find {|stream| stream.id == id }
- end
-
- # Returns the total number of streams connected to the server.
- def size
- clients = @clients.values.inject(0) {|sum, arr| sum + arr.size }
- clients + @servers.size + @components.size
- end
-
- private
-
- # Write all pending stanzas for this domain to the stream. Called after a
- # s2s stream has successfully connected and we need to dequeue all stanzas
- # we received while waiting for the connection to finish.
- def send_pending(key, stream)
- @pending[key].each do |stanza|
- stream.write(stanza)
- end
- end
-
- # Return all pending stanzas to their senders as remote-server-not-found
- # errors. Called after a s2s stream has failed to connect.
- def return_pending(key)
- @pending[key].each do |stanza|
- to, from = JID.new(stanza['to']), JID.new(stanza['from'])
- xml = StanzaErrors::RemoteServerNotFound.new(stanza, 'cancel').to_xml
- if @config.component?(from)
- connection_to(from, to).write(xml) rescue nil
- else
- connected_resources(from, to).each {|c| c.write(xml) }
- end
- end
- end
-
- # Return the client streams to which the from address is allowed to
- # contact. Apply the filter block to each stream to narrow the results
- # before returning the streams.
- def clients(jids, from, &filter)
- jids = filter_allowed(jids, from)
- local = @clients.values_at(*jids).compact.flatten.select(&filter)
- proxies = proxies(*jids).select(&filter)
- [local, proxies].flatten
- end
-
- # Return the bare JIDs from the list that are allowed to talk to
- # the +from+ JID.
- def filter_allowed(jids, from)
- from = JID.new(from)
- jids.flatten.map {|jid| JID.new(jid).bare }
- .select {|jid| @config.allowed?(jid, from) }
- end
-
- def proxies(*jids)
- return EMPTY unless @config.cluster?
- @config.cluster.remote_sessions(*jids)
- end
-
- def connection_to(to, from)
- component_stream(to) || server_stream(to, from)
- end
-
- def component_stream(to)
- @components.select do |stream|
- stream.ready? && stream.remote_domain == to.domain
- end.sample
- end
-
- def server_stream(to, from)
- @servers.select do |stream|
- stream.ready? &&
- stream.remote_domain == to.domain &&
- stream.domain == from.domain
- end.sample
- end
-
- def stream_type(connection)
- connection.stream_type.tap do |type|
- unless STREAM_TYPES.include?(type)
- raise ArgumentError, "unexpected stream type: #{type}"
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza.rb
deleted file mode 100644
index bc426b8..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- include Nokogiri::XML
-
- attr_reader :stream
-
- EMPTY = ''.freeze
- FROM, MESSAGE, TO = %w[from message to].map {|s| s.freeze }
- ROUTABLE_STANZAS = %w[message iq presence].freeze
-
- @@types = {}
-
- def self.register(xpath, ns={})
- @@types[[xpath, ns]] = self
- end
-
- def self.from_node(node, stream)
- # optimize common case
- return Message.new(node, stream) if node.name == MESSAGE
- found = @@types.select {|pair, v| node.xpath(*pair).any? }
- .sort {|a, b| b[0][0].length - a[0][0].length }.first
- found ? found[1].new(node, stream) : nil
- end
-
- def initialize(node, stream)
- @node, @stream = node, stream
- end
-
- # Send the stanza to all recipients, stamping it with from and
- # to addresses first.
- def broadcast(recipients)
- @node[FROM] = stream.user.jid.to_s
- recipients.each do |recipient|
- @node[TO] = recipient.user.jid.to_s
- recipient.write(@node)
- end
- end
-
- # Returns true if this stanza should be processed locally. Returns false
- # if it's destined for a remote domain or external component.
- def local?
- return true unless ROUTABLE_STANZAS.include?(@node.name)
- to = JID.new(@node[TO])
- to.empty? || local_jid?(to)
- end
-
- def local_jid?(*jids)
- stream.config.local_jid?(*jids)
- end
-
- # Return true if this stanza is addressed to a pubsub subdomain hosted
- # at this server. This helps differentiate between IQ stanzas addressed
- # to the server and stanzas addressed to pubsub domains, both of which must
- # be handled locally and not routed.
- def to_pubsub_domain?
- stream.config.pubsub?(validate_to)
- end
-
- def route
- stream.router.route(@node)
- end
-
- def router
- stream.router
- end
-
- def storage(domain=stream.domain)
- stream.storage(domain)
- end
-
- def process
- raise 'subclass must implement'
- end
-
- # Broadcast unavailable presence from the user's available resources to the
- # recipient's available resources. Route the stanza to a remote server if
- # the recipient isn't hosted locally.
- def send_unavailable(from, to)
- available = router.available_resources(from, to)
- stanzas = available.map {|stream| unavailable(stream.user.jid) }
- broadcast_to_available_resources(stanzas, to)
- end
-
- # Return an unavailable presence stanza addressed from the given JID.
- def unavailable(from)
- doc = Document.new
- doc.create_element('presence',
- 'from' => from.to_s,
- 'id' => Kit.uuid,
- 'type' => 'unavailable')
- end
-
- # Return nil if this stanza has no 'to' attribute. Return a Vines::JID
- # if it contains a valid 'to' attribute. Raise a JidMalformed error if
- # the JID is invalid.
- def validate_to
- validate_address(TO)
- end
-
- # Return nil if this stanza has no 'from' attribute. Return a Vines::JID
- # if it contains a valid 'from' attribute. Raise a JidMalformed error if
- # the JID is invalid.
- def validate_from
- validate_address(FROM)
- end
-
- def method_missing(method, *args, &block)
- @node.send(method, *args, &block)
- end
-
- private
-
- # Send the stanzas to the destination JID, routing to a s2s stream
- # if the address is remote. This method properly stamps the to address
- # on each stanza before it's sent. The caller must set the from address.
- def broadcast_to_available_resources(stanzas, to)
- return if send_to_remote(stanzas, to)
- send_to_recipients(stanzas, stream.available_resources(to))
- end
-
- # Send the stanzas to the destination JID, routing to a s2s stream
- # if the address is remote. This method properly stamps the to address
- # on each stanza before it's sent. The caller must set the from address.
- def broadcast_to_interested_resources(stanzas, to)
- return if send_to_remote(stanzas, to)
- send_to_recipients(stanzas, stream.interested_resources(to))
- end
-
- # Route the stanzas to a remote server, stamping a bare JID as the
- # to address. Bare JIDs are required for presence subscription stanzas
- # sent to the remote contact's server. Return true if the stanzas were
- # routed, false if they must be delivered locally.
- def send_to_remote(stanzas, to)
- return false if local_jid?(to)
- to = JID.new(to)
- stanzas.each do |el|
- el[TO] = to.bare.to_s
- router.route(el)
- end
- true
- end
-
- # Send the stanzas to the local recipient streams, stamping a full JID as
- # the to address. It's important to use full JIDs, even when sending to
- # local clients, because the stanzas may be routed to other cluster nodes
- # for delivery. We need the receiving cluster node to send the stanza just
- # to this full JID, not to lookup all JIDs for this user.
- def send_to_recipients(stanzas, recipients)
- recipients.each do |recipient|
- stanzas.each do |el|
- el[TO] = recipient.user.jid.to_s
- recipient.write(el)
- end
- end
- end
-
- # Return true if the to and from JIDs are allowed to communicate with one
- # another based on the cross_domain_messages setting in conf/config.rb. If
- # a domain's users are isolated to sending messages only within their own
- # domain, pubsub stanzas must not be processed from remote JIDs.
- def allowed?
- stream.config.allowed?(validate_to || stream.domain, stream.user.jid)
- end
-
- def validate_address(attr)
- jid = (self[attr] || EMPTY)
- return if jid.empty?
- JID.new(jid)
- rescue
- raise StanzaErrors::JidMalformed.new(self, 'modify')
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/dialback.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/dialback.rb
deleted file mode 100644
index ff51ef9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/dialback.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Dialback < Stanza
- VALID_TYPE, INVALID_TYPE = %w[valid invalid].map {|t| t.freeze }
- NS = NAMESPACES[:legacy_dialback]
-
- register "/db:verify", 'db' => NS
-
- def process
- id, from, to = %w[id from to].map {|a| @node[a] }
- key = @node.text
-
- outbound_stream = router.stream_by_id(id)
- unless outbound_stream && outbound_stream.state.is_a?(Stream::Server::Outbound::AuthDialbackResult)
- @stream.write(%Q{<db:verify from="#{to}" to="#{from}" id="#{id}" type="error"><error type="cancel"><item-not-found xmlns="#{NAMESPACES[:stanzas]}"/></error></db:verify>})
- return
- end
-
- secret = outbound_stream.state.dialback_secret
- type = Kit.dialback_key(secret, from, to, id) == key ? VALID_TYPE : INVALID_TYPE
- @stream.write(%Q{<db:verify from="#{to}" to="#{from}" id="#{id}" type="#{type}"/>})
- @stream.close_connection_after_writing
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq.rb
deleted file mode 100644
index 3e4e21d..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq < Stanza
- register "/iq"
-
- VALID_TYPES = %w[get set result error].freeze
-
- VALID_TYPES.each do |type|
- define_method "#{type}?" do
- self['type'] == type
- end
- end
-
- def process
- if self['id'] && VALID_TYPES.include?(self['type'])
- route_iq or raise StanzaErrors::FeatureNotImplemented.new(@node, 'cancel')
- else
- raise StanzaErrors::BadRequest.new(@node, 'modify')
- end
- end
-
- def to_result
- doc = Document.new
- doc.create_element('iq',
- 'from' => validate_to || stream.domain,
- 'id' => self['id'],
- 'to' => stream.user.jid,
- 'type' => 'result')
- end
-
- private
-
- # Return false if this IQ stanza is addressed to the server, or a pubsub
- # service hosted here, and must be handled locally. Return true if the
- # stanza must not be handled locally and has been routed to the appropriate
- # component, s2s, or c2s stream.
- def route_iq
- to = validate_to
- return false if to.nil? || stream.config.vhost?(to) || to_pubsub_domain?
- self['from'] = stream.user.jid.to_s
- local? ? broadcast(stream.connected_resources(to)) : route
- true
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/auth.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/auth.rb
deleted file mode 100644
index d854bc1..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/auth.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Auth < Query
- register "/iq[@id and @type='get']/ns:query", 'ns' => NAMESPACES[:non_sasl]
-
- def process
- # XEP-0078 says we MUST send a service-unavailable error
- # here, but Adium 1.4.1 won't login if we do that, so just
- # swallow this stanza.
- # raise StanzaErrors::ServiceUnavailable.new(@node, 'cancel')
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_info.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_info.rb
deleted file mode 100644
index 0073df6..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_info.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class DiscoInfo < Query
- NS = NAMESPACES[:disco_info]
-
- register "/iq[@id and @type='get']/ns:query", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- result = to_result.tap do |el|
- el << el.document.create_element('query') do |query|
- query.default_namespace = NS
- if to_pubsub_domain?
- identity(query, 'pubsub', 'service')
- pubsub = [:pubsub_create, :pubsub_delete, :pubsub_instant, :pubsub_item_ids, :pubsub_publish, :pubsub_subscribe]
- features(query, :disco_info, :ping, :pubsub, *pubsub)
- else
- identity(query, 'server', 'im')
- features = [:disco_info, :disco_items, :offline, :ping, :vcard, :version]
- features << :storage if stream.config.private_storage?(validate_to || stream.domain)
- features(query, features)
- end
- end
- end
- stream.write(result)
- end
-
- private
-
- def identity(query, category, type)
- query << query.document.create_element('identity', 'category' => category, 'type' => type)
- end
-
- def features(query, *features)
- features.flatten.each do |feature|
- query << query.document.create_element('feature', 'var' => NAMESPACES[feature])
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_items.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_items.rb
deleted file mode 100644
index 8d95615..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/disco_items.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class DiscoItems < Query
- NS = NAMESPACES[:disco_items]
-
- register "/iq[@id and @type='get']/ns:query", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- result = to_result.tap do |el|
- el << el.document.create_element('query') do |query|
- query.default_namespace = NS
- unless to_pubsub_domain?
- to = (validate_to || stream.domain).to_s
- stream.config.vhost(to).disco_items.each do |domain|
- query << el.document.create_element('item', 'jid' => domain)
- end
- end
- end
- end
- stream.write(result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/error.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/error.rb
deleted file mode 100644
index 8530c5c..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/error.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Error < Iq
- register "/iq[@id and @type='error']"
-
- def process
- return if route_iq
- # do nothing
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/ping.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/ping.rb
deleted file mode 100644
index 6584617..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/ping.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Ping < Iq
- register "/iq[@id and @type='get']/ns:ping", 'ns' => NAMESPACES[:ping]
-
- def process
- return if route_iq || !allowed?
- stream.write(to_result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/private_storage.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/private_storage.rb
deleted file mode 100644
index 6a2aadb..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/private_storage.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- # Implements the Private Storage feature defined in XEP-0049. Clients are
- # allowed to save arbitrary XML documents on the server, identified by
- # element name and namespace.
- class PrivateStorage < Query
- NS = NAMESPACES[:storage]
-
- register "/iq[@id and (@type='get' or @type='set')]/ns:query", 'ns' => NS
-
- def process
- validate_to_address
- validate_storage_enabled
- validate_children_size
- validate_namespaces
- get? ? retrieve_fragment : update_fragment
- end
-
- private
-
- def retrieve_fragment
- found = storage.find_fragment(stream.user.jid, elements.first.elements.first)
- raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless found
-
- result = to_result do |node|
- node << node.document.create_element('query') do |query|
- query.default_namespace = NS
- query << found
- end
- end
- stream.write(result)
- end
-
- def update_fragment
- elements.first.elements.each do |node|
- storage.save_fragment(stream.user.jid, node)
- end
- stream.write(to_result)
- end
-
- private
-
- def to_result
- super.tap do |node|
- node['from'] = stream.user.jid.to_s
- yield node if block_given?
- end
- end
-
- def validate_children_size
- size = elements.first.elements.size
- if (get? && size != 1) || (set? && size == 0)
- raise StanzaErrors::NotAcceptable.new(self, 'modify')
- end
- end
-
- def validate_to_address
- to = validate_to
- unless to.nil? || to == stream.user.jid.bare
- raise StanzaErrors::Forbidden.new(self, 'cancel')
- end
- end
-
- def validate_storage_enabled
- unless stream.config.private_storage?(stream.domain)
- raise StanzaErrors::ServiceUnavailable.new(self, 'cancel')
- end
- end
-
- def validate_namespaces
- elements.first.elements.each do |node|
- if node.namespace.nil? || NAMESPACES.values.include?(node.namespace.href)
- raise StanzaErrors::NotAcceptable.new(self, 'modify')
- end
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/query.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/query.rb
deleted file mode 100644
index d741129..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/query.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Query < Iq
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/result.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/result.rb
deleted file mode 100644
index 341c594..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/result.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Result < Iq
- register "/iq[@id and @type='result']"
-
- def process
- return if route_iq
- # do nothing
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/roster.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/roster.rb
deleted file mode 100644
index 21eae66..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/roster.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Roster < Query
- NS = NAMESPACES[:roster]
-
- register "/iq[@id and (@type='get' or @type='set')]/ns:query", 'ns' => NS
-
- def process
- validate_to_address
- get? ? roster_query : update_roster
- end
-
- private
-
- # Send an iq result stanza containing roster items to the user in
- # response to their roster get request. Requesting the roster makes
- # this stream an "interested resource" that can now receive roster
- # updates.
- def roster_query
- stream.requested_roster!
- stream.write(stream.user.to_roster_xml(self['id']))
- end
-
- # Roster sets must have no 'to' address or be addressed to the same
- # JID that sent the stanza. RFC 6121 sections 2.1.5 and 2.3.3.
- def validate_to_address
- to = validate_to
- unless to.nil? || to.bare == stream.user.jid.bare
- raise StanzaErrors::Forbidden.new(self, 'auth')
- end
- end
-
- # Add, update, or delete the roster item contained in the iq set
- # stanza received from the client. RFC 6121 sections 2.3, 2.4, 2.5.
- def update_roster
- items = self.xpath('ns:query/ns:item', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') if items.size != 1
- item = items.first
-
- jid = JID.new(item['jid']) rescue (raise StanzaErrors::JidMalformed.new(self, 'modify'))
- raise StanzaErrors::BadRequest.new(self, 'modify') if jid.empty? || !jid.bare?
-
- if item['subscription'] == 'remove'
- remove_contact(jid)
- return
- end
-
- raise StanzaErrors::NotAllowed.new(self, 'modify') if jid == stream.user.jid.bare
- groups = item.xpath('ns:group', 'ns' => NS).map {|g| g.text.strip }
- raise StanzaErrors::BadRequest.new(self, 'modify') if groups.uniq!
- raise StanzaErrors::NotAcceptable.new(self, 'modify') if groups.include?('')
-
- contact = stream.user.contact(jid)
- unless contact
- contact = Contact.new(jid: jid)
- stream.user.roster << contact
- end
- contact.name = item['name']
- contact.groups = groups
- storage.save_user(stream.user)
- stream.update_user_streams(stream.user)
- send_result_iq
- push_roster_updates(stream.user.jid, contact)
- end
-
- # Remove the contact with this JID from the user's roster and send
- # roster pushes to the user's interested resources. This is triggered
- # by receiving an iq set with an item element like
- # <item jid="alice at wonderland.lit" subscription="remove"/>. RFC 6121
- # section 2.5.
- def remove_contact(jid)
- contact = stream.user.contact(jid)
- raise StanzaErrors::ItemNotFound.new(self, 'modify') unless contact
- if local_jid?(contact.jid)
- user = storage(contact.jid.domain).find_user(contact.jid)
- end
-
- if user && user.contact(stream.user.jid)
- user.contact(stream.user.jid).subscription = 'none'
- user.contact(stream.user.jid).ask = nil
- end
- stream.user.remove_contact(contact.jid)
- [user, stream.user].compact.each do |save|
- storage(save.jid.domain).save_user(save)
- stream.update_user_streams(save)
- end
-
- send_result_iq
- push_roster_updates(stream.user.jid,
- Contact.new(jid: contact.jid, subscription: 'remove'))
-
- if local_jid?(contact.jid)
- send_unavailable(stream.user.jid, contact.jid) if contact.subscribed_from?
- send_unsubscribe(contact)
- if user && user.contact(stream.user.jid)
- push_roster_updates(contact.jid, user.contact(stream.user.jid))
- end
- else
- send_unsubscribe(contact)
- end
- end
-
- # Notify the contact that it's been removed from the user's roster
- # and no longer has any presence relationship with the user.
- def send_unsubscribe(contact)
- presence = [%w[to unsubscribe], %w[from unsubscribed]].map do |meth, type|
- presence(contact.jid, type) if contact.send("subscribed_#{meth}?")
- end.compact
- broadcast_to_interested_resources(presence, contact.jid)
- end
-
- def presence(to, type)
- doc = Document.new
- doc.create_element('presence',
- 'from' => stream.user.jid.bare.to_s,
- 'id' => Kit.uuid,
- 'to' => to.to_s,
- 'type' => type)
- end
-
- # Send an iq set stanza to the user's interested resources, letting them
- # know their roster has been updated.
- def push_roster_updates(to, contact)
- stream.interested_resources(to).each do |recipient|
- contact.send_roster_push(recipient)
- end
- end
-
- def send_result_iq
- node = to_result
- node.remove_attribute('from')
- stream.write(node)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/session.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/session.rb
deleted file mode 100644
index b51fc04..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/session.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- # Session support is deprecated, but Adium requires it, so reply with an
- # iq result stanza.
- class Session < Iq
- register "/iq[@id and @type='set']/ns:session", 'ns' => NAMESPACES[:session]
-
- def process
- stream.write(to_result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/vcard.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/vcard.rb
deleted file mode 100644
index 11c558c..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/vcard.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Vcard < Iq
- NS = NAMESPACES[:vcard]
-
- register "/iq[@id and @type='get' or @type='set']/ns:vCard", 'ns' => NS
-
- def process
- return unless allowed?
- if local?
- get? ? vcard_query : vcard_update
- else
- self['from'] = stream.user.jid.to_s
- route
- end
- end
-
- private
-
- def vcard_query
- to = validate_to
- jid = to ? to.bare : stream.user.jid.bare
- card = storage(jid.domain).find_vcard(jid)
-
- raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless card
-
- doc = Document.new
- result = doc.create_element('iq') do |node|
- node['from'] = jid.to_s unless jid == stream.user.jid.bare
- node['id'] = self['id']
- node['to'] = stream.user.jid.to_s
- node['type'] = 'result'
- node << card
- end
- stream.write(result)
- end
-
- def vcard_update
- to = validate_to
- unless to.nil? || to == stream.user.jid.bare
- raise StanzaErrors::Forbidden.new(self, 'auth')
- end
-
- storage.save_vcard(stream.user.jid, elements.first)
-
- result = to_result
- result.remove_attribute('from')
- stream.write(result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/version.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/version.rb
deleted file mode 100644
index 1da59f9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/iq/version.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Iq
- class Version < Query
- NS = NAMESPACES[:version]
-
- register "/iq[@id and @type='get']/ns:query", 'ns' => NS
-
- def process
- return if route_iq || to_pubsub_domain? || !allowed?
- result = to_result.tap do |node|
- node << node.document.create_element('query') do |query|
- query.default_namespace = NS
- query << node.document.create_element('name', 'Vines')
- query << node.document.create_element('version', VERSION)
- end
- end
- stream.write(result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/message.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/message.rb
deleted file mode 100644
index 97dced9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/message.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Message < Stanza
- register "/message"
-
- TYPE, FROM = %w[type from].map {|s| s.freeze }
- VALID_TYPES = %w[chat error groupchat headline normal].freeze
-
- VALID_TYPES.each do |type|
- define_method "#{type}?" do
- self[TYPE] == type
- end
- end
-
- def process
- unless self[TYPE].nil? || VALID_TYPES.include?(self[TYPE])
- raise StanzaErrors::BadRequest.new(self, 'modify')
- end
-
- if local?
- to = validate_to || stream.user.jid.bare
- recipients = stream.connected_resources(to)
- if recipients.empty?
- if user = storage(to.domain).find_user(to)
- if Config.instance.max_offline_msgs > 0 && self[TYPE].match(/(chat|normal)/i)
- storage(to.domain).save_message(stream.user.jid.bare.to_s, to.to_s, @node.text)
- else
- raise StanzaErrors::ServiceUnavailable.new(self, 'cancel')
- end
- end
- else
- broadcast(recipients)
- end
- else
- self[FROM] = stream.user.jid.to_s
- route
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence.rb
deleted file mode 100644
index db68f10..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence.rb
+++ /dev/null
@@ -1,182 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence < Stanza
- register "/presence"
-
- VALID_TYPES = %w[subscribe subscribed unsubscribe unsubscribed unavailable probe error].freeze
-
- VALID_TYPES.each do |type|
- define_method "#{type}?" do
- self['type'] == type
- end
- end
-
- def process
- stream.last_broadcast_presence = @node.clone unless validate_to
- unless self['type'].nil?
- raise StanzaErrors::BadRequest.new(self, 'modify')
- end
- if Config.instance.max_offline_msgs > 0 && !validate_to
- check_offline_messages(stream.last_broadcast_presence)
- end
- dir = outbound? ? 'outbound' : 'inbound'
- method("#{dir}_broadcast_presence").call
- end
-
- def check_offline_messages(presence)
- priority = presence.xpath("//priority").text.to_i rescue nil
- if priority != nil && priority >= 0
- jid = stream.user.jid.to_s
- storage.find_messages(jid).each do |id, m|
- stamp = Time.parse(m[:created_at].to_s)
- doc = Nokogiri::XML::Builder.new
- doc.message(:type => "chat", :from => m[:from], :to => m[:to]) do |msg|
- msg.send(:"body", m[:message])
- msg.send(:"delay", "Offline Storage",
- :xmlns => NAMESPACES[:delay],
- :from => m[:from],
- :stamp => stamp.iso8601)
- end
- xml = doc.to_xml :save_with => Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
- stream.write(xml)
- # after delivering it we should
- # delete the message from database
- storage.destroy_message(id)
- end
- end
- end
-
- def outbound?
- !inbound?
- end
-
- def inbound?
- stream.class == Vines::Stream::Server ||
- stream.class == Vines::Stream::Component
- end
-
- def outbound_broadcast_presence
- self['from'] = stream.user.jid.to_s
- to = validate_to
- type = (self['type'] || '').strip
- initial = to.nil? && type.empty? && !stream.available?
-
- recipients = if to.nil?
- stream.available_subscribers
- else
- stream.user.subscribed_from?(to) ? stream.available_resources(to) : []
- end
-
- # NOTE overriding vCard information is not concurring
- # with XEP-153 due the fact that the user can only update
- # his vCard via the Diaspora environment we should act
- # the same way for the avatar update
- override_vcard_update
-
- broadcast(recipients)
- broadcast(stream.available_resources(stream.user.jid))
-
- if initial
- stream.available_subscribed_to_resources.each do |recipient|
- if recipient.last_broadcast_presence
- el = recipient.last_broadcast_presence.clone
- el['to'] = stream.user.jid.to_s
- el['from'] = recipient.user.jid.to_s
- stream.write(el)
- end
- end
- stream.remote_subscribed_to_contacts.each do |contact|
- send_probe(contact.jid.bare)
- end
- stream.available!
- end
-
- stream.remote_subscribers(to).each do |contact|
- node = @node.clone
- node['to'] = contact.jid.bare.to_s
- router.route(node) rescue nil # ignore RemoteServerNotFound
- end
- end
-
- def inbound_broadcast_presence
- broadcast(stream.available_resources(validate_to))
- end
-
- private
-
- def send_probe(to)
- to = JID.new(to)
- doc = Document.new
- probe = doc.create_element('presence',
- 'from' => stream.user.jid.bare.to_s,
- 'id' => Kit.uuid,
- 'to' => to.bare.to_s,
- 'type' => 'probe')
- router.route(probe) rescue nil # ignore RemoteServerNotFound
- end
-
- def auto_reply_to_subscription_request(from, type)
- doc = Document.new
- node = doc.create_element('presence') do |el|
- el['from'] = from.to_s
- el['id'] = self['id'] if self['id']
- el['to'] = stream.user.jid.bare.to_s
- el['type'] = type
- end
- stream.write(node)
- end
-
- # Send the contact's roster item to the current user's interested streams.
- # Roster pushes are required, following presence subscription updates, to
- # notify the user's clients of the contact's current state.
- def send_roster_push(to)
- contact = stream.user.contact(to)
- stream.interested_resources(stream.user.jid).each do |recipient|
- contact.send_roster_push(recipient)
- end
- end
-
- # Notify the current user's interested streams of a contact's subscription
- # state change as a result of receiving a subscribed, unsubscribe, or
- # unsubscribed presence stanza.
- def broadcast_subscription_change(contact)
- stamp_from
- stream.interested_resources(stamp_to).each do |recipient|
- @node['to'] = recipient.user.jid.to_s
- recipient.write(@node)
- contact.send_roster_push(recipient)
- end
- end
-
- # Validate that the incoming stanza has a 'to' attribute and strip any
- # resource part from it so it's a bare jid. Return the bare JID object
- # that was stamped.
- def stamp_to
- to = validate_to
- raise StanzaErrors::BadRequest.new(self, 'modify') unless to
- to.bare.tap do |bare|
- self['to'] = bare.to_s
- end
- end
-
- # Presence subscription stanzas must be addressed from the user's bare
- # JID. Return the user's bare JID object that was stamped.
- def stamp_from
- stream.user.jid.bare.tap do |bare|
- self['from'] = bare.to_s
- end
- end
-
- def override_vcard_update
- image_path = storage.find_avatar_by_jid(@node['from'])
- return if image_path.nil?
- photo_tag = "<photo><EXTVAL>#{image_path}</EXTVAL></photo>"
- node = @node.xpath("//xmlns:x", 'xmlns' => NAMESPACES[:vcard_update]).first
- node.remove unless node.blank?
- @node << "<x xmlns=\"#{NAMESPACES[:vcard_update]}\">#{photo_tag}</x>"
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/error.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/error.rb
deleted file mode 100644
index 7df6d64..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/error.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Error < Presence
- register "/presence[@type='error']"
-
- def process
- inbound? ? process_inbound : process_outbound
- end
-
- def process_outbound
- # FIXME Implement error handling
- end
-
- def process_inbound
- # FIXME Implement error handling
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/probe.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/probe.rb
deleted file mode 100644
index ea92d48..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/probe.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Probe < Presence
- register "/presence[@type='probe']"
-
- def process
- inbound? ? process_inbound : process_outbound
- end
-
- def process_outbound
- self['from'] = stream.user.jid.to_s
- local? ? process_inbound : route
- end
-
- def process_inbound
- to = validate_to
- raise StanzaErrors::BadRequest.new(self, 'modify') unless to
-
- user = storage(to.domain).find_user(to)
- unless user && user.subscribed_from?(stream.user.jid)
- auto_reply_to_subscription_request(to.bare, 'unsubscribed')
- else
- stream.available_resources(to).each do |recipient|
- el = recipient.last_broadcast_presence.clone
- el['from'] = recipient.user.jid.to_s
- el['to'] = stream.user.jid.to_s
- stream.write(el)
- end
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribe.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribe.rb
deleted file mode 100644
index 524aab5..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribe.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Subscribe < Presence
- register "/presence[@type='subscribe']"
-
- def process
- stamp_from
- inbound? ? process_inbound : process_outbound
- end
-
- def process_outbound
- to = stamp_to
- stream.user.request_subscription(to)
- storage.save_user(stream.user)
- stream.update_user_streams(stream.user)
- local? ? process_inbound : route
- send_roster_push(to)
- end
-
- def process_inbound
- to = stamp_to
- contact = storage(to.domain).find_user(to)
- if contact.nil?
- auto_reply_to_subscription_request(to, 'unsubscribed')
- elsif contact.subscribed_from?(stream.user.jid)
- auto_reply_to_subscription_request(to, 'subscribed')
- else
- recipients = stream.available_resources(to)
- if recipients.empty?
- # TODO store subscription request per RFC 6121 3.1.3 #4
- else
- broadcast_to_available_resources([@node], to)
- end
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribed.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribed.rb
deleted file mode 100644
index bc9768d..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/subscribed.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Subscribed < Presence
- register "/presence[@type='subscribed']"
-
- def process
- stamp_from
- inbound? ? process_inbound : process_outbound
- end
-
- def process_outbound
- to = stamp_to
- stream.user.add_subscription_from(to)
- storage.save_user(stream.user)
- stream.update_user_streams(stream.user)
- local? ? process_inbound : route
- send_roster_push(to)
- send_known_presence(to)
- end
-
- def process_inbound
- to = stamp_to
- user = storage(to.domain).find_user(to)
- contact = user.contact(stream.user.jid) if user
- return unless contact && contact.can_subscribe?
- contact.subscribe_to
- storage(to.domain).save_user(user)
- stream.update_user_streams(user)
- broadcast_subscription_change(contact)
- end
-
- private
-
- # After approving a contact's subscription to this user's presence,
- # broadcast this user's most recent presence stanzas to the contact.
- def send_known_presence(to)
- stanzas = stream.available_resources(stream.user.jid).map do |stream|
- stream.last_broadcast_presence.clone.tap do |node|
- node['from'] = stream.user.jid.to_s
- node['id'] = Kit.uuid
- end
- end
- broadcast_to_available_resources(stanzas, to)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unavailable.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unavailable.rb
deleted file mode 100644
index c0b119a..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unavailable.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Unavailable < Presence
- register "/presence[@type='unavailable']"
-
- def process
- inbound? ? inbound_broadcast_presence : outbound_broadcast_presence
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribe.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribe.rb
deleted file mode 100644
index b06d3f6..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribe.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Unsubscribe < Presence
- register "/presence[@type='unsubscribe']"
-
- def process
- stamp_from
- inbound? ? process_inbound : process_outbound
- end
-
- def process_outbound
- to = stamp_to
- return unless stream.user.subscribed_to?(to)
- stream.user.remove_subscription_to(to)
- storage.save_user(stream.user)
- stream.update_user_streams(stream.user)
- local? ? process_inbound : route
- send_roster_push(to)
- end
-
- def process_inbound
- to = stamp_to
- user = storage(to.domain).find_user(to)
- return unless user && user.subscribed_from?(stream.user.jid)
- contact = user.contact(stream.user.jid)
- contact.unsubscribe_from
- storage(to.domain).save_user(user)
- stream.update_user_streams(user)
- broadcast_subscription_change(contact)
- send_unavailable(to, stream.user.jid.bare)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribed.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribed.rb
deleted file mode 100644
index 94be9a9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/presence/unsubscribed.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class Presence
- class Unsubscribed < Presence
- register "/presence[@type='unsubscribed']"
-
- def process
- stamp_from
- inbound? ? process_inbound : process_outbound
- end
-
- def process_outbound
- to = stamp_to
- return unless stream.user.subscribed_from?(to)
- send_unavailable(stream.user.jid, to)
- stream.user.remove_subscription_from(to)
- storage.save_user(stream.user)
- stream.update_user_streams(stream.user)
- local? ? process_inbound : route
- send_roster_push(to)
- end
-
- def process_inbound
- to = stamp_to
- user = storage(to.domain).find_user(to)
- return unless user && user.subscribed_to?(stream.user.jid)
- contact = user.contact(stream.user.jid)
- contact.unsubscribe_to
- storage(to.domain).save_user(user)
- stream.update_user_streams(user)
- broadcast_subscription_change(contact)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub.rb
deleted file mode 100644
index b9ff731..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class PubSub < Iq
-
- private
-
- # Return the Config::PubSub system for the domain to which this stanza is
- # addressed or nil if it's not to a pubsub subdomain.
- def pubsub
- stream.config.pubsub(validate_to)
- end
-
- # Raise feature-not-implemented if this stanza is addressed to the chat
- # server itself, rather than a pubsub subdomain.
- def validate_to_address
- raise StanzaErrors::FeatureNotImplemented.new(self, 'cancel') unless pubsub
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/create.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/create.rb
deleted file mode 100644
index 2e43ea1..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/create.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class PubSub
- class Create < PubSub
- NS = NAMESPACES[:pubsub]
-
- register "/iq[@id and @type='set']/ns:pubsub/ns:create", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- validate_to_address
-
- node = self.xpath('ns:pubsub/ns:create', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
- node = node.first
-
- id = (node['node'] || '').strip
- id = Kit.uuid if id.empty?
- raise StanzaErrors::Conflict.new(self, 'cancel') if pubsub.node?(id)
- pubsub.add_node(id)
- send_result_iq(id)
- end
-
- private
-
- def send_result_iq(id)
- el = to_result
- el << el.document.create_element('pubsub') do |node|
- node.default_namespace = NS
- node << el.document.create_element('create', 'node' => id)
- end
- stream.write(el)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/delete.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/delete.rb
deleted file mode 100644
index 9980b15..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/delete.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class PubSub
- class Delete < PubSub
- NS = NAMESPACES[:pubsub]
-
- register "/iq[@id and @type='set']/ns:pubsub/ns:delete", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- validate_to_address
-
- node = self.xpath('ns:pubsub/ns:delete', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
- node = node.first
-
- id = node['node']
- raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless pubsub.node?(id)
-
- pubsub.publish(id, message(id))
- pubsub.delete_node(id)
- stream.write(to_result)
- end
-
- private
-
- def message(id)
- doc = Document.new
- doc.create_element('message') do |node|
- node << node.document.create_element('event') do |event|
- event.default_namespace = NAMESPACES[:pubsub_event]
- event << node.document.create_element('delete', 'node' => id)
- end
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/publish.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/publish.rb
deleted file mode 100644
index be97339..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/publish.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class PubSub
- class Publish < PubSub
- NS = NAMESPACES[:pubsub]
-
- register "/iq[@id and @type='set']/ns:pubsub/ns:publish", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- validate_to_address
-
- node = self.xpath('ns:pubsub/ns:publish', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
- node = node.first
- id = node['node']
-
- raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless pubsub.node?(id)
-
- item = node.xpath('ns:item', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') unless item.size == 1
- item = item.first
- unless item['id']
- item['id'] = Kit.uuid
- include_item = true
- end
-
- raise StanzaErrors::BadRequest.new(self, 'modify') unless item.elements.size == 1
- pubsub.publish(id, message(id, item))
- send_result_iq(id, include_item ? item : nil)
- end
-
- private
-
- def message(node, item)
- doc = Document.new
- doc.create_element('message') do |message|
- message << doc.create_element('event') do |event|
- event.default_namespace = NAMESPACES[:pubsub_event]
- event << doc.create_element('items', 'node' => node) do |items|
- items << doc.create_element('item', 'id' => item['id'], 'publisher' => stream.user.jid.to_s) do |el|
- el << item.elements.first
- end
- end
- end
- end
- end
-
- def send_result_iq(node, item)
- result = to_result
- if item
- result << result.document.create_element('pubsub') do |pubsub|
- pubsub.default_namespace = NS
- pubsub << result.document.create_element('publish', 'node' => node) do |publish|
- publish << result.document.create_element('item', 'id' => item['id'])
- end
- end
- end
- stream.write(result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/subscribe.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/subscribe.rb
deleted file mode 100644
index 24934e8..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/subscribe.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class PubSub
- class Subscribe < PubSub
- NS = NAMESPACES[:pubsub]
-
- register "/iq[@id and @type='set']/ns:pubsub/ns:subscribe", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- validate_to_address
-
- node = self.xpath('ns:pubsub/ns:subscribe', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
- node = node.first
- id, jid = node['node'], JID.new(node['jid'])
-
- raise StanzaErrors::BadRequest.new(self, 'modify') unless stream.user.jid.bare == jid.bare
- raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless pubsub.node?(id)
- raise StanzaErrors::PolicyViolation.new(self, 'wait') if pubsub.subscribed?(id, jid)
-
- pubsub.subscribe(id, jid)
- send_result_iq(id, jid)
- end
-
- private
-
- def send_result_iq(id, jid)
- result = to_result
- result << result.document.create_element('pubsub') do |node|
- node.default_namespace = NS
- node << result.document.create_element('subscription',
- 'node' => id,
- 'jid' => jid.to_s,
- 'subscription' => 'subscribed')
- end
- stream.write(result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/unsubscribe.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/unsubscribe.rb
deleted file mode 100644
index bda5887..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stanza/pubsub/unsubscribe.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stanza
- class PubSub
- class Unsubscribe < PubSub
- NS = NAMESPACES[:pubsub]
-
- register "/iq[@id and @type='set']/ns:pubsub/ns:unsubscribe", 'ns' => NS
-
- def process
- return if route_iq || !allowed?
- validate_to_address
-
- node = self.xpath('ns:pubsub/ns:unsubscribe', 'ns' => NS)
- raise StanzaErrors::BadRequest.new(self, 'modify') if node.size != 1
- node = node.first
- id, jid = node['node'], JID.new(node['jid'])
-
- raise StanzaErrors::Forbidden.new(self, 'auth') unless stream.user.jid.bare == jid.bare
- raise StanzaErrors::ItemNotFound.new(self, 'cancel') unless pubsub.node?(id)
- raise StanzaErrors::UnexpectedRequest.new(self, 'cancel') unless pubsub.subscribed?(id, jid)
-
- pubsub.unsubscribe(id, jid)
- stream.write(to_result)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage.rb
deleted file mode 100644
index 0e09590..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage.rb
+++ /dev/null
@@ -1,291 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Storage
- include Vines::Log
-
- @@nicks = {}
-
- # Register a nickname that can be used in the config file to specify this
- # storage implementation.
- #
- # name - The String name for this storage backend.
- #
- # Returns nothing.
- def self.register(name)
- @@nicks[name.to_sym] = self
- end
-
- def self.from_name(name, &block)
- klass = @@nicks[name.to_sym]
- raise "#{name} storage class not found" unless klass
- klass.new(&block)
- end
-
- # Wrap a blocking IO method in a new method that pushes the original method
- # onto EventMachine's thread pool using EM#defer. Storage classes implemented
- # with blocking IO don't need to worry about threading or blocking the
- # EventMachine reactor thread if they wrap their methods with this one.
- #
- # Examples
- #
- # def find_user(jid)
- # some_blocking_lookup(jid)
- # end
- # defer :find_user
- #
- # Storage classes that use asynchronous IO (through an EventMachine
- # enabled library like em-http-request or em-redis) don't need any special
- # consideration and must not use this method.
- #
- # Returns nothing.
- def self.defer(method)
- old = instance_method(method)
- define_method method do |*args|
- fiber = Fiber.current
- op = operation { old.bind(self).call(*args) }
- cb = proc {|result| fiber.resume(result) }
- EM.defer(op, cb)
- Fiber.yield
- end
- end
-
- # Wrap a method with Fiber yield and resume logic. The method must yield
- # its result to a block. This makes it easier to write asynchronous
- # implementations of `authenticate`, `find_user`, and `save_user` that
- # block and return a result rather than yielding.
- #
- # Examples
- #
- # def find_user(jid)
- # http = EM::HttpRequest.new(url).get
- # http.callback { yield build_user_from_http_response(http) }
- # end
- # fiber :find_user
- #
- # Because `find_user` has been wrapped in Fiber logic, we can call it
- # synchronously even though it uses asynchronous EventMachine calls.
- #
- # user = storage.find_user('alice at wonderland.lit')
- # puts user.nil?
- #
- # Returns nothing.
- def self.fiber(method)
- old = instance_method(method)
- define_method method do |*args|
- fiber, yielding = Fiber.current, true
- old.bind(self).call(*args) do |user|
- fiber.resume(user) rescue yielding = false
- end
- Fiber.yield if yielding
- end
- end
-
- # Validate the username and password pair.
- #
- # username - The String login JID to verify.
- # password - The String password the user presented to the server.
- #
- # Examples
- #
- # user = storage.authenticate('alice at wonderland.lit', 'secr3t')
- # puts user.nil?
- #
- # This default implementation validates the password against a bcrypt hash
- # of the password stored in the database. Sub-classes not using bcrypt
- # passwords must override this method.
- #
- # Returns a Vines::User object on success, nil on failure.
- def authenticate(username, password)
- user = find_user(username)
- hash = BCrypt::Password.new(user.password) rescue nil
- (hash && hash == password) ? user : nil
- end
-
- # Find the user in the storage database by their unique JID.
- #
- # jid - The String or JID of the user, possibly nil. This may be either a
- # bare JID or full JID. Implementations of this method must convert
- # the JID to a bare JID before searching for the user in the database.
- #
- # Examples
- #
- # # Bare JID lookup.
- # user = storage.find_user('alice at wonderland.lit')
- # puts user.nil?
- #
- # # Full JID lookup.
- # user = storage.find_user('alice at wonderland.lit/tea')
- # puts user.nil?
- #
- # Returns the User identified by the JID, nil if not found.
- def find_user(jid)
- raise 'subclass must implement'
- end
-
- # Persist the user to the database, and return when the save is complete.
- #
- # user - The User to persist.
- #
- # Examples
- #
- # alice = Vines::User.new(jid: 'alice at wonderland.lit')
- # storage.save_user(alice)
- # puts 'saved'
- #
- # Returns nothing.
- def save_user(user)
- raise 'subclass must implement'
- end
-
- # Find the user's vcard by their unique JID.
- #
- # jid - The String or JID of the user, possibly nil. This may be either a
- # bare JID or full JID. Implementations of this method must convert
- # the JID to a bare JID before searching for the vcard in the database.
- #
- # Examples
- #
- # card = storage.find_vcard('alice at wonderland.lit')
- # puts card.nil?
- #
- # Returns the vcard's Nokogiri::XML::Node, nil if not found.
- def find_vcard(jid)
- raise 'subclass must implement'
- end
-
- # Save the vcard to the database, and return when the save is complete.
- #
- # jid - The String or JID of the user, possibly nil. This may be either a
- # bare JID or full JID. Implementations of this method must convert
- # the JID to a bare JID before saving the vcard.
- # card - The vcard's Nokogiri::XML::Node.
- #
- # Examples
- #
- # card = Nokogiri::XML('<vCard>...</vCard>').root
- # storage.save_vcard('alice at wonderland.lit', card)
- # puts 'saved'
- #
- # Returns nothing.
- def save_vcard(jid, card)
- raise 'subclass must implement'
- end
-
- # Find the private XML fragment previously stored by the user. Private
- # XML storage uniquely identifies fragments by JID, root element name,
- # and root element namespace.
- #
- # jid - The String or JID of the user, possibly nil. This may be either a
- # bare JID or full JID. Implementations of this method must convert
- # the JID to a bare JID before searching for the fragment in the database.
- # node - The XML::Node that uniquely identifies the fragment by element
- # name and namespace.
- #
- # Examples
- #
- # root = Nokogiri::XML('<custom xmlns="urn:custom:ns"/>').root
- # fragment = storage.find_fragment('alice at wonderland.lit', root)
- # puts fragment.nil?
- #
- # Returns the fragment's Nokogiri::XML::Node or nil if not found.
- def find_fragment(jid, node)
- raise 'subclass must implement'
- end
-
- # Save the XML fragment to the database, and return when the save is complete.
- #
- # jid - The String or JID of the user, possibly nil. This may be
- # either a bare JID or full JID. Implementations of this method
- # must convert the JID to a bare JID before searching for the
- # fragment.
- # fragment - The XML::Node to save.
- #
- # Examples
- #
- # fragment = Nokogiri::XML('<custom xmlns="urn:custom:ns">some data</custom>').root
- # storage.save_fragment('alice at wonderland.lit', fragment)
- # puts 'saved'
- #
- # Returns nothing.
- def save_fragment(jid, fragment)
- raise 'subclass must implement'
- end
-
- # Check whether offline messages are available for the user
- # jid - The String or JID of the user, possibly nil. This may be
- # either a bare JID or full JID. Implementations of this method
- # must convert the JID to a bare JID before searching for
- # offline messages.
- #
- # Returns hash
- def find_messages(jid)
- raise 'subclass must implement'
- end
-
- # Save the offline message to the database, and return when the save is complete.
- #
- # from - The String or JID of the user.
- # to - The String or JID of the user.
- # message - The message you want to store.
- #
- # Returns nothing.
- def save_message(from, to, message)
- raise 'subclass must implement'
- end
-
- # Delete a offline message from database.
- #
- # id - The identifier of the offline message
- #
- # Returns nothing.
- def destroy_message(id)
- raise 'subclass must implement'
- end
-
- # Retrieve the avatar url by jid.
- #
- # jid - The String or JID of the user.
- #
- # Returns string
- def find_avatar_by_jid(jid)
- raise 'subclass must implement'
- end
-
- private
-
- # Determine if any of the arguments are nil or empty strings.
- #
- # Examples
- #
- # username, password = 'alice at wonderland.lit', ''
- # empty?(username, password) #=> true
- #
- # Returns true if any of the arguments are nil or empty strings.
- def empty?(*args)
- args.flatten.any? {|arg| (arg || '').strip.empty? }
- end
-
- # Create a proc suitable for running on the EM.defer thread pool, that
- # traps and logs any errors thrown by the provided block.
- #
- # block - The block to wrap in error handling.
- #
- # Examples
- #
- # op = operation { do_something_on_thread_pool() }
- # EM.defer(op)
- #
- # Returns a Proc.
- def operation
- proc do
- begin
- yield
- rescue => e
- log.error("Thread pool operation failed: #{e.message}")
- nil
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/local.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/local.rb
deleted file mode 100644
index c0e47ea..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/local.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Storage
-
- # A storage implementation that persists data to YAML files on the
- # local file system.
- class Local < Storage
- register :fs
-
- def initialize(&block)
- @dir = nil
- instance_eval(&block)
- unless @dir && File.directory?(@dir) && File.writable?(@dir)
- raise 'Must provide a writable storage directory'
- end
-
- %w[user vcard fragment].each do |sub|
- sub = File.expand_path(sub, @dir)
- Dir.mkdir(sub, 0700) unless File.exists?(sub)
- end
- end
-
- def dir(dir=nil)
- dir ? @dir = File.expand_path(dir) : @dir
- end
-
- def find_user(jid)
- jid = JID.new(jid).bare.to_s
- file = "user/#{jid}" unless jid.empty?
- record = YAML.load(read(file)) rescue nil
- return User.new(jid: jid).tap do |user|
- user.name, user.password = record.values_at('name', 'password')
- (record['roster'] || {}).each_pair do |jid, props|
- user.roster << Contact.new(
- jid: jid,
- name: props['name'],
- subscription: props['subscription'],
- ask: props['ask'],
- groups: props['groups'] || [])
- end
- end if record
- end
-
- def save_user(user)
- record = {'name' => user.name, 'password' => user.password, 'roster' => {}}
- user.roster.each do |contact|
- record['roster'][contact.jid.bare.to_s] = contact.to_h
- end
- save("user/#{user.jid.bare}", YAML.dump(record))
- end
-
- def find_vcard(jid)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- file = "vcard/#{jid}"
- Nokogiri::XML(read(file)).root rescue nil
- end
-
- def save_vcard(jid, card)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- save("vcard/#{jid}", card.to_xml)
- end
-
- def find_fragment(jid, node)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- file = 'fragment/%s' % fragment_id(jid, node)
- Nokogiri::XML(read(file)).root rescue nil
- end
-
- def save_fragment(jid, node)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- file = 'fragment/%s' % fragment_id(jid, node)
- save(file, node.to_xml)
- end
-
- def find_messages(jid)
- {}
- end
-
- def save_message(from, to, message)
- # do nothing
- end
-
- def destroy_message(id)
- # do nothing
- end
-
- private
-
- # Resolves a relative file name into an absolute path inside the
- # storage directory.
- #
- # file - A fully-qualified or relative file name String.
- #
- # Returns the fully-qualified file path String.
- #
- # Raises RuntimeError if the resolved path is outside of the storage
- # directory. This prevents directory path traversals with maliciously
- # crafted JIDs.
- def absolute_path(file)
- File.expand_path(file, @dir).tap do |absolute|
- parent = File.dirname(File.dirname(absolute))
- raise 'path traversal' unless parent == @dir
- end
- end
-
- # Read the file from the filesystem and return its contents as a String.
- # All files are assumed to be encoded as UTF-8.
- #
- # file - A fully-qualified or relative file name String.
- #
- # Returns the file content as a UTF-8 encoded String.
- def read(file)
- file = absolute_path(file)
- File.read(file, encoding: 'utf-8')
- end
-
- # Write the content to the file. Make sure to consistently encode files
- # we read and write as UTF-8.
- #
- # file - A fully-qualified or relative file name String.
- # content - The String to write.
- #
- # Returns nothing.
- def save(file, content)
- file = absolute_path(file)
- File.open(file, 'w:utf-8') {|f| f.write(content) }
- File.chmod(0600, file)
- end
-
- # Generates a unique file id for the user's private XML fragment.
- #
- # Private XML fragment storage needs to uniquely identify fragment files
- # on disk. We combine the user's JID with a SHA-1 hash of the element's
- # name and namespace to avoid special characters in the file name.
- #
- # jid - A bare JID identifying the user who owns this fragment.
- # node - A Nokogiri::XML::Node for the XML to be stored.
- #
- # Returns an id String suitable for use in a file name.
- def fragment_id(jid, node)
- id = Digest::SHA1.hexdigest("#{node.name}:#{node.namespace.href}")
- "#{jid}-#{id}"
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/null.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/null.rb
deleted file mode 100644
index d06ce59..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/null.rb
+++ /dev/null
@@ -1,51 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Storage
- # A storage implementation that does not persist data to any form of storage.
- # When looking up the storage object for a domain, it's easier to treat a
- # missing domain with a Null storage than checking for nil.
- #
- # For example, presence subscription stanzas sent to a pubsub subdomain
- # have no storage. Rather than checking for nil storage or pubsub addresses,
- # it's easier to treat stanzas to pubsub domains as Null storage that never
- # finds or saves users and their rosters.
- class Null < Storage
- def find_user(jid)
- nil
- end
-
- def save_user(user)
- # do nothing
- end
-
- def find_vcard(jid)
- nil
- end
-
- def save_vcard(jid, card)
- # do nothing
- end
-
- def find_fragment(jid, node)
- nil
- end
-
- def save_fragment(jid, node)
- # do nothing
- end
-
- def find_messages(jid)
- {}
- end
-
- def save_message(from, to, message)
- # do nothing
- end
-
- def destroy_message(id)
- # do nothing
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/sql.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/sql.rb
deleted file mode 100644
index 1ea0047..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/storage/sql.rb
+++ /dev/null
@@ -1,346 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Storage
- class Sql < Storage
- include Vines::Log
-
- register :sql
-
- class Profile < ActiveRecord::Base
- belongs_to :person
- end
- class Person < ActiveRecord::Base
- has_one :profile
-
- def local?
- !self.owner_id.nil?
- end
-
- def name(opts = {})
- self.profile.first_name.blank? && self.profile.last_name.blank? ?
- self.diaspora_handle : "#{self.profile.first_name.to_s.strip} #{self.profile.last_name.to_s.strip}".strip
- end
- end
-
- class Aspect < ActiveRecord::Base
- belongs_to :users
-
- has_many :aspect_memberships
- has_many :contacts
- end
-
- class AspectMembership < ActiveRecord::Base
- belongs_to :aspect
- belongs_to :contact
-
- has_one :users, :through => :contact
- has_one :person, :through => :contact
- end
-
- class Contact < ActiveRecord::Base
- scope :chat_enabled, -> {
- joins(:aspects)
- .where("aspects.chat_enabled = ?", true)
- .group("person_id, contacts.id")
- }
-
- belongs_to :users
- belongs_to :person
-
- has_many :aspect_memberships
- has_many :aspects, :through => :aspect_memberships
- end
-
- class User < ActiveRecord::Base
- has_many :contacts
- has_many :chat_contacts, :dependent => :destroy
- has_many :fragments, :dependent => :delete_all
-
- has_one :person, :foreign_key => :owner_id
- end
-
- class ChatOfflineMessage < ActiveRecord::Base; end
-
- class ChatContact < ActiveRecord::Base
- belongs_to :users
- end
-
- class ChatFragment < ActiveRecord::Base
- belongs_to :users
- end
-
- # Wrap the method with ActiveRecord connection pool logic, so we properly
- # return connections to the pool when we're finished with them. This also
- # defers the original method by pushing it onto the EM thread pool because
- # ActiveRecord uses blocking IO.
- def self.with_connection(method, args={})
- deferrable = args.key?(:defer) ? args[:defer] : true
- old = instance_method(method)
- define_method method do |*args|
- ActiveRecord::Base.connection_pool.with_connection do
- old.bind(self).call(*args)
- end
- end
- defer(method) if deferrable
- end
-
- def initialize(&block)
- @config = {}
- unless defined? Rails
- raise "You configured diaspora-sql adapter without Diaspora environment"
- end
-
- config = Rails.application.config.database_configuration[Rails.env]
- %w[adapter database host port username password].each do |key|
- @config[key.to_sym] = config[key]
- end
-
- required = [:adapter, :database]
- required << [:host, :port] unless @config[:adapter] == 'sqlite3'
- required.flatten.each {|key| raise "Must provide #{key}" unless @config[key] }
- [:username, :password].each {|key| @config.delete(key) if empty?(@config[key]) }
- establish_connection
- end
-
- def find_user(jid)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- xuser = user_by_jid(jid)
- return Vines::User.new(jid: jid).tap do |user|
- user.name, user.password, user.token =
- xuser.username,
- xuser.encrypted_password,
- xuser.authentication_token
-
- # add diaspora contacts
- xuser.contacts.chat_enabled.each do |contact|
- handle = contact.person.diaspora_handle
- profile = contact.person.profile
- name = "#{profile.first_name} #{profile.last_name}"
- name = handle.gsub(/\@.*?$/, '') if name.strip.empty?
- ask, subscription, groups = get_diaspora_flags(contact)
- user.roster << Vines::Contact.new(
- jid: handle,
- name: name,
- subscription: subscription,
- from_diaspora: true,
- groups: groups,
- ask: ask)
- end
-
- # add external contacts
- xuser.chat_contacts.each do |contact|
- user.roster << Vines::Contact.new(
- jid: contact.jid,
- name: contact.name,
- subscription: contact.subscription,
- groups: get_external_groups,
- ask: contact.ask)
- end
- end if xuser
- end
- with_connection :find_user
-
- def authenticate(username, password)
- user = find_user(username)
-
- pepper = "#{password}#{Devise.pepper}" rescue password
- dbhash = BCrypt::Password.new(user.password) rescue nil
- hash = BCrypt::Engine.hash_secret(pepper, dbhash.salt) rescue nil
-
- userAuth = ((hash && dbhash) && hash == dbhash)
- tokenAuth = ((password && user) && password == user.token)
- (tokenAuth || userAuth)? user : nil
- end
-
- def save_user(user)
- # it is not possible to register an account via xmpp server
- xuser = user_by_jid(user.jid) || return
-
- # remove deleted contacts from roster
- xuser.chat_contacts.delete(xuser.chat_contacts.select do |contact|
- !user.contact?(contact.jid)
- end)
-
- # update contacts
- xuser.chat_contacts.each do |contact|
- fresh = user.contact(contact.jid)
- contact.update_attributes(
- name: fresh.name,
- ask: fresh.ask,
- subscription: fresh.subscription)
- end
-
- # add new contacts to roster
- jids = xuser.chat_contacts.map {|c|
- c.jid if (c.user_id == xuser.id)
- }.compact
- user.roster.select {|contact|
- unless contact.from_diaspora
- xuser.chat_contacts.build(
- user_id: xuser.id,
- jid: contact.jid.bare.to_s,
- name: contact.name,
- ask: contact.ask,
- subscription: contact.subscription) unless jids.include?(contact.jid.bare.to_s)
- end
- }
- xuser.save
- end
- with_connection :save_user
-
- def find_vcard(jid)
- jid = JID.new(jid).bare.to_s
- return nil if jid.empty?
- person = Sql::Person.find_by_diaspora_handle(jid)
- return nil unless person.nil? || person.local?
-
- build_vcard(person)
- end
- with_connection :find_vcard
-
- def save_vcard(jid, card)
- # NOTE this is not supported. If you'd like to change your
- # vcard details you can edit it via diaspora-web-interface
- nil
- end
- with_connection :save_vcard
-
- def find_messages(jid)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- results = Hash.new
- Sql::ChatOfflineMessage.where(:to => jid).each do |r|
- results[r.id] = {
- :from => r.from,
- :to => r.to,
- :message => r.message,
- :created_at => r.created_at
- }
- end
- return results
- end
- with_connection :find_messages
-
- def save_message(from, to, msg)
- return if from.empty? || to.empty? || msg.empty?
- com = Sql::ChatOfflineMessage
- current = com.count(:to => to)
- unless current < Config.instance.max_offline_msgs
- com.where(:to => to)
- .order(created_at: :asc)
- .first
- .delete
- end
- com.create(:from => from, :to => to, :message => msg)
- end
- with_connection :save_message
-
- def destroy_message(id)
- id = id.to_i rescue nil
- return if id.nil?
- Sql::ChatOfflineMessage.find(id).destroy
- end
- with_connection :destroy_message
-
- def find_fragment(jid, node)
- jid = JID.new(jid).bare.to_s
- return if jid.empty?
- if fragment = fragment_by_jid(jid, node)
- Nokogiri::XML(fragment.xml).root rescue nil
- end
- end
- with_connection :find_fragment
-
- def save_fragment(jid, node)
- jid = JID.new(jid).bare.to_s
- fragment = fragment_by_jid(jid, node) ||
- Sql::ChatFragment.new(
- user: user_by_jid(jid),
- root: node.name,
- namespace: node.namespace.href)
- fragment.xml = node.to_xml
- fragment.save
- end
- with_connection :save_fragment
-
- def find_avatar_by_jid(jid)
- jid = JID.new(jid).bare.to_s
- return nil if jid.empty?
-
- person = Sql::Person.find_by_diaspora_handle(jid)
- return nil if person.nil?
- return nil if person.profile.nil?
- return nil unless person.local?
- person.profile.image_url
- end
- with_connection :find_avatar_by_jid
-
- private
- def establish_connection
- ActiveRecord::Base.logger = log # using vines logger
- ActiveRecord::Base.establish_connection(@config)
- end
-
- def user_by_jid(jid)
- name = JID.new(jid).node
- Sql::User.find_by_username(name)
- end
-
- def get_external_groups
- # TODO Make the group name configurable by the user
- # https://github.com/diaspora/vines/issues/39
- group_name = "External XMPP Contacts"
- matches = Sql::Aspect.where(:name => group_name).count
- if matches > 0
- group_name = "#{group_name} (#{matches + 1})"
- end
- [ group_name ]
- end
-
- def fragment_by_jid(jid, node)
- jid = JID.new(jid).bare.to_s
- clause = 'user_id=(select id from users where jid=?) and root=? and namespace=?'
- Sql::ChatFragment.where(clause, jid, node.name, node.namespace.href).first
- end
-
- def build_vcard(person)
- builder = Nokogiri::XML::Builder.new
- builder.vCard('xmlns' => 'vcard-temp') do |xml|
- xml.send(:"FN", person.name) if person.name
- xml.send(:"N") do |sub|
- sub.send(:"FAMILY", person.profile.last_name) if person.profile.last_name
- sub.send(:"GIVEN", person.profile.first_name) if person.profile.first_name
- end if (person.profile.last_name? || person.profile.first_name?)
- xml.send(:"URL", person.url) if person.url
- xml.send(:"PHOTO") do |sub|
- sub.send(:"EXTVAL", person.profile.image_url)
- end if person.profile.image_url
- end
-
- builder.to_xml :save_with => Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
- end
-
- def get_diaspora_flags(contact)
- groups = Array.new
- ask, subscription = 'none', 'none'
- contact.aspects.each do |aspect|
- groups.push(aspect.name)
- end
-
- if contact.sharing && contact.receiving
- subscription = 'both'
- elsif contact.sharing && !contact.receiving
- ask = 'suscribe'
- subscription = 'from'
- elsif !contact.sharing && contact.receiving
- subscription = 'to'
- else
- ask = 'suscribe'
- end
- return ask, subscription, groups
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/store.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/store.rb
deleted file mode 100644
index 6b1fdb6..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/store.rb
+++ /dev/null
@@ -1,152 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- # An X509 certificate store that validates certificate trust chains.
- # This uses the conf/certs/*.crt files as the list of trusted root
- # CA certificates.
- class Store
- include Vines::Log
- @@sources = nil
-
- # Create a certificate store to read certificate files from the given
- # directory.
- #
- # dir - The String directory name (absolute or relative).
- def initialize(dir)
- @dir = File.expand_path(dir)
- @store = OpenSSL::X509::Store.new
- certs.each {|cert| append(cert) }
- end
-
- # Return true if the certificate is signed by a CA certificate in the
- # store. If the certificate can be trusted, it's added to the store so
- # it can be used to trust other certs.
- #
- # pem - The PEM encoded certificate String.
- #
- # Returns true if the certificate is trusted.
- def trusted?(pem)
- if cert = OpenSSL::X509::Certificate.new(pem) rescue nil
- @store.verify(cert).tap do |trusted|
- append(cert) if trusted
- end
- end
- end
-
- # Return true if the domain name matches one of the names in the
- # certificate. In other words, is the certificate provided to us really
- # for the domain to which we think we're connected?
- #
- # pem - The PEM encoded certificate String.
- # domain - The domain name String.
- #
- # Returns true if the certificate was issued for the domain.
- def domain?(pem, domain)
- if cert = OpenSSL::X509::Certificate.new(pem) rescue nil
- OpenSSL::SSL.verify_certificate_identity(cert, domain) rescue false
- end
- end
-
- # Return the trusted root CA certificates installed in conf/certs. These
- # certificates are used to start the trust chain needed to validate certs
- # we receive from clients and servers.
- #
- # Returns an Array of OpenSSL::X509::Certificate objects.
- def certs
- @@sources ||= begin
- pattern = /-{5}BEGIN CERTIFICATE-{5}\n.*?-{5}END CERTIFICATE-{5}\n/m
- files = Dir[File.join(@dir, '*.crt')]
- if defined?(AppConfig)
- chain = AppConfig.environment.certificate_authorities.get
- files << chain unless chain.nil?
- end
- pairs = files.map do |name|
- begin
- File.open(name, "r:UTF-8") do |f|
- pems = f.read.scan(pattern)
- certs = pems.map {|pem| OpenSSL::X509::Certificate.new(pem) }
- certs.reject! {|cert| cert.not_after < Time.now }
- [name, certs]
- end
- rescue ArgumentError => e
- log.error("Skipping '#{name}' cause of '#{e.message.to_s}'! "+
- "Checkout https://wiki.diasporafoundation.org/Vines#FAQ "+
- "for further instructions.")
- end
- end
- Hash[pairs.compact]
- end
- @@sources.values.flatten
- end
-
- # Returns a pair of file names containing the public key certificate
- # and matching private key for the given domain. This supports using
- # wildcard certificate files to serve several subdomains.
- #
- # Finding the certificate and private key file for a domain follows these steps:
- #
- # - Look for <domain>.crt and <domain>.key files in the conf/certs
- # directory. If found, return those file names, otherwise . . .
- #
- # - Inspect all conf/certs/*.crt files for certificates that contain the
- # domain name either as the subject common name (CN) or as a DNS
- # subjectAltName. The corresponding private key must be in a file of the
- # same name as the certificate's, but with a .key extension.
- #
- # So in the simplest configuration, the tea.wonderland.lit encryption files
- # would be named:
- #
- # - conf/certs/tea.wonderland.lit.crt
- # - conf/certs/tea.wonderland.lit.key
- #
- # However, in the case of a wildcard certificate for *.wonderland.lit,
- # the files would be:
- #
- # - conf/certs/wonderland.lit.crt
- # - conf/certs/wonderland.lit.key
- #
- # These same two files would be returned for the subdomains of:
- #
- # - tea.wonderland.lit
- # - crumpets.wonderland.lit
- # - etc.
- #
- # domain - The String domain name.
- #
- # Returns a two element String array for the certificate and private key
- # file names or nil if not found.
- def files_for_domain(domain)
- crt = File.expand_path("#{domain}.crt", @dir)
- key = File.expand_path("#{domain}.key", @dir)
- return [crt, key] if File.exists?(crt) && File.exists?(key)
-
- # Might be a wildcard cert file.
- @@sources.each do |file, certs|
- certs.each do |cert|
- if OpenSSL::SSL.verify_certificate_identity(cert, domain)
- key = file.chomp(File.extname(file)) + '.key'
- return [file, key] if File.exists?(file) && File.exists?(key)
- end
- end
- end
- log.error("Your're using vines without a certificate! "+
- "Checkout https://wiki.diasporafoundation.org/Vines#Certificates "+
- "for further instructions.")
- nil
- end
-
- private
-
- # Add a trusted certificate to the store, suppressing any OpenSSL errors
- # caused by the certificate already being stored.
- #
- # cert - The OpenSSL::X509::Certificate to add.
- #
- # Returns nothing.
- def append(cert)
- @store.add_cert(cert)
- rescue OpenSSL::X509::StoreError
- # Already added to store.
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream.rb
deleted file mode 100644
index bd322bd..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream.rb
+++ /dev/null
@@ -1,309 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- # The base class for various XMPP streams (c2s, s2s, component, http),
- # containing behavior common to all streams like rate limiting, stanza
- # parsing, and stream error handling.
- class Stream < EventMachine::Connection
- include Vines::Log
-
- ERROR = 'error'.freeze
- STREAM = 'stream'.freeze
- PAD = 20
-
- attr_reader :config, :domain, :id, :state
- attr_accessor :user
-
- def initialize(config)
- @config = config
- end
-
- # Initialize the stream after its connection to the server has completed.
- # EventMachine calls this method when an incoming connection is accepted
- # into the event loop.
- #
- # Returns nothing.
- def post_init
- @remote_addr, @local_addr = addresses
- @user, @closed, @stanza_size = nil, false, 0
- @bucket = TokenBucket.new(100, 10)
- @store = Store.new(@config.certs)
- @nodes = EM::Queue.new
- process_node_queue
- create_parser
- log.info { "%s %21s -> %s" %
- ['Stream connected:'.ljust(PAD), @remote_addr, @local_addr] }
- end
-
- # Initialize a new XML parser for this connection. This is called when the
- # stream is first connected as well as for stream restarts during
- # negotiation. Subclasses can override this method to provide a different
- # type of parser (e.g. HTTP).
- #
- # Returns nothing.
- def create_parser
- @parser = Parser.new.tap do |parser|
- parser.stream_open {|node| @nodes.push(node) }
- parser.stream_close { close_connection }
- parser.stanza {|node| @nodes.push(node) }
- end
- end
-
- # Advance the state machine into the `Closed` state so any remaining queued
- # nodes are not processed while we're waiting for EM to actually close the
- # connection.
- #
- # Returns nothing.
- def close_connection(after_writing=false)
- super
- @closed = true
- advance(Client::Closed.new(self))
- end
-
- # Read bytes off the stream and feed them into the XML parser. EventMachine
- # is responsible for calling this method on its event loop as connections
- # become readable.
- #
- # data - The byte String sent to the server from the client, hopefully XML.
- #
- # Returns nothing.
- def receive_data(data)
- return if @closed
- @stanza_size += data.bytesize
- if @stanza_size < max_stanza_size
- @parser << data rescue error(StreamErrors::NotWellFormed.new)
- else
- error(StreamErrors::PolicyViolation.new('max stanza size reached'))
- end
- end
-
- # Reset the connection's XML parser when a new <stream:stream> header
- # is received.
- #
- # Returns nothing.
- def reset
- create_parser
- end
-
- # Returns the storage system for the domain. If no domain is given,
- # the stream's storage mechanism is returned.
- def storage(domain=nil)
- @config.storage(domain || self.domain)
- end
-
- # Returns the Config::Host virtual host for the stream's domain.
- def vhost
- @config.vhost(domain)
- end
-
- # Reload the user's information into their active connections. Call this
- # after storage.save_user() to sync the new user state with their other
- # connections.
- #
- # user - The User whose connection info needs refreshing.
- #
- # Returns nothing.
- def update_user_streams(user)
- connected_resources(user.jid.bare).each do |stream|
- stream.user.update_from(user)
- end
- end
-
- def connected_resources(jid)
- router.connected_resources(jid, user.jid)
- end
-
- def available_resources(*jid)
- router.available_resources(*jid, user.jid)
- end
-
- def interested_resources(*jid)
- router.interested_resources(*jid, user.jid)
- end
-
- def ssl_verify_peer(pem)
- # Skip verifying if user accept self-signed certificates
- return true if self.vhost.accept_self_signed?
- # EM is supposed to close the connection when this returns false,
- # but it only does that for inbound connections, not when we
- # make a connection to another server.
- @store.trusted?(pem).tap do |trusted|
- close_connection unless trusted
- end
- end
-
- def cert_domain_matches?(domain)
- @store.domain?(get_peer_cert, domain)
- end
-
- # Send the data over the wire to this client.
- #
- # data - The XML String or XML::Node to write to the socket.
- #
- # Returns nothing.
- def write(data)
- log_node(data, :out)
- if data.respond_to?(:to_xml)
- data = data.to_xml(:indent => 0)
- end
- send_data(data)
- end
-
- def encrypt
- cert, key = @store.files_for_domain(domain)
- start_tls(cert_chain_file: cert, private_key_file: key, verify_peer: true)
- end
-
- # Returns true if the TLS certificate and private key files for this domain
- # exist and can be used to encrypt this stream.
- def encrypt?
- !@store.files_for_domain(domain).nil?
- end
-
- def unbind
- router.delete(self)
- log.info { "%s %21s -> %s" %
- ['Stream disconnected:'.ljust(PAD), @remote_addr, @local_addr] }
- log.info { "Streams connected: #{router.size}" }
- end
-
- # Advance the stream's state machine to the new state. XML nodes received
- # by the stream will be passed to this state's `node` method.
- #
- # state - The Stream::State to process the stanzas next.
- #
- # Returns the new Stream::State.
- def advance(state)
- @state = state
- end
-
- # Stream level errors close the stream while stanza and SASL errors are
- # written to the client and leave the stream open. All exceptions should
- # pass through this method for consistent handling.
- #
- # e - The StandardError, usually XmppError, that occurred.
- #
- # Returns nothing.
- def error(e)
- case e
- when SaslError, StanzaError
- write(e.to_xml)
- when StreamError
- send_stream_error(e)
- close_stream
- else
- log.error(e)
- send_stream_error(StreamErrors::InternalServerError.new)
- close_stream
- end
- end
-
- def router
- @config.router
- end
-
- private
-
- # Determine the remote and local socket addresses used by this connection.
- #
- # Returns a two-element Array of String addresses.
- def addresses
- [get_peername, get_sockname].map do |addr|
- addr ? Socket.unpack_sockaddr_in(addr)[0, 2].reverse.join(':') : 'unknown'
- end
- end
-
- # Write the StreamError's xml to the stream. Subclasses can override
- # this method with custom error writing behavior.
- #
- # A call to `close_stream` should follow this method. Stream level errors
- # are fatal to the connection.
- #
- # e - The StreamError that caused the connection to close.
- #
- # Returns nothing.
- def send_stream_error(e)
- write(e.to_xml)
- end
-
- # Write a closing stream tag and close the connection. Subclasses can
- # override this method for custom close behavior.
- #
- # Returns nothing.
- def close_stream
- write('</stream:stream>')
- close_connection_after_writing
- end
-
- def error?(node)
- ns = node.namespace ? node.namespace.href : nil
- node.name == ERROR && ns == NAMESPACES[:stream]
- end
-
- # Schedule a queue pop on the EM thread to handle the next element. This
- # guarantees all stanzas received on this stream are processed in order.
- #
- # http://tools.ietf.org/html/rfc6120#section-10.1
- #
- # Once a node is processed, this method recursively schedules itself to pop
- # the next node and so on. A single call to this method effectively begins
- # an asynchronous node processing loop.
- #
- # Returns nothing.
- def process_node_queue
- @nodes.pop do |node|
- Fiber.new do
- process_node(node)
- process_node_queue
- end.resume unless @closed
- end
- end
-
- def process_node(node)
- log_node(node, :in)
- @stanza_size = 0
- enforce_rate_limit
- if error?(node)
- close_stream
- else
- update_stream_id(node)
- state.node(node)
- end
- rescue => e
- error(e)
- end
-
- def enforce_rate_limit
- unless @bucket.take(1)
- raise StreamErrors::PolicyViolation.new('rate limit exceeded')
- end
- end
-
- def log_node(node, direction)
- return unless log.debug?
- from, to = @remote_addr, @local_addr
- from, to = to, from if direction == :out
- label = (direction == :out) ? 'Sent' : 'Received'
- log.debug("%s %21s -> %s\n%s\n" %
- ["#{label} stanza:".ljust(PAD), from, to, node])
- end
-
- # Determine if this is a valid domain-only JID that can be used in
- # stream initiation stanza headers.
- #
- # jid - The String or JID to verify (e.g. 'wonderland.lit').
- #
- # Return true if the jid is domain-only.
- def valid_address?(jid)
- JID.new(jid).domain? rescue false
- end
-
- def update_stream_id(id_or_node)
- if id_or_node.is_a? String
- @id = id_or_node.freeze
- elsif Node.stream?(id_or_node) # move stream? method somewhere else?
- @id = id_or_node['id'].freeze
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client.rb
deleted file mode 100644
index ead9709..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- # Implements the XMPP protocol for client-to-server (c2s) streams. This
- # serves connected streams using the jabber:client namespace.
- class Client < Stream
- MECHANISMS = %w[PLAIN].freeze
-
- def initialize(config)
- super
- @session = Client::Session.new(self)
- end
-
- # Delegate behavior to the session that's storing our stream state.
- def method_missing(name, *args)
- @session.send(name, *args)
- end
-
- %w[advance domain state user user=].each do |name|
- define_method name do |*args|
- @session.send(name, *args)
- end
- end
-
- %w[max_stanza_size max_resources_per_account].each do |name|
- define_method name do |*args|
- config[:client].send(name, *args)
- end
- end
-
- # Return an array of allowed authentication mechanisms advertised as
- # client stream features.
- def authentication_mechanisms
- MECHANISMS
- end
-
- def ssl_handshake_completed
- if get_peer_cert
- close_connection unless cert_domain_matches?(@session.domain)
- end
- end
-
- def unbind
- @session.unbind!(self)
- super
- end
-
- def start(node)
- to, from = %w[to from].map {|a| node[a] }
- @session.domain = to unless @session.domain
- send_stream_header(from)
- raise StreamErrors::NotAuthorized if domain_change?(to)
- raise StreamErrors::UnsupportedVersion unless node['version'] == '1.0'
- raise StreamErrors::ImproperAddressing unless valid_address?(@session.domain)
- raise StreamErrors::HostUnknown unless config.vhost?(@session.domain)
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns'] == NAMESPACES[:client]
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns:stream'] == NAMESPACES[:stream]
- end
-
- private
-
- # The `to` domain address set on the initial stream header must not change
- # during stream restarts. This prevents a user from authenticating in one
- # domain, then using a stream in a different domain.
- #
- # to - The String domain JID to verify (e.g. 'wonderland.lit').
- #
- # Returns true if the client connection is misbehaving and should be closed.
- def domain_change?(to)
- to != @session.domain
- end
-
- def send_stream_header(to)
- attrs = {
- 'xmlns' => NAMESPACES[:client],
- 'xmlns:stream' => NAMESPACES[:stream],
- 'xml:lang' => 'en',
- 'id' => Kit.uuid,
- 'from' => @session.domain,
- 'version' => '1.0'
- }
- attrs['to'] = to if to
- write "<stream:stream %s>" % attrs.to_a.map{|k,v| "#{k}='#{v}'"}.join(' ')
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/auth.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/auth.rb
deleted file mode 100644
index cdc2419..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/auth.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class Auth < State
- NS = NAMESPACES[:sasl]
- MECHANISM = 'mechanism'.freeze
- AUTH = 'auth'.freeze
- PLAIN = 'PLAIN'.freeze
- EXTERNAL = 'EXTERNAL'.freeze
- SUCCESS = %Q{<success xmlns="#{NS}"/>}.freeze
- MAX_AUTH_ATTEMPTS = 3
-
- def initialize(stream, success=BindRestart)
- super
- @attempts = 0
- @sasl = SASL.new(stream)
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless auth?(node)
- if node.text.empty?
- send_auth_fail(SaslErrors::MalformedRequest.new)
- elsif stream.authentication_mechanisms.include?(node[MECHANISM])
- case node[MECHANISM]
- when PLAIN then plain_auth(node)
- when EXTERNAL then external_auth(node)
- end
- else
- send_auth_fail(SaslErrors::InvalidMechanism.new)
- end
- end
-
- private
-
- def auth?(node)
- node.name == AUTH && namespace(node) == NS
- end
-
- def plain_auth(node)
- stream.user = @sasl.plain_auth(node.text)
- send_auth_success
- rescue => e
- send_auth_fail(e)
- end
-
- def external_auth(node)
- @sasl.external_auth(node.text)
- send_auth_success
- rescue => e
- send_auth_fail(e)
- stream.write('</stream:stream>')
- stream.close_connection_after_writing
- end
-
- def send_auth_success
- stream.write(SUCCESS)
- stream.reset
- advance
- end
-
- def send_auth_fail(condition)
- @attempts += 1
- if @attempts >= MAX_AUTH_ATTEMPTS
- stream.error(StreamErrors::PolicyViolation.new("max authentication attempts exceeded"))
- else
- stream.error(condition)
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/auth_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/auth_restart.rb
deleted file mode 100644
index c53f53e..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/auth_restart.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class AuthRestart < State
- def initialize(stream, success=Auth)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- doc = Document.new
- features = doc.create_element('stream:features') do |el|
- el << doc.create_element('mechanisms') do |parent|
- parent.default_namespace = NAMESPACES[:sasl]
- stream.authentication_mechanisms.each do |name|
- parent << doc.create_element('mechanism', name)
- end
- end
- end
- stream.write(features)
- advance
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/bind.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/bind.rb
deleted file mode 100644
index c90a952..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/bind.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class Bind < State
- NS = NAMESPACES[:bind]
- MAX_ATTEMPTS = 5
-
- def initialize(stream, success=Ready)
- super
- @attempts = 0
- end
-
- def node(node)
- @attempts += 1
- raise StreamErrors::NotAuthorized unless bind?(node)
- raise StreamErrors::PolicyViolation.new('max bind attempts reached') if @attempts > MAX_ATTEMPTS
- raise StanzaErrors::ResourceConstraint.new(node, 'wait') if resource_limit_reached?
-
- stream.bind!(resource(node))
- doc = Document.new
- result = doc.create_element('iq', 'id' => node['id'], 'type' => 'result') do |el|
- el << doc.create_element('bind') do |bind|
- bind.default_namespace = NS
- bind << doc.create_element('jid', stream.user.jid.to_s)
- end
- end
- stream.write(result)
- advance
- end
-
- private
-
- def bind?(node)
- node.name == 'iq' && node['type'] == 'set' && node.xpath('ns:bind', 'ns' => NS).any?
- end
-
- def resource(node)
- el = node.xpath('ns:bind/ns:resource', 'ns' => NS).first
- resource = el ? el.text.strip : ''
- generate = resource.empty? || !resource_valid?(resource) || resource_used?(resource)
- generate ? Kit.uuid : resource
- end
-
- def resource_limit_reached?
- used = stream.connected_resources(stream.user.jid.bare).size
- used >= stream.max_resources_per_account
- end
-
- def resource_used?(resource)
- stream.available_resources(stream.user.jid).any? do |c|
- c.user.jid.resource == resource
- end
- end
-
- def resource_valid?(resource)
- jid = stream.user.jid
- JID.new(jid.node, jid.domain, resource) rescue false
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/bind_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/bind_restart.rb
deleted file mode 100644
index 3aa6445..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/bind_restart.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class BindRestart < State
- def initialize(stream, success=Bind)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- doc = Document.new
- features = doc.create_element('stream:features') do |el|
- # Session support is deprecated, but like we do it for Adium
- # in the iq-session-stanza we have to serve the feature for Xabber.
- # Otherwise it will disconnect after authentication!
- el << doc.create_element('session', 'xmlns' => NAMESPACES[:session]) do |session|
- session << doc.create_element('optional')
- end
- el << doc.create_element('bind', 'xmlns' => NAMESPACES[:bind])
- end
- stream.write(features)
- advance
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/closed.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/closed.rb
deleted file mode 100644
index 3882ecf..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/closed.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class Closed < State
- def node(node)
- # ignore data received after close_connection
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/ready.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/ready.rb
deleted file mode 100644
index 8dd5d82..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/ready.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class Ready < State
- def node(node)
- stanza = to_stanza(node)
- raise StreamErrors::UnsupportedStanzaType unless stanza
- stanza.validate_to
- stanza.validate_from
- stanza.process
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/session.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/session.rb
deleted file mode 100644
index ac8456b..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/session.rb
+++ /dev/null
@@ -1,210 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- # A Session tracks the state of a client stream over its lifetime from
- # negotiation to processing stanzas to shutdown. By disconnecting the
- # stream's state from the stream, we can allow multiple TCP connections
- # to access one logical session (e.g. HTTP streams).
- class Session
- include Comparable
-
- attr_accessor :domain, :user
- attr_reader :id, :last_broadcast_presence, :state
-
- def initialize(stream)
- @stream = stream
- @id = Kit.uuid
- @config = stream.config
- @state = Client::Start.new(stream)
- @available = false
- @domain = nil
- @last_broadcast_presence = nil
- @requested_roster = false
- @unbound = false
- @user = nil
- end
-
- def <=>(session)
- session.is_a?(Session) ? self.id <=> session.id : nil
- end
-
- alias :eql? :==
-
- def hash
- @id.hash
- end
-
- def advance(state)
- @state = state
- end
-
- # Returns true if this client has properly authenticated with
- # the server.
- def authenticated?
- !@user.nil?
- end
-
- # Notify the session that the client has sent an initial presence
- # broadcast and is now considered to be an "available" resource.
- # Available resources are sent presence subscription stanzas.
- def available!
- @available = true
- save_to_cluster
- end
-
- # An available resource has sent initial presence and can
- # receive presence subscription requests.
- def available?
- @available && connected?
- end
-
- # Complete resource binding with the given resource name, provided by the
- # client or generated by the server. Once resource binding is completed,
- # the stream is considered to be "connected" and ready for traffic.
- def bind!(resource)
- @user.jid.resource = resource
- router << self
- save_to_cluster
- end
-
- # A connected resource has authenticated and bound a resource
- # identifier.
- def connected?
- !@unbound && authenticated? && !@user.jid.bare?
- end
-
- # An interested resource has requested its roster and can
- # receive roster pushes.
- def interested?
- @requested_roster && connected?
- end
-
- def last_broadcast_presence=(node)
- @last_broadcast_presence = node
- save_to_cluster
- end
-
- def ready?
- @state.class == Client::Ready
- end
-
- # Notify the session that the client has requested its roster and is now
- # considered to be an "interested" resource. Interested resources are sent
- # roster pushes when changes are made to their contacts.
- def requested_roster!
- @requested_roster = true
- save_to_cluster
- end
-
- def stream_type
- :client
- end
-
- def write(data)
- @stream.write(data)
- end
-
- # Called by the stream when it's disconnected from the client. The stream
- # passes itself to this method in case multiple streams are accessing this
- # session (e.g. BOSH/HTTP).
- def unbind!(stream)
- router.delete(self)
- delete_from_cluster
- unsubscribe_pubsub
- @unbound = true
- @available = false
- broadcast_unavailable
- end
-
- # Returns streams for available resources to which this user
- # has successfully subscribed.
- def available_subscribed_to_resources
- subscribed = @user.subscribed_to_contacts.map {|c| c.jid }
- router.available_resources(subscribed, @user.jid)
- end
-
- # Returns streams for available resources that are subscribed
- # to this user's presence updates.
- def available_subscribers
- subscribed = @user.subscribed_from_contacts.map {|c| c.jid }
- router.available_resources(subscribed, @user.jid)
- end
-
- # Returns contacts hosted at remote servers to which this user has
- # successfully subscribed.
- def remote_subscribed_to_contacts
- @user.subscribed_to_contacts.reject do |c|
- @config.local_jid?(c.jid)
- end
- end
-
- # Returns contacts hosted at remote servers that are subscribed
- # to this user's presence updates.
- def remote_subscribers(to=nil)
- jid = (to.nil? || to.empty?) ? nil : JID.new(to).bare
- @user.subscribed_from_contacts.reject do |c|
- @config.local_jid?(c.jid) || (jid && c.jid.bare != jid)
- end
- end
-
- private
-
- def broadcast_unavailable
- return unless authenticated?
- Fiber.new do
- broadcast(unavailable, available_subscribers)
- broadcast(unavailable, router.available_resources(@user.jid, @user.jid))
- remote_subscribers.each do |contact|
- node = unavailable
- node['to'] = contact.jid.bare.to_s
- router.route(node) rescue nil # ignore RemoteServerNotFound
- end
- end.resume
- end
-
- def unavailable
- doc = Nokogiri::XML::Document.new
- doc.create_element('presence',
- 'from' => @user.jid.to_s,
- 'type' => 'unavailable')
- end
-
- def broadcast(stanza, recipients)
- recipients.each do |recipient|
- stanza['to'] = recipient.user.jid.to_s
- recipient.write(stanza)
- end
- end
-
- def router
- @config.router
- end
-
- def save_to_cluster
- if @config.cluster?
- @config.cluster.save_session(@user.jid, to_hash)
- end
- end
-
- def delete_from_cluster
- if connected? && @config.cluster?
- @config.cluster.delete_session(@user.jid)
- end
- end
-
- def unsubscribe_pubsub
- if connected?
- @config.vhost(@user.jid.domain).unsubscribe_pubsub(@user.jid)
- end
- end
-
- def to_hash
- presence = @last_broadcast_presence ? @last_broadcast_presence.to_s : nil
- {available: @available, interested: @requested_roster, presence: presence.to_s}
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/start.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/start.rb
deleted file mode 100644
index 6f18c30..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/start.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class Start < State
- def initialize(stream, success=TLS)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- doc = Document.new
- features = doc.create_element('stream:features') do |el|
- el << doc.create_element('starttls') do |tls|
- tls.default_namespace = NAMESPACES[:tls]
- tls << doc.create_element('required')
- end
- end
- stream.write(features)
- advance
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/tls.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/tls.rb
deleted file mode 100644
index bc9c371..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/client/tls.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Client
- class TLS < State
- NS = NAMESPACES[:tls]
- PROCEED = %Q{<proceed xmlns="#{NS}"/>}.freeze
- FAILURE = %Q{<failure xmlns="#{NS}"/>}.freeze
- STARTTLS = 'starttls'.freeze
-
- def initialize(stream, success=AuthRestart)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless starttls?(node)
- if stream.encrypt?
- stream.write(PROCEED)
- stream.encrypt
- stream.reset
- advance
- else
- stream.write(FAILURE)
- stream.write('</stream:stream>')
- stream.close_connection_after_writing
- end
- end
-
- private
-
- def starttls?(node)
- node.name == STARTTLS && namespace(node) == NS
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component.rb
deleted file mode 100644
index 9978483..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
-
- # Implements the XMPP protocol for trusted, external component (XEP-0114)
- # streams. This serves connected streams using the jabber:component:accept
- # namespace.
- class Component < Stream
- attr_reader :remote_domain
-
- def initialize(config)
- super
- @remote_domain = nil
- @stream_id = Kit.uuid
- advance(Start.new(self))
- end
-
- def max_stanza_size
- config[:component].max_stanza_size
- end
-
- def ready?
- state.class == Component::Ready
- end
-
- def stream_type
- :component
- end
-
- def start(node)
- @remote_domain = node['to']
- send_stream_header
- raise StreamErrors::ImproperAddressing unless valid_address?(@remote_domain)
- raise StreamErrors::HostUnknown unless config.component?(@remote_domain)
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns'] == NAMESPACES[:component]
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns:stream'] == NAMESPACES[:stream]
- end
-
- def secret
- password = config.component_password(@remote_domain)
- Digest::SHA1.hexdigest(@stream_id + password)
- end
-
- private
-
- def send_stream_header
- attrs = {
- 'xmlns' => NAMESPACES[:component],
- 'xmlns:stream' => NAMESPACES[:stream],
- 'id' => @stream_id,
- 'from' => @remote_domain
- }
- write "<stream:stream %s>" % attrs.to_a.map{|k,v| "#{k}='#{v}'"}.join(' ')
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/handshake.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/handshake.rb
deleted file mode 100644
index 93948cc..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/handshake.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Component
- class Handshake < State
- def initialize(stream, success=Ready)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless handshake?(node)
- stream.write('<handshake/>')
- stream.router << stream
- advance
- end
-
- private
-
- def handshake?(node)
- node.name == 'handshake' && node.text == stream.secret
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/ready.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/ready.rb
deleted file mode 100644
index fe2eac9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/ready.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Component
- class Ready < State
- def node(node)
- stanza = to_stanza(node)
- raise StreamErrors::UnsupportedStanzaType unless stanza
- to, from = stanza.validate_to, stanza.validate_from
- raise StreamErrors::ImproperAddressing unless to && from
- raise StreamErrors::InvalidFrom unless from.domain == stream.remote_domain
- stream.user = User.new(jid: from)
- if stanza.local? || stanza.to_pubsub_domain?
- stanza.process
- else
- stanza.route
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/start.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/start.rb
deleted file mode 100644
index a948623..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/component/start.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Component
- class Start < State
- def initialize(stream, success=Handshake)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- advance
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http.rb
deleted file mode 100644
index f3b4bb9..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http.rb
+++ /dev/null
@@ -1,185 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http < Client
- attr_accessor :session
-
- def initialize(config)
- super
- @session = Http::Session.new(self)
- end
-
- # Override Stream#create_parser to provide an HTTP parser rather than
- # a Nokogiri XML parser.
- #
- # Returns nothing.
- def create_parser
- @parser = ::Http::Parser.new.tap do |parser|
- body = ''
- parser.on_body = proc {|data| body << data }
- parser.on_message_complete = proc do
- process_request(Request.new(self, @parser, body))
- body = ''
- end
- end
- end
-
- # If the session ID is valid, switch this stream's session to the new
- # ID and return true. Some clients, like Google Chrome, reuse one stream
- # for multiple sessions.
- #
- # sid - The String session ID.
- #
- # Returns true if the server previously distributed this SID to a client.
- def valid_session?(sid)
- if session = Sessions[sid]
- @session = session
- end
- !!session
- end
-
- %w[max_stanza_size max_resources_per_account bind root].each do |name|
- define_method name do |*args|
- config[:http].send(name, *args)
- end
- end
-
- def process_request(request)
- if request.method == 'POST'
- if request.path == self.bind && request.options?
- request.reply_to_options
- elsif request.path == self.bind
- body = Nokogiri::XML(request.body).root
- if session = Sessions[body['sid']]
- @session = session
- else
- @session = Http::Session.new(self)
- end
- @session.request(request)
- @nodes.push(body)
- end
- else
- request.reply('It works!', 'text/plain')
- end
- end
-
- # Alias the Stream#write method before overriding it so we can call
- # it later from a Session instance.
- alias :stream_write :write
-
- # Override Stream#write to queue stanzas rather than immediately writing
- # to the stream. Stanza responses must be paired with a queued request.
- #
- # If a request is not waiting, the written stanzas will buffer until they
- # can be sent in the next response.
- #
- # data - The XML String or XML::Node to write to the HTTP socket.
- #
- # Returns nothing.
- def write(data)
- @session.write(data)
- end
-
- # Parse the one or more stanzas from a single body element. BOSH clients
- # buffer stanzas sent in quick succession, and send them as a bundle, to
- # save on the request/response cycle.
- #
- # TODO This parses the XML again just to strip namespaces. Figure out
- # Nokogiri namespace handling instead.
- #
- # body - The XML::Node containing the BOSH `body` element.
- #
- # Returns an Array of XML::Node stanzas.
- def parse_body(body)
- body.namespace = nil
- body.elements.map do |node|
- Nokogiri::XML(node.to_s.sub(' xmlns="jabber:client"', '')).root
- end
- end
-
- def start(node)
- domain, type, hold, wait, rid = %w[to content hold wait rid].map {|a| (node[a] || '').strip }
- version = node.attribute_with_ns('version', NAMESPACES[:bosh]).value rescue nil
-
- @session.inactivity = 20
- @session.domain = domain
- @session.content_type = type unless type.empty?
- @session.hold = hold.to_i unless hold.empty?
- @session.wait = wait.to_i unless wait.empty?
-
- raise StreamErrors::UndefinedCondition.new('rid required') if rid.empty?
- raise StreamErrors::UnsupportedVersion unless version == '1.0'
- raise StreamErrors::ImproperAddressing unless valid_address?(domain)
- raise StreamErrors::HostUnknown unless config.vhost?(domain)
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns'] == NAMESPACES[:http_bind]
-
- Sessions[@session.id] = @session
- send_stream_header
- end
-
- def terminate
- doc = Nokogiri::XML::Document.new
- node = doc.create_element('body',
- 'type' => 'terminate',
- 'xmlns' => NAMESPACES[:http_bind])
- @session.reply(node)
- close_stream
- end
-
- private
-
- def send_stream_header
- doc = Nokogiri::XML::Document.new
- node = doc.create_element('body',
- 'charsets' => 'UTF-8',
- 'from' => @session.domain,
- 'hold' => @session.hold,
- 'inactivity' => @session.inactivity,
- 'polling' => '5',
- 'requests' => '2',
- 'sid' => @session.id,
- 'ver' => '1.6',
- 'wait' => @session.wait,
- 'xmpp:version' => '1.0',
- 'xmlns' => NAMESPACES[:http_bind],
- 'xmlns:xmpp' => NAMESPACES[:bosh],
- 'xmlns:stream' => NAMESPACES[:stream])
-
- node << doc.create_element('stream:features') do |el|
- el << doc.create_element('mechanisms') do |mechanisms|
- mechanisms.default_namespace = NAMESPACES[:sasl]
- mechanisms << doc.create_element('mechanism', 'PLAIN')
- end
- end
- @session.reply(node)
- end
-
- # Override Stream#send_stream_error to wrap the error XML in a BOSH
- # terminate body tag.
- #
- # e - The StreamError that caused the connection to close.
- #
- # Returns nothing.
- def send_stream_error(e)
- doc = Nokogiri::XML::Document.new
- node = doc.create_element('body',
- 'condition' => 'remote-stream-error',
- 'type' => 'terminate',
- 'xmlns' => NAMESPACES[:http_bind],
- 'xmlns:stream' => NAMESPACES[:stream])
- node.inner_html = e.to_xml
- @session.reply(node)
- end
-
- # Override Stream#close_stream to simply close the connection without
- # writing a closing stream tag.
- #
- # Returns nothing.
- def close_stream
- close_connection_after_writing
- @session.close
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/auth.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/auth.rb
deleted file mode 100644
index cbf1aa7..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/auth.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class Auth < Client::Auth
- def initialize(stream, success=BindRestart)
- super
- end
-
- def node(node)
- unless stream.valid_session?(node['sid']) && body?(node) && node['rid']
- raise StreamErrors::NotAuthorized
- end
- nodes = stream.parse_body(node)
- raise StreamErrors::NotAuthorized unless nodes.size == 1
- super(nodes.first)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/bind.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/bind.rb
deleted file mode 100644
index 8c6a4a7..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/bind.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class Bind < Client::Bind
- FEATURES = %Q{<stream:features xmlns:stream="#{NAMESPACES[:stream]}"/>}.freeze
-
- def initialize(stream, success=Ready)
- super
- end
-
- def node(node)
- unless stream.valid_session?(node['sid']) && body?(node) && node['rid']
- raise StreamErrors::NotAuthorized
- end
- nodes = stream.parse_body(node)
- raise StreamErrors::NotAuthorized unless nodes.size == 1
- super(nodes.first)
- end
-
- private
-
- # Override Client::Bind#send_empty_features to properly namespace the
- # empty features element.
- def send_empty_features
- stream.write(FEATURES)
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/bind_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/bind_restart.rb
deleted file mode 100644
index 7e73073..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/bind_restart.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class BindRestart < State
- def initialize(stream, success=Bind)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless restart?(node)
-
- doc = Document.new
- body = doc.create_element('body') do |el|
- el.add_namespace(nil, NAMESPACES[:http_bind])
- el.add_namespace('stream', NAMESPACES[:stream])
- el << doc.create_element('stream:features') do |features|
- features << doc.create_element('bind', 'xmlns' => NAMESPACES[:bind])
- end
- end
- stream.reply(body)
- advance
- end
-
- private
-
- def restart?(node)
- session = stream.valid_session?(node['sid'])
- restart = node.attribute_with_ns('restart', NAMESPACES[:bosh]).value rescue nil
- domain = node['to'] == stream.domain
- session && body?(node) && domain && restart == 'true' && node['rid']
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/ready.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/ready.rb
deleted file mode 100644
index c379319..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/ready.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class Ready < Client::Ready
- RID, SID, TYPE, TERMINATE = %w[rid sid type terminate].map {|s| s.freeze }
-
- def node(node)
- unless stream.valid_session?(node[SID]) && body?(node) && node[RID]
- raise StreamErrors::NotAuthorized
- end
- stream.parse_body(node).each do |child|
- begin
- super(child)
- rescue StanzaError => e
- stream.error(e)
- end
- end
- stream.terminate if terminate?(node)
- end
-
- def terminate?(node)
- node[TYPE] == TERMINATE
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/request.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/request.rb
deleted file mode 100644
index 70f02f3..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/request.rb
+++ /dev/null
@@ -1,193 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class Request
- BUF_SIZE = 1024
- MODIFIED = '%a, %d %b %Y %H:%M:%S GMT'.freeze
- MOVED = 'Moved Permanently'.freeze
- NOT_FOUND = 'Not Found'.freeze
- NOT_MODIFIED = 'Not Modified'.freeze
- IF_MODIFIED = 'If-Modified-Since'.freeze
- TEXT_PLAIN = 'text/plain'.freeze
- OPTIONS = 'OPTIONS'.freeze
- CONTENT_TYPES = {
- 'html' => 'text/html; charset="utf-8"',
- 'js' => 'application/javascript; charset="utf-8"',
- 'css' => 'text/css',
- 'png' => 'image/png',
- 'jpg' => 'image/jpeg',
- 'jpeg' => 'image/jpeg',
- 'gif' => 'image/gif',
- 'manifest' => 'text/cache-manifest'
- }.freeze
-
- attr_reader :stream, :body, :headers, :method, :path, :url, :query
-
- # Create a new request parsed from an HTTP client connection. We'll try
- # to keep this request open until there are stanzas available to send
- # as a response.
- #
- # stream - The Stream::Http client connection that received the request.
- # parser - The Http::Parser that parsed the HTTP request.
- # body - The String request body.
- def initialize(stream, parser, body)
- uri = URI(parser.request_url)
- @stream = stream
- @body = body
- @headers = parser.headers
- @method = parser.http_method
- @url = parser.request_url
- @path = uri.path
- @query = uri.query
- @received = Time.now
- end
-
- # Return the number of seconds since this request was received.
- def age
- Time.now - @received
- end
-
- # Write the requested file to the client out of the given document root
- # directory. Take care to prevent directory traversal attacks with paths
- # like ../../../etc/passwd. Use the If-Modified-Since request header
- # to implement caching.
- #
- # Returns nothing.
- def reply_with_file(dir)
- path = File.expand_path(File.join(dir, @path))
-
- # Redirect requests missing a slash so relative links work.
- if File.directory?(path) && !@path.end_with?('/')
- send_status(301, MOVED, "Location: #{redirect_uri}")
- return
- end
-
- path = File.join(path, 'index.html') if File.directory?(path)
-
- if path.start_with?(dir) && File.exist?(path)
- modified?(path) ? send_file(path) : send_status(304, NOT_MODIFIED)
- else
- missing = File.join(dir, '404.html')
- if File.exist?(missing)
- send_file(missing, 404, NOT_FOUND)
- else
- send_status(404, NOT_FOUND)
- end
- end
- end
-
- # Send an HTTP 200 OK response wrapping the XMPP node content back
- # to the client.
- #
- # Returns nothing.
- def reply(node, content_type)
- body = node.to_s
- header = [
- "HTTP/1.1 200 OK",
- "Access-Control-Allow-Origin: *",
- "Content-Type: #{content_type}",
- "Content-Length: #{body.bytesize}",
- vroute_cookie
- ].compact.join("\r\n")
- @stream.stream_write([header, body].join("\r\n\r\n"))
- end
-
- # Return true if the request method is OPTIONS, signaling a
- # CORS preflight check.
- def options?
- @method == OPTIONS
- end
-
- # Send a 200 OK response, allowing any origin domain to connect to the
- # server, in response to CORS preflight OPTIONS requests. This allows
- # any web application using strophe.js to connect to our BOSH port.
- #
- # Returns nothing.
- def reply_to_options
- allow = @headers['Access-Control-Request-Headers']
- headers = [
- "Access-Control-Allow-Origin: *",
- "Access-Control-Allow-Methods: POST, GET, OPTIONS",
- "Access-Control-Allow-Headers: #{allow}",
- "Access-Control-Max-Age: #{60 * 60 * 24 * 30}"
- ]
- send_status(200, 'OK', headers)
- end
-
- private
-
- # Attempt to rebuild the full request URI from the Host header. If it
- # wasn't sent by the client, just return the relative path that
- # was requested. The Location response header must contain the fully
- # qualified URI, but most browsers will accept relative paths as well.
- #
- # Returns the String URL.
- def redirect_uri
- host = headers['Host']
- uri = "#{path}/"
- uri = "#{uri}?#{query}" unless (query || '').empty?
- uri = "http://#{host}#{uri}" if host
- uri
- end
-
- # Return true if the file has been modified since the client last
- # requested it with the If-Modified-Since header.
- def modified?(path)
- @headers[IF_MODIFIED] != mtime(path)
- end
-
- def mtime(path)
- File.mtime(path).utc.strftime(MODIFIED)
- end
-
- def send_status(status, message, *headers)
- header = [
- "HTTP/1.1 #{status} #{message}",
- "Content-Length: 0",
- *headers
- ].join("\r\n")
- @stream.stream_write("#{header}\r\n\r\n")
- end
-
- # Stream the contents of the file to the client in a 200 OK response.
- # Send a Last-Modified response header so clients can send us an
- # If-Modified-Since request header for caching.
- #
- # Returns nothing.
- def send_file(path, status=200, message='OK')
- header = [
- "HTTP/1.1 #{status} #{message}",
- "Content-Type: #{content_type(path)}",
- "Content-Length: #{File.size(path)}",
- "Last-Modified: #{mtime(path)}"
- ].join("\r\n")
- @stream.stream_write("#{header}\r\n\r\n")
-
- File.open(path) do |file|
- while (buf = file.read(BUF_SIZE)) != nil
- @stream.stream_write(buf)
- end
- end
- end
-
- def content_type(path)
- ext = File.extname(path).sub('.', '')
- CONTENT_TYPES[ext] || TEXT_PLAIN
- end
-
- # Provide a vroute cookie in each response that uniquely identifies this
- # HTTP server. Reverse proxy servers (nginx/apache) can use this cookie
- # to implement sticky sessions. Return nil if vroute was not set in
- # config.rb and no cookie should be sent.
- #
- # Returns a String cookie value or nil if disabled.
- def vroute_cookie
- route = @stream.config[:http].vroute
- route ? "Set-Cookie: vroute=#{route}; path=/; HttpOnly" : nil
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/session.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/session.rb
deleted file mode 100644
index a697900..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/session.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class Session < Client::Session
- include Nokogiri::XML
-
- attr_accessor :content_type, :hold, :inactivity, :wait
-
- CONTENT_TYPE = 'text/xml; charset=utf-8'.freeze
-
- def initialize(stream)
- super
- @state = Http::Start.new(stream)
- @inactivity, @wait, @hold = 20, 60, 1
- @replied = Time.now
- @requests, @responses = [], []
- @content_type = CONTENT_TYPE
- end
-
- def close
- Sessions.delete(@id)
- router.delete(self)
- delete_from_cluster
- unsubscribe_pubsub
- @requests.each {|req| req.stream.close_connection }
- @requests.clear
- @responses.clear
- @state = Client::Closed.new(nil)
- @unbound = true
- @available = false
- broadcast_unavailable
- end
-
- def ready?
- @state.class == Http::Ready
- end
-
- def requests
- @requests.clone
- end
-
- def expired?
- respond_to_expired_requests
- @requests.empty? && (Time.now - @replied > @inactivity)
- end
-
- # Resume this session from its most recent state with a new client
- # stream and incoming node.
- def resume(stream, node)
- stream.session.requests.each do |req|
- request(req)
- end
- stream.session = self
- @state.stream = stream
- @state.node(node)
- end
-
- def request(request)
- if @responses.any?
- request.reply(wrap_body(@responses.join), @content_type)
- @replied = Time.now
- @responses.clear
- else
- while @requests.size >= @hold
- @requests.shift.reply(wrap_body(''), @content_type)
- @replied = Time.now
- end
- @requests << request
- end
- end
-
- # Send an HTTP 200 OK response wrapping the XMPP node content back
- # to the client.
- #
- # node - The XML::Node to send to the client.
- #
- # Returns nothing.
- def reply(node)
- if request = @requests.shift
- request.reply(node, @content_type)
- @replied = Time.now
- end
- end
-
- # Write the XMPP node to the client stream after wrapping it in a BOSH
- # body tag. If there's a waiting request, the node is written
- # immediately. If not, it's queued until the next request arrives.
- #
- # data - The XML String or XML::Node to send in the next HTTP response.
- #
- # Returns nothing.
- def write(node)
- if request = @requests.shift
- request.reply(wrap_body(node), @content_type)
- @replied = Time.now
- else
- @responses << node.to_s
- end
- end
-
- def unbind!(stream)
- @requests.reject! {|req| req.stream == stream }
- end
-
- private
-
- def respond_to_expired_requests
- expired = @requests.select {|req| req.age > @wait }
- expired.each do |request|
- request.reply(wrap_body(''), @content_type)
- @requests.delete(request)
- @replied = Time.now
- end
- end
-
- def wrap_body(data)
- doc = Document.new
- doc.create_element('body') do |node|
- node.add_namespace(nil, NAMESPACES[:http_bind])
- node.inner_html = data.to_s
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/sessions.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/sessions.rb
deleted file mode 100644
index d31f8fe..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/sessions.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- # Sessions is a cache of Http::Session objects for transient HTTP
- # connections. The cache is monitored for expired client connections.
- class Sessions
- include Vines::Log
-
- @@instance = nil
- def self.instance
- @@instance ||= self.new
- end
-
- def self.[](sid)
- instance[sid]
- end
-
- def self.[]=(sid, session)
- instance[sid] = session
- end
-
- def self.delete(sid)
- instance.delete(sid)
- end
-
- def initialize
- @sessions = {}
- start_timer
- end
-
- def []=(sid, session)
- @sessions[sid] = session
- end
-
- def [](sid)
- @sessions[sid]
- end
-
- def delete(sid)
- @sessions.delete(sid)
- end
-
- private
-
- # Check for expired clients to cleanup every second.
- def start_timer
- @timer ||= EventMachine::PeriodicTimer.new(1) { cleanup }
- end
-
- # Remove cached information for all expired connections. An expired
- # HTTP client is one that has no queued requests and has had no activity
- # for over 20 seconds.
- def cleanup
- @sessions.each_value do |session|
- session.close if session.expired?
- end
- rescue => e
- log.error("Expired session cleanup failed: #{e}")
- end
- end
- end
- end
-end
\ No newline at end of file
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/start.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/start.rb
deleted file mode 100644
index 8db2622..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/http/start.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Http
- class Start < State
- def initialize(stream, success=Auth)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless body?(node)
- if session = Sessions[node['sid']]
- session.resume(stream, node)
- else
- stream.start(node)
- advance
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/parser.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/parser.rb
deleted file mode 100644
index a59aded..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/parser.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Parser < Nokogiri::XML::SAX::Document
- include Nokogiri::XML
- STREAM_NAME = 'stream'.freeze
- STREAM_URI = 'http://etherx.jabber.org/streams'.freeze
- IGNORE = NAMESPACES.values_at(:client, :component, :server)
-
- def initialize(&block)
- @listeners, @node = Hash.new {|h, k| h[k] = []}, nil
- @parser = Nokogiri::XML::SAX::PushParser.new(self)
- instance_eval(&block) if block
- end
-
- [:stream_open, :stream_close, :stanza].each do |name|
- define_method(name) do |&block|
- @listeners[name] << block
- end
- end
-
- def <<(data)
- @parser << data
- self
- end
-
- def start_element_namespace(name, attrs=[], prefix=nil, uri=nil, ns=[])
- el = node(name, attrs, prefix, uri, ns)
- if stream?(name, uri)
- notify(:stream_open, el)
- else
- @node << el if @node
- @node = el
- end
- end
-
- def end_element_namespace(name, prefix=nil, uri=nil)
- if stream?(name, uri)
- notify(:stream_close)
- elsif @node.parent != @node.document
- @node = @node.parent
- else
- notify(:stanza, @node)
- @node = nil
- end
- end
-
- def characters(chars)
- @node << Text.new(chars, @node.document) if @node
- end
- alias :cdata_block :characters
-
- private
-
- def notify(msg, node=nil)
- @listeners[msg].each do |b|
- (node ? b.call(node) : b.call) rescue nil
- end
- end
-
- def stream?(name, uri)
- name == STREAM_NAME && uri == STREAM_URI
- end
-
- def node(name, attrs=[], prefix=nil, uri=nil, ns=[])
- ignore = stream?(name, uri) ? [] : IGNORE
- doc = @node ? @node.document : Document.new
- node = doc.create_element(name) do |node|
- attrs.each {|attr| node[attr.localname] = attr.value }
- ns.each {|prefix, uri| node.add_namespace(prefix, uri) unless ignore.include?(uri) }
- doc << node unless @node
- end
- node.namespace = node.add_namespace(prefix, uri) unless ignore.include?(uri)
- node
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/sasl.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/sasl.rb
deleted file mode 100644
index 2f46d02..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/sasl.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- # Provides plain (username/password) and external (TLS certificate) SASL
- # authentication to client and server streams.
- class SASL
- include Vines::Log
- EMPTY = '='.freeze
-
- def initialize(stream)
- @stream = stream
- end
-
- # Authenticate server-to-server streams, comparing their domain to their
- # SSL certificate.
- #
- # http://xmpp.org/extensions/xep-0178.html#s2s
- #
- # encoded - The Base64 encoded remote domain name String sent by the
- # server stream.
- #
- # Returns true if the Base64 encoded domain matches the TLS certificate
- # presented earlier in stream negotiation.
- #
- # Raises a SaslError if authentication failed.
- def external_auth(encoded)
- unless encoded == EMPTY
- authzid = decode64(encoded)
- matches_from = (authzid == @stream.remote_domain)
- raise SaslErrors::InvalidAuthzid unless matches_from
- end
- matches_from = @stream.cert_domain_matches?(@stream.remote_domain)
- matches_from or raise SaslErrors::NotAuthorized
- end
-
- # Authenticate client-to-server streams using a username and password.
- #
- # encoded - The Base64 encoded jid and password String sent by the
- # client stream.
- #
- # Returns the authenticated User or raises SaslError if authentication failed.
- def plain_auth(encoded)
- jid, password = decode_credentials(encoded)
- user = authenticate(jid, password)
- user or raise SaslErrors::NotAuthorized
- end
-
- private
-
- # Storage backends should not raise errors, but if an unexpected error
- # occurs during authentication, convert it to a temporary-auth-failure.
- #
- # jid - The user's jid String.
- # password - The String password.
- #
- # Returns the authenticated User or nil if authentication failed.
- #
- # Raises TemoraryAuthFailure if the storage system failed.
- def authenticate(jid, password)
- log.info("Authenticating user: %s" % jid)
- @stream.storage.authenticate(jid, password).tap do |user|
- log.info("Authentication succeeded: %s" % user.jid) if user
- end
- rescue => e
- log.error("Failed to authenticate: #{e.to_s}")
- raise SaslErrors::TemporaryAuthFailure
- end
-
- # Return the JID and password decoded from the Base64 encoded SASL PLAIN
- # credentials formatted as authzid\0authcid\0password.
- #
- # http://tools.ietf.org/html/rfc6120#section-6.3.8
- # http://tools.ietf.org/html/rfc4616
- #
- # encoded - The Base64 encoded String from which to extract jid and password.
- #
- # Returns an Array of jid String and password String.
- def decode_credentials(encoded)
- authzid, node, password = decode64(encoded).split("\x00")
- raise SaslErrors::NotAuthorized if node.nil? || node.empty? || password.nil? || password.empty?
- jid = JID.new(node, @stream.domain) rescue (raise SaslErrors::NotAuthorized)
- validate_authzid!(authzid, jid)
- [jid, password]
- end
-
- # An optional SASL authzid allows a user to authenticate with one
- # user name and password and then have their connection authorized as a
- # different ID (the authzid). We don't support that, so raise an error if
- # the authzid is provided and different than the authcid.
- #
- # Most clients don't send an authzid at all because it's optional and not
- # widely supported. However, Strophe and Blather send a bare JID, in
- # compliance with RFC 6120, but Smack sends just the user name as the
- # authzid. So, take care to handle non-compliant clients here.
- #
- # http://tools.ietf.org/html/rfc6120#section-6.3.8
- #
- # authzid - The authzid String (may be nil).
- # jid - The username String.
- #
- # Returns nothing.
- def validate_authzid!(authzid, jid)
- return if authzid.nil? || authzid.empty?
- authzid.downcase!
- smack = authzid == jid.node
- compliant = authzid == jid.to_s
- raise SaslErrors::InvalidAuthzid unless compliant || smack
- end
-
- # Decode the Base64 encoded string, raising an error for invalid data.
- #
- # http://tools.ietf.org/html/rfc6120#section-13.9.1
- #
- # encoded - The Base64 encoded String.
- #
- # Returns a UTF-8 String.
- def decode64(encoded)
- Base64.strict_decode64(encoded).tap do |decoded|
- decoded.force_encoding(Encoding::UTF_8)
- raise SaslErrors::IncorrectEncoding unless decoded.valid_encoding?
- end
- rescue
- raise SaslErrors::IncorrectEncoding
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server.rb
deleted file mode 100644
index 5ae4efe..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server.rb
+++ /dev/null
@@ -1,207 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- # Implements the XMPP protocol for server-to-server (s2s) streams. This
- # serves connected streams using the jabber:server namespace. This handles
- # both accepting incoming s2s streams and initiating outbound s2s streams
- # to other servers.
- class Server < Stream
- MECHANISMS, FROM, TO = %w(EXTERNAL from to).map(&:freeze)
-
- # Starts the connection to the remote server. When the stream is
- # connected and ready to send stanzas it will yield to the callback
- # block. The callback is run on the EventMachine reactor thread. The
- # yielded stream will be nil if the remote connection failed. We need to
- # use a background thread to avoid blocking the server on DNS SRV
- # lookups.
- def self.start(config, to, from, dialback_verify_key = false, &callback)
- op = proc do
- Resolv::DNS.open do |dns|
- dns.getresources("_xmpp-server._tcp.#{to}", Resolv::DNS::Resource::IN::SRV)
- end.sort! {|a,b| a.priority == b.priority ? b.weight <=> a.weight : a.priority <=> b.priority }
- end
- cb = proc do |srv|
- if srv.empty?
- srv << {target: to, port: 5269}
- class << srv.first
- def method_missing(name); self[name]; end
- end
- end
- Server.connect(config, to, from, srv, dialback_verify_key, callback)
- end
- EM.defer(proc { op.call rescue [] }, cb)
- end
-
- def self.connect(config, to, from, srv, dialback_verify_key = false, callback)
- if srv.empty?
- # fiber so storage calls work properly
- Fiber.new { callback.call(nil) }.resume
- else
- begin
- rr = srv.shift
- opts = {to: to, from: from, srv: srv, dialback_verify_key: dialback_verify_key, callback: callback}
- EM.connect(rr.target.to_s, rr.port, Server, config, opts)
- rescue => e
- connect(config, to, from, srv, dialback_verify_key, callback)
- end
- end
- end
-
- attr_reader :domain
- attr_accessor :remote_domain
-
- def initialize(config, options={})
- super(config)
- @outbound_tls_required = false
- @peer_trusted = nil
- @connected = false
- @remote_domain = options[:to]
- @domain = options[:from]
- @srv = options[:srv]
- @dialback_verify_key = options[:dialback_verify_key]
- @callback = options[:callback]
- @outbound = @remote_domain && @domain
- start = @outbound ? Outbound::Start.new(self) : Start.new(self)
- advance(start)
- end
-
- def post_init
- super
- send_stream_header if @outbound
- end
-
- def max_stanza_size
- config[:server].max_stanza_size
- end
-
- def ssl_verify_peer(pem)
- @peer_trusted = @store.trusted?(pem)
- true
- end
-
- def peer_trusted?
- !@peer_trusted.nil? && @peer_trusted
- end
-
- def dialback_retry?
- return false if @peer_trusted.nil? || @peer_trusted
- true
- end
-
- def ssl_handshake_completed
- @peer_trusted = cert_domain_matches?(@remote_domain) && peer_trusted?
- end
-
- def outbound_tls_required?
- @outbound_tls_required
- end
-
- def outbound_tls_required(required)
- @outbound_tls_required = required
- end
-
- # Return an array of allowed authentication mechanisms advertised as
- # server stream features.
- def authentication_mechanisms
- MECHANISMS
- end
-
- def stream_type
- :server
- end
-
- def unbind
- super
- if @outbound && !@connected
- Server.connect(config, @remote_domain, @domain, @srv, @callback)
- end
- end
-
- def vhost?(domain)
- config.vhost?(domain)
- end
-
- def notify_connected
- @connected = true
- self.callback!
- @callback = nil
- end
-
- def callback!
- @callback.call(self) if @callback
- end
-
- def dialback_verify_key?
- @dialback_verify_key
- end
-
- def ready?
- state.class == Server::Ready
- end
-
- def authoritative_dialback(node)
- stream = self
- Server.start(stream.config, node[FROM], node[TO], true) do |authoritative|
- if authoritative
- # will be closed in outbound/authoritative.rb
- authoritative.write("<db:verify from='#{node[TO]}' id='#{stream.id}' " \
- "to='#{node[FROM]}'>#{node.text}</db:verify>")
- end
- end
- # We need to be discoverable for the dialback connection
- router << stream
- rescue StanzaErrors::RemoteServerNotFound
- write("<db:result from='#{node[TO]}' to='#{node[FROM]}' " \
- "type='error'><error type='cancel'><item-not-found " \
- "xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></db:result>")
- close_connection_after_writing
- end
-
- def start(node)
- if @outbound then send_stream_header; return end
- to, from = %w[to from].map {|a| node[a] }
- @domain, @remote_domain = to, from unless @domain
- send_stream_header
- raise StreamErrors::NotAuthorized if domain_change?(to, from)
- raise StreamErrors::ImproperAddressing unless valid_address?(@domain) && valid_address?(@remote_domain)
- raise StreamErrors::HostUnknown unless config.vhost?(@domain) || config.pubsub?(@domain) || config.component?(@domain)
- raise StreamErrors::NotAuthorized unless config.s2s?(@remote_domain) && config.allowed?(@domain, @remote_domain)
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns'] == NAMESPACES[:server]
- raise StreamErrors::InvalidNamespace unless node.namespaces['xmlns:stream'] == NAMESPACES[:stream]
- end
-
- private
-
- # The `to` and `from` domain addresses set on the initial stream header
- # must not change during stream restarts. This prevents a server from
- # authenticating as one domain, then sending stanzas from users in a
- # different domain.
- #
- # to - The String domain the other server thinks we are.
- # from - The String domain the other server is asserting as its identity.
- #
- # Returns true if the other server is misbehaving and its connection
- # should be closed.
- def domain_change?(to, from)
- to != @domain || from != @remote_domain
- end
-
- def send_stream_header
- stream_id = Kit.uuid
- update_stream_id(stream_id)
- attrs = {
- 'xmlns' => NAMESPACES[:server],
- 'xmlns:stream' => NAMESPACES[:stream],
- 'xmlns:db' => NAMESPACES[:legacy_dialback],
- 'xml:lang' => 'en',
- 'id' => stream_id,
- 'version' => '1.0',
- 'from' => @domain,
- 'to' => @remote_domain,
- }
- write "<stream:stream %s>" % attrs.to_a.map{|k,v| "#{k}='#{v}'"}.join(' ')
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth.rb
deleted file mode 100644
index 0198541..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Auth < Client::Auth
- RESULT = "result".freeze
-
- def initialize(stream, success=FinalRestart)
- super
- end
-
- def node(node)
- if dialback_result?(node)
- # open a new connection and verify the dialback key
- stream.authoritative_dialback(node)
- else
- super
- end
- end
-
- private
-
- def dialback_result?(node)
- node.name == RESULT && namespace(node) == NAMESPACES[:legacy_dialback]
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth_method.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth_method.rb
deleted file mode 100644
index 22331d3..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth_method.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class AuthMethod < State
- VERIFY, VALID_TYPE, INVALID_TYPE = %w[verify valid invalid].map {|t| t.freeze }
- STARTTLS, RESULT, FROM, TO = %w[starttls result from to].map {|s| s.freeze }
- PROCEED = %Q{<proceed xmlns="#{NAMESPACES[:tls]}"/>}.freeze
- FAILURE = %Q{<failure xmlns="#{NAMESPACES[:tls]}"/>}.freeze
-
- def initialize(stream, success=AuthRestart)
- super
- end
-
- def node(node)
- if dialback_verify?(node)
- id, from, to = %w[id from to].map {|a| node[a] }
- key = node.text
- outbound_stream = stream.router.stream_by_id(id)
-
- unless outbound_stream && outbound_stream.state.is_a?(Stream::Server::Outbound::AuthDialbackResult)
- stream.write(%Q{<db:verify from="#{to}" to=#{from} id=#{id} type="error"><error type="cancel"><item-not-found xmlns="#{NAMESPACES[:stanzas]}" /></error></db:verify>})
- return
- end
-
- secret = outbound_stream.state.dialback_secret
- type = Kit.dialback_key(secret, from, to, id) == key ? VALID_TYPE : INVALID_TYPE
- stream.write(%Q{<db:verify from="#{to}" to="#{from}" id="#{id}" type="#{type}" />})
- stream.close_connection_after_writing
- elsif starttls?(node)
- if stream.encrypt?
- stream.write(PROCEED)
- stream.encrypt
- stream.reset
- advance
- else
- stream.write(FAILURE)
- stream.write('</stream:stream>')
- stream.close_connection_after_writing
- end
- elsif dialback_result?(node)
- # open a new connection and verify the dialback key
- stream.authoritative_dialback(node)
- else
- raise StreamErrors::NotAuthorized
- end
- end
-
- private
-
- def starttls?(node)
- node.name == STARTTLS && namespace(node) == NAMESPACES[:tls]
- end
-
- def dialback_verify?(node)
- node.name == VERIFY && namespace(node) == NAMESPACES[:legacy_dialback]
- end
-
- def dialback_result?(node)
- node.name == RESULT && namespace(node) == NAMESPACES[:legacy_dialback]
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth_restart.rb
deleted file mode 100644
index f5703af..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/auth_restart.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class AuthRestart < State
- def initialize(stream, success=Auth)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- doc = Document.new
- features = doc.create_element('stream:features')
- if stream.dialback_retry?
- if stream.vhost.force_s2s_encryption?
- stream.close_connection
- return
- end
- @success = AuthMethod
- features << doc.create_element('dialback') do |db|
- db.default_namespace = NAMESPACES[:dialback]
- end
- else
- features << doc.create_element('mechanisms') do |parent|
- parent.default_namespace = NAMESPACES[:sasl]
- stream.authentication_mechanisms.each do |name|
- parent << doc.create_element('mechanism', name)
- end
- end
- end
- stream.write(features)
- advance
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/final_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/final_restart.rb
deleted file mode 100644
index 1c96f45..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/final_restart.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class FinalRestart < State
- def initialize(stream, success=Ready)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- stream.write('<stream:features/>')
- stream.router << stream
- advance
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth.rb
deleted file mode 100644
index b0567db..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class Auth < State
- REQUIRED = 'required'.freeze
- FEATURES = 'features'.freeze
-
- def initialize(stream, success=AuthDialbackResult)
- super
- end
-
- def node(node)
- # We have to remember tls_require for
- # closing or restarting the stream
- stream.outbound_tls_required(tls_required?(node))
-
- if stream.dialback_verify_key?
- @success = Authoritative
- stream.callback!
- advance
- elsif dialback?(node)
- secret = Kit.auth_token
- dialback_key = Kit.dialback_key(secret, stream.remote_domain, stream.domain, stream.id)
- stream.write("<db:result xmlns:db='#{NAMESPACES[:legacy_dialback]}' " \
- "from='#{stream.domain}' to='#{stream.remote_domain}'>#{dialback_key}</db:result>")
- advance
- stream.router << stream # We need to be discoverable for the dialback connection
- stream.state.dialback_secret = secret
- elsif tls?(node)
- @success = TLSResult
- stream.write("<starttls xmlns='#{NAMESPACES[:tls]}'/>")
- advance
- else
- raise StreamErrors::NotAuthorized
- end
- end
-
- private
-
- def tls_required?(node)
- child = node.xpath('ns:starttls', 'ns' => NAMESPACES[:tls]).children.first
- child && child.name == REQUIRED
- end
-
- def dialback?(node)
- dialback = node.xpath('ns:dialback', 'ns' => NAMESPACES[:dialback]).any?
- features?(node) && dialback && !tls_required?(node)
- end
-
- def tls?(node)
- tls = node.xpath('ns:starttls', 'ns' => NAMESPACES[:tls]).any?
- features?(node) && tls
- end
-
- def features?(node)
- node.name == FEATURES && namespace(node) == NAMESPACES[:stream]
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_dialback_result.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_dialback_result.rb
deleted file mode 100644
index 0e2848b..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_dialback_result.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class AuthDialbackResult < State
- RESULT, VALID, INVALID, TYPE = %w[result valid invalid type].map {|s| s.freeze }
-
- attr_accessor :dialback_secret
-
- def initialize(stream, success=Ready)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless result?(node)
-
- case node[TYPE]
- when VALID
- advance
- stream.notify_connected
- when INVALID
- stream.close_connection
- else
- raise StreamErrors::NotAuthorized
- end
- end
-
- private
-
- def result?(node)
- node.name == RESULT && namespace(node) == NAMESPACES[:legacy_dialback]
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external.rb
deleted file mode 100644
index 1575fdb..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class AuthExternal < State
- def initialize(stream, success=AuthExternalResult)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless external?(node)
- authzid = Base64.strict_encode64(stream.domain)
- stream.write(%Q{<auth xmlns="#{NAMESPACES[:sasl]}" mechanism="EXTERNAL">#{authzid}</auth>})
- advance
- end
-
- private
-
- def external?(node)
- external = node.xpath("ns:mechanisms/ns:mechanism[text()='EXTERNAL']", 'ns' => NAMESPACES[:sasl]).any?
- features?(node) && external
- end
-
- def features?(node)
- node.name == 'features' && namespace(node) == NAMESPACES[:stream]
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external_result.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external_result.rb
deleted file mode 100644
index 795c935..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_external_result.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class AuthExternalResult < State
- SUCCESS = 'success'.freeze
- FAILURE = 'failure'.freeze
-
- def initialize(stream, success=FinalRestart)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless namespace(node) == NAMESPACES[:sasl]
- case node.name
- when SUCCESS
- stream.start(node)
- stream.reset
- advance
- when FAILURE
- stream.close_connection
- else
- raise StreamErrors::NotAuthorized
- end
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_restart.rb
deleted file mode 100644
index 9a04b62..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/auth_restart.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class AuthRestart < State
- def initialize(stream, success=AuthExternal)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- if stream.dialback_retry?
- if stream.outbound_tls_required?
- stream.close_connection
- return
- end
- @success = Auth
- end
- advance
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/authoritative.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/authoritative.rb
deleted file mode 100644
index 05c5422..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/authoritative.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class Authoritative < State
- VALID, INVALID, ERROR, TYPE = %w[valid invalid error type]
- VERIFY, ID, FROM, TO = %w[verify id from to].map {|s| s.freeze }
-
- def initialize(stream, success=nil)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless authoritative?(node)
-
- case node[TYPE]
- when VALID
- @inbound.write("<db:result xmlns:db='#{NAMESPACES[:legacy_dialback]}' " \
- "from='#{node[TO]}' to='#{node[FROM]}' type='#{node[TYPE]}'/>")
- @inbound.advance(Server::Ready.new(@inbound))
- @inbound.notify_connected
- when INVALID
- @inbound.write("<db:result xmlns:db='#{NAMESPACES[:legacy_dialback]}' " \
- "from='#{node[TO]}' to='#{node[FROM]}' type='#{node[TYPE]}'/>")
- @inbound.close_connection_after_writing
- else
- @inbound.write("<db:result xmlns:db='#{NAMESPACES[:legacy_dialback]}' " \
- "from='#{node[TO]}' to='#{node[FROM]}' type='#{ERROR}'>" \
- "<error type='cancel'><item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>" \
- "</error></db:result>")
- @inbound.close_connection_after_writing
- end
- stream.close_connection
- end
-
- private
-
- def authoritative?(node)
- @inbound = stream.router.stream_by_id(node[ID])
- node.name == VERIFY && namespace(node) == NAMESPACES[:legacy_dialback] && !@inbound.nil?
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_features.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_features.rb
deleted file mode 100644
index 0848533..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_features.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class FinalFeatures < State
- def initialize(stream, success=Server::Ready)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless empty_features?(node)
- stream.router << stream
- advance
- stream.notify_connected
- end
-
- private
-
- def empty_features?(node)
- node.name == 'features' && namespace(node) == NAMESPACES[:stream] && node.elements.empty?
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_restart.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_restart.rb
deleted file mode 100644
index 46ba30b..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/final_restart.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class FinalRestart < State
- def initialize(stream, success=FinalFeatures)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- advance
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/start.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/start.rb
deleted file mode 100644
index 4677278..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/start.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class Start < State
- def initialize(stream, success=Auth)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- advance
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/tls_result.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/tls_result.rb
deleted file mode 100644
index 6467a2d..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/outbound/tls_result.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Outbound
- class TLSResult < State
- NS = NAMESPACES[:tls]
- PROCEED = 'proceed'.freeze
- FAILURE = 'failure'.freeze
-
- def initialize(stream, success=AuthRestart)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless namespace(node) == NS
- case node.name
- when PROCEED
- stream.encrypt
- stream.start(node)
- stream.reset
- advance
- when FAILURE
- stream.close_connection
- else
- raise StreamErrors::NotAuthorized
- end
- end
- end
- end
- end
- end
-end
\ No newline at end of file
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/ready.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/ready.rb
deleted file mode 100644
index aa538e5..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/ready.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Ready < State
- def node(node)
- stanza = to_stanza(node)
- raise StreamErrors::UnsupportedStanzaType unless stanza
- to, from = stanza.validate_to, stanza.validate_from
- raise StreamErrors::ImproperAddressing unless to && from
- raise StreamErrors::InvalidFrom unless from.domain == stream.remote_domain
- raise StreamErrors::HostUnknown unless to.domain == stream.domain
- stream.user = User.new(jid: from)
- if stanza.local? || stanza.to_pubsub_domain?
- stanza.process
- else
- stanza.route
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/start.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/start.rb
deleted file mode 100644
index 876f5de..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/server/start.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
- class Server
- class Start < State
- FROM = "from".freeze
-
- def initialize(stream, success=AuthMethod)
- super
- end
-
- def node(node)
- raise StreamErrors::NotAuthorized unless stream?(node)
- stream.start(node)
- doc = Document.new
- features = doc.create_element('stream:features', 'xmlns:stream' => NAMESPACES[:stream]) do |el|
- unless stream.dialback_retry?
- el << doc.create_element('starttls') do |tls|
- tls.default_namespace = NAMESPACES[:tls]
- tls << doc.create_element('required') if force_s2s_encryption?
- end
- end
- el << doc.create_element('dialback') do |db|
- db.default_namespace = NAMESPACES[:dialback]
- end
- end
- stream.write(features)
- advance
- end
-
- private
-
- def force_s2s_encryption?
- stream.vhost.force_s2s_encryption?
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/state.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/state.rb
deleted file mode 100644
index 167ff59..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/stream/state.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class Stream
-
- # The base class of Stream state machines. States know how to process XML
- # nodes and advance to their next valid state or fail the stream.
- class State
- include Nokogiri::XML
- include Vines::Log
- include Vines::Node
-
- attr_accessor :stream
-
- def initialize(stream, success=nil)
- @stream, @success = stream, success
- end
-
- def node(node)
- raise 'subclass must implement'
- end
-
- def ==(state)
- self.class == state.class
- end
-
- def eql?(state)
- state.is_a?(State) && self == state
- end
-
- def hash
- self.class.hash
- end
-
- private
-
- def advance
- stream.advance(@success.new(stream))
- end
-
- def to_stanza(node)
- super(node, stream)
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/token_bucket.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/token_bucket.rb
deleted file mode 100644
index 87becf3..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/token_bucket.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# encoding: UTF-8
-
-module Vines
-
- # The token bucket algorithm is useful for rate limiting.
- # Before an operation can be completed, a token is taken from
- # the bucket. If no tokens are available, the operation fails.
- # The bucket is refilled with tokens at the maximum allowed rate
- # of operations.
- class TokenBucket
-
- # Create a full bucket with `capacity` number of tokens to be filled
- # at the given rate of tokens/second.
- #
- # capacity - The Fixnum maximum number of tokens the bucket can hold.
- # rate - The Fixnum number of tokens per second at which the bucket is
- # refilled.
- def initialize(capacity, rate)
- raise ArgumentError.new('capacity must be > 0') unless capacity > 0
- raise ArgumentError.new('rate must be > 0') unless rate > 0
- @capacity = capacity
- @tokens = capacity
- @rate = rate
- @timestamp = Time.new
- end
-
- # Remove tokens from the bucket if it's full enough. There's no way, or
- # need, to add tokens to the bucket. It refills over time.
- #
- # tokens - The Fixnum number of tokens to attempt to take from the bucket.
- #
- # Returns true if the bucket contains enough tokens to take, false if the
- # bucket isn't full enough to satisy the request.
- def take(tokens)
- raise ArgumentError.new('tokens must be > 0') unless tokens > 0
- tokens <= fill ? @tokens -= tokens : false
- end
-
- private
-
- # Add tokens to the bucket at the `rate` provided in the constructor. This
- # fills the bucket slowly over time.
- #
- # Returns the Fixnum number of tokens left in the bucket.
- def fill
- if @tokens < @capacity
- now = Time.new
- @tokens += (@rate * (now - @timestamp)).round
- @tokens = @capacity if @tokens > @capacity
- @timestamp = now
- end
- @tokens
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/user.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/user.rb
deleted file mode 100644
index 2d0253d..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/user.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- class User
- include Comparable
-
- attr_accessor :name, :token, :password, :roster
- attr_reader :jid
-
- def initialize(args={})
- @jid = JID.new(args[:jid])
- raise ArgumentError, 'invalid jid' if @jid.empty?
-
- @name = args[:name]
- @password = args[:password]
- @token = args[:token]
- @roster = args[:roster] || []
- end
-
- def <=>(user)
- user.is_a?(User) ? self.jid.to_s <=> user.jid.to_s : nil
- end
-
- alias :eql? :==
-
- def hash
- jid.to_s.hash
- end
-
- # Update this user's information from the given user object.
- def update_from(user)
- @name = user.name
- @password = user.password
- @token = user.token
- @roster = user.roster.map {|c| c.clone }
- end
-
- # Return true if the jid is on this user's roster.
- def contact?(jid)
- !contact(jid).nil?
- end
-
- # Returns the contact with this jid or nil if not found.
- def contact(jid)
- bare = JID.new(jid).bare
- @roster.find {|c| c.jid.bare == bare }
- end
-
- # Returns true if the user is subscribed to this contact's
- # presence updates.
- def subscribed_to?(jid)
- contact = contact(jid)
- contact && contact.subscribed_to?
- end
-
- # Returns true if the user has a presence subscription from this contact.
- # The contact is subscribed to this user's presence.
- def subscribed_from?(jid)
- contact = contact(jid)
- contact && contact.subscribed_from?
- end
-
- # Removes the contact with this jid from the user's roster.
- def remove_contact(jid)
- bare = JID.new(jid).bare
- @roster.reject! {|c| c.jid.bare == bare }
- end
-
- # Returns a list of the contacts to which this user has
- # successfully subscribed.
- def subscribed_to_contacts
- @roster.select {|c| c.subscribed_to? }
- end
-
- # Returns a list of the contacts that are subscribed to this user's
- # presence updates.
- def subscribed_from_contacts
- @roster.select {|c| c.subscribed_from? }
- end
-
- # Update the contact's jid on this user's roster to signal that this user
- # has requested the contact's permission to receive their presence updates.
- def request_subscription(jid)
- unless contact = contact(jid)
- contact = Contact.new(:jid => jid)
- @roster << contact
- end
- contact.ask = 'subscribe' if %w[none from].include?(contact.subscription)
- end
-
- # Add the user's jid to this contact's roster with a subscription state of
- # 'from.' This signals that this contact has approved a user's subscription.
- def add_subscription_from(jid)
- unless contact = contact(jid)
- contact = Contact.new(:jid => jid)
- @roster << contact
- end
- contact.subscribe_from
- end
-
- def remove_subscription_to(jid)
- if contact = contact(jid)
- contact.unsubscribe_to
- end
- end
-
- def remove_subscription_from(jid)
- if contact = contact(jid)
- contact.unsubscribe_from
- end
- end
-
- # Returns this user's roster contacts as an iq query element.
- def to_roster_xml(id)
- doc = Nokogiri::XML::Document.new
- doc.create_element('iq', 'id' => id, 'type' => 'result') do |el|
- el << doc.create_element('query', 'xmlns' => 'jabber:iq:roster') do |query|
- @roster.sort!.each do |contact|
- query << contact.to_roster_xml
- end
- end
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/version.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/version.rb
deleted file mode 100644
index 422c464..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/version.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# encoding: UTF-8
-
-module Vines
- # vines forked version 0.4.10
- VERSION = '0.2.0.develop.4'
-end
diff --git a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/xmpp_server.rb b/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/xmpp_server.rb
deleted file mode 100644
index b59c3a5..0000000
--- a/debian/ruby-diaspora-vines/usr/lib/ruby/vendor_ruby/vines/xmpp_server.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# encoding: UTF-8
-
-module Vines
-
- # The main starting point for the XMPP server process. Starts the
- # EventMachine processing loop and registers the XMPP protocol handler
- # with the ports defined in the server configuration file.
- class XmppServer
- include Vines::Log
-
- def initialize(config)
- @config = config
- end
-
- def start
- log.info('XMPP server started')
- at_exit { log.fatal('XMPP server stopped') }
- EM.epoll
- EM.kqueue
- EM.run do
- @config.ports.each {|port| port.start }
- end
- end
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/share/doc/ruby-diaspora-vines/changelog.Debian.gz b/debian/ruby-diaspora-vines/usr/share/doc/ruby-diaspora-vines/changelog.Debian.gz
deleted file mode 100644
index 3cecdb5..0000000
Binary files a/debian/ruby-diaspora-vines/usr/share/doc/ruby-diaspora-vines/changelog.Debian.gz and /dev/null differ
diff --git a/debian/ruby-diaspora-vines/usr/share/doc/ruby-diaspora-vines/copyright b/debian/ruby-diaspora-vines/usr/share/doc/ruby-diaspora-vines/copyright
deleted file mode 100644
index be8c2ed..0000000
--- a/debian/ruby-diaspora-vines/usr/share/doc/ruby-diaspora-vines/copyright
+++ /dev/null
@@ -1,31 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: diaspora-vines
-Source: https://github.com/diaspora/vines
-
-Files: *
-Copyright: 2010-2014 Negative Code
-License: Expat
-
-Files: debian/*
-Copyright: 2016 Sudheesh Shetty <sudheeshshetty at gmail.com>
-License: Expat
-Comment: the Debian packaging is licensed under the same terms as the original package.
-
-License: Expat
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- .
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- .
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
diff --git a/debian/ruby-diaspora-vines/usr/share/rubygems-integration/1.9.1/specifications/diaspora-vines-0.2.0.develop.4.gemspec b/debian/ruby-diaspora-vines/usr/share/rubygems-integration/1.9.1/specifications/diaspora-vines-0.2.0.develop.4.gemspec
deleted file mode 100644
index cc6aaf8..0000000
--- a/debian/ruby-diaspora-vines/usr/share/rubygems-integration/1.9.1/specifications/diaspora-vines-0.2.0.develop.4.gemspec
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
- s.name = "diaspora-vines"
- s.version = "0.2.0.develop.4"
-
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
- s.authors = ["David Graham", "Lukas Matt"]
- s.date = "2015-10-10"
- s.description = "Diaspora-vines is a Vines fork build for diaspora integration. DO NOT use it unless you know what you are doing!"
- s.email = ["david at negativecode.com", "lukas at zauberstuhl.de"]
- s.executables = ["vines"]
- s.files = ["Gemfile", "LICENSE", "README.md", "Rakefile", "bin/vines", "conf/certs/README", "conf/certs/ca-bundle.crt", "conf/config.rb", "lib/vines.rb", "lib/vines/cli.rb", "lib/vines/cluster.rb", "lib/vines/cluster/connection.rb", "lib/vines/cluster/publisher.rb", "lib/vines/cluster/pubsub.rb", "lib/vines/cluster/sessions.rb", "lib/vines/cluster/subscriber.rb", "lib/vines/command/cert.rb", "lib/vines/command/restart.rb", "lib/vines/command/start.rb", "lib/vines/command/stop.rb", "lib [...]
- s.homepage = "https://diasporafoundation.org"
- s.licenses = ["MIT"]
- s.require_paths = ["lib"]
- s.required_ruby_version = Gem::Requirement.new(">= 1.9.3")
- s.rubygems_version = "1.8.23"
- s.summary = "Diaspora-vines is a Vines fork build for diaspora integration."
- s.test_files = ["test/error_test.rb", "test/test_helper.rb", "test/storage/local_test.rb", "test/storage/mock_redis.rb", "test/storage/sql_schema.rb", "test/storage/sql_test.rb", "test/storage/null_test.rb", "test/storage/storage_tests.rb", "test/ext/nokogiri.rb", "test/contact_test.rb", "test/store_test.rb", "test/cluster/sessions_test.rb", "test/cluster/publisher_test.rb", "test/cluster/subscriber_test.rb", "test/config_test.rb", "test/stream/parser_test.rb", "test/stream/client/read [...]
-
- if s.respond_to? :specification_version then
- s.specification_version = 4
-
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
- s.add_runtime_dependency(%q<bcrypt>, ["~> 3.1"])
- s.add_runtime_dependency(%q<em-hiredis>, ["~> 0.3.0"])
- s.add_runtime_dependency(%q<eventmachine>, ["~> 1.0.8"])
- s.add_runtime_dependency(%q<http_parser.rb>, ["~> 0.6"])
- s.add_runtime_dependency(%q<nokogiri>, ["~> 1.6"])
- s.add_runtime_dependency(%q<activerecord>, ["~> 4.1"])
- s.add_development_dependency(%q<pronto>, ["~> 0.4.2"])
- s.add_development_dependency(%q<pronto-rubocop>, ["~> 0.4.4"])
- s.add_development_dependency(%q<rails>, ["~> 4.1"])
- s.add_development_dependency(%q<sqlite3>, ["~> 1.3.9"])
- s.add_development_dependency(%q<minitest>, ["~> 5.8"])
- s.add_development_dependency(%q<rake>, ["~> 10.3"])
- else
- s.add_dependency(%q<bcrypt>, ["~> 3.1"])
- s.add_dependency(%q<em-hiredis>, ["~> 0.3.0"])
- s.add_dependency(%q<eventmachine>, ["~> 1.0.8"])
- s.add_dependency(%q<http_parser.rb>, ["~> 0.6"])
- s.add_dependency(%q<nokogiri>, ["~> 1.6"])
- s.add_dependency(%q<activerecord>, ["~> 4.1"])
- s.add_dependency(%q<pronto>, ["~> 0.4.2"])
- s.add_dependency(%q<pronto-rubocop>, ["~> 0.4.4"])
- s.add_dependency(%q<rails>, ["~> 4.1"])
- s.add_dependency(%q<sqlite3>, ["~> 1.3.9"])
- s.add_dependency(%q<minitest>, ["~> 5.8"])
- s.add_dependency(%q<rake>, ["~> 10.3"])
- end
- else
- s.add_dependency(%q<bcrypt>, ["~> 3.1"])
- s.add_dependency(%q<em-hiredis>, ["~> 0.3.0"])
- s.add_dependency(%q<eventmachine>, ["~> 1.0.8"])
- s.add_dependency(%q<http_parser.rb>, ["~> 0.6"])
- s.add_dependency(%q<nokogiri>, ["~> 1.6"])
- s.add_dependency(%q<activerecord>, ["~> 4.1"])
- s.add_dependency(%q<pronto>, ["~> 0.4.2"])
- s.add_dependency(%q<pronto-rubocop>, ["~> 0.4.4"])
- s.add_dependency(%q<rails>, ["~> 4.1"])
- s.add_dependency(%q<sqlite3>, ["~> 1.3.9"])
- s.add_dependency(%q<minitest>, ["~> 5.8"])
- s.add_dependency(%q<rake>, ["~> 10.3"])
- end
-end
diff --git a/debian/ruby-diaspora-vines/usr/share/rubygems-integration/2.0/specifications/diaspora-vines-0.2.0.develop.4.gemspec b/debian/ruby-diaspora-vines/usr/share/rubygems-integration/2.0/specifications/diaspora-vines-0.2.0.develop.4.gemspec
deleted file mode 100644
index cc6aaf8..0000000
--- a/debian/ruby-diaspora-vines/usr/share/rubygems-integration/2.0/specifications/diaspora-vines-0.2.0.develop.4.gemspec
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-Gem::Specification.new do |s|
- s.name = "diaspora-vines"
- s.version = "0.2.0.develop.4"
-
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
- s.authors = ["David Graham", "Lukas Matt"]
- s.date = "2015-10-10"
- s.description = "Diaspora-vines is a Vines fork build for diaspora integration. DO NOT use it unless you know what you are doing!"
- s.email = ["david at negativecode.com", "lukas at zauberstuhl.de"]
- s.executables = ["vines"]
- s.files = ["Gemfile", "LICENSE", "README.md", "Rakefile", "bin/vines", "conf/certs/README", "conf/certs/ca-bundle.crt", "conf/config.rb", "lib/vines.rb", "lib/vines/cli.rb", "lib/vines/cluster.rb", "lib/vines/cluster/connection.rb", "lib/vines/cluster/publisher.rb", "lib/vines/cluster/pubsub.rb", "lib/vines/cluster/sessions.rb", "lib/vines/cluster/subscriber.rb", "lib/vines/command/cert.rb", "lib/vines/command/restart.rb", "lib/vines/command/start.rb", "lib/vines/command/stop.rb", "lib [...]
- s.homepage = "https://diasporafoundation.org"
- s.licenses = ["MIT"]
- s.require_paths = ["lib"]
- s.required_ruby_version = Gem::Requirement.new(">= 1.9.3")
- s.rubygems_version = "1.8.23"
- s.summary = "Diaspora-vines is a Vines fork build for diaspora integration."
- s.test_files = ["test/error_test.rb", "test/test_helper.rb", "test/storage/local_test.rb", "test/storage/mock_redis.rb", "test/storage/sql_schema.rb", "test/storage/sql_test.rb", "test/storage/null_test.rb", "test/storage/storage_tests.rb", "test/ext/nokogiri.rb", "test/contact_test.rb", "test/store_test.rb", "test/cluster/sessions_test.rb", "test/cluster/publisher_test.rb", "test/cluster/subscriber_test.rb", "test/config_test.rb", "test/stream/parser_test.rb", "test/stream/client/read [...]
-
- if s.respond_to? :specification_version then
- s.specification_version = 4
-
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
- s.add_runtime_dependency(%q<bcrypt>, ["~> 3.1"])
- s.add_runtime_dependency(%q<em-hiredis>, ["~> 0.3.0"])
- s.add_runtime_dependency(%q<eventmachine>, ["~> 1.0.8"])
- s.add_runtime_dependency(%q<http_parser.rb>, ["~> 0.6"])
- s.add_runtime_dependency(%q<nokogiri>, ["~> 1.6"])
- s.add_runtime_dependency(%q<activerecord>, ["~> 4.1"])
- s.add_development_dependency(%q<pronto>, ["~> 0.4.2"])
- s.add_development_dependency(%q<pronto-rubocop>, ["~> 0.4.4"])
- s.add_development_dependency(%q<rails>, ["~> 4.1"])
- s.add_development_dependency(%q<sqlite3>, ["~> 1.3.9"])
- s.add_development_dependency(%q<minitest>, ["~> 5.8"])
- s.add_development_dependency(%q<rake>, ["~> 10.3"])
- else
- s.add_dependency(%q<bcrypt>, ["~> 3.1"])
- s.add_dependency(%q<em-hiredis>, ["~> 0.3.0"])
- s.add_dependency(%q<eventmachine>, ["~> 1.0.8"])
- s.add_dependency(%q<http_parser.rb>, ["~> 0.6"])
- s.add_dependency(%q<nokogiri>, ["~> 1.6"])
- s.add_dependency(%q<activerecord>, ["~> 4.1"])
- s.add_dependency(%q<pronto>, ["~> 0.4.2"])
- s.add_dependency(%q<pronto-rubocop>, ["~> 0.4.4"])
- s.add_dependency(%q<rails>, ["~> 4.1"])
- s.add_dependency(%q<sqlite3>, ["~> 1.3.9"])
- s.add_dependency(%q<minitest>, ["~> 5.8"])
- s.add_dependency(%q<rake>, ["~> 10.3"])
- end
- else
- s.add_dependency(%q<bcrypt>, ["~> 3.1"])
- s.add_dependency(%q<em-hiredis>, ["~> 0.3.0"])
- s.add_dependency(%q<eventmachine>, ["~> 1.0.8"])
- s.add_dependency(%q<http_parser.rb>, ["~> 0.6"])
- s.add_dependency(%q<nokogiri>, ["~> 1.6"])
- s.add_dependency(%q<activerecord>, ["~> 4.1"])
- s.add_dependency(%q<pronto>, ["~> 0.4.2"])
- s.add_dependency(%q<pronto-rubocop>, ["~> 0.4.4"])
- s.add_dependency(%q<rails>, ["~> 4.1"])
- s.add_dependency(%q<sqlite3>, ["~> 1.3.9"])
- s.add_dependency(%q<minitest>, ["~> 5.8"])
- s.add_dependency(%q<rake>, ["~> 10.3"])
- end
-end
diff --git a/vines.log b/vines.log
deleted file mode 100644
index deb56da..0000000
--- a/vines.log
+++ /dev/null
@@ -1,130 +0,0 @@
-E, [2016-02-12T23:47:55.085846 #25416] ERROR -- : Thread pool operation failed: Unknown key: to
-D, [2016-02-12T23:48:06.486896 #25629] DEBUG -- : [1m[36m (143.3ms)[0m [1mCREATE TABLE "people" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "guid" varchar(255) NOT NULL, "url" text NOT NULL, "diaspora_handle" varchar(255) NOT NULL, "serialized_public_key" text NOT NULL, "owner_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "closed_account" boolean DEFAULT 'f', "fetch_status" integer DEFAULT 0) [0m
-D, [2016-02-12T23:48:06.577985 #25629] DEBUG -- : [1m[35m (89.6ms)[0m CREATE UNIQUE INDEX "index_people_on_diaspora_handle" ON "people" ("diaspora_handle")
-D, [2016-02-12T23:48:06.645059 #25629] DEBUG -- : [1m[36m (65.5ms)[0m [1mCREATE UNIQUE INDEX "index_people_on_guid" ON "people" ("guid")[0m
-D, [2016-02-12T23:48:06.712373 #25629] DEBUG -- : [1m[35m (65.2ms)[0m CREATE UNIQUE INDEX "index_people_on_owner_id" ON "people" ("owner_id")
-D, [2016-02-12T23:48:06.779652 #25629] DEBUG -- : [1m[36m (63.4ms)[0m [1mCREATE TABLE "profiles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "diaspora_handle" varchar(255), "first_name" varchar(127), "last_name" varchar(127), "image_url" varchar(255), "image_url_small" varchar(255), "image_url_medium" varchar(255), "birthday" date, "gender" varchar(255), "bio" text, "searchable" boolean DEFAULT 't' NOT NULL, "person_id" integer NOT NULL, "created_at" datetime NOT NULL, "upda [...]
-D, [2016-02-12T23:48:06.846775 #25629] DEBUG -- : [1m[35m (65.6ms)[0m CREATE INDEX "index_profiles_on_full_name_and_searchable" ON "profiles" ("full_name", "searchable")
-D, [2016-02-12T23:48:06.924884 #25629] DEBUG -- : [1m[36m (75.4ms)[0m [1mCREATE INDEX "index_profiles_on_full_name" ON "profiles" ("full_name")[0m
-D, [2016-02-12T23:48:07.025226 #25629] DEBUG -- : [1m[35m (98.2ms)[0m CREATE INDEX "index_profiles_on_person_id" ON "profiles" ("person_id")
-D, [2016-02-12T23:48:07.125525 #25629] DEBUG -- : [1m[36m (98.3ms)[0m [1mCREATE TABLE "aspects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "user_id" integer NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "contacts_visible" boolean DEFAULT 't' NOT NULL, "order_id" integer, "chat_enabled" boolean DEFAULT 'f') [0m
-D, [2016-02-12T23:48:07.238834 #25629] DEBUG -- : [1m[35m (112.4ms)[0m CREATE INDEX "index_aspects_on_user_id_and_contacts_visible" ON "aspects" ("user_id", "contacts_visible")
-D, [2016-02-12T23:48:07.360023 #25629] DEBUG -- : [1m[36m (120.2ms)[0m [1mCREATE INDEX "index_aspects_on_user_id" ON "aspects" ("user_id")[0m
-D, [2016-02-12T23:48:07.484572 #25629] DEBUG -- : [1m[35m (122.6ms)[0m CREATE TABLE "aspect_memberships" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "aspect_id" integer NOT NULL, "contact_id" integer NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
-D, [2016-02-12T23:48:07.595908 #25629] DEBUG -- : [1m[36m (109.9ms)[0m [1mCREATE UNIQUE INDEX "index_aspect_memberships_on_aspect_id_and_contact_id" ON "aspect_memberships" ("aspect_id", "contact_id")[0m
-D, [2016-02-12T23:48:07.708083 #25629] DEBUG -- : [1m[35m (110.7ms)[0m CREATE INDEX "index_aspect_memberships_on_aspect_id" ON "aspect_memberships" ("aspect_id")
-D, [2016-02-12T23:48:07.817086 #25629] DEBUG -- : [1m[36m (106.8ms)[0m [1mCREATE INDEX "index_aspect_memberships_on_contact_id" ON "aspect_memberships" ("contact_id")[0m
-D, [2016-02-12T23:48:07.928633 #25629] DEBUG -- : [1m[35m (109.8ms)[0m CREATE TABLE "contacts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer NOT NULL, "person_id" integer NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "sharing" boolean DEFAULT 'f' NOT NULL, "receiving" boolean DEFAULT 'f' NOT NULL)
-D, [2016-02-12T23:48:08.040263 #25629] DEBUG -- : [1m[36m (110.4ms)[0m [1mCREATE INDEX "index_contacts_on_person_id" ON "contacts" ("person_id")[0m
-D, [2016-02-12T23:48:08.154332 #25629] DEBUG -- : [1m[35m (111.8ms)[0m CREATE UNIQUE INDEX "index_contacts_on_user_id_and_person_id" ON "contacts" ("user_id", "person_id")
-D, [2016-02-12T23:48:08.254694 #25629] DEBUG -- : [1m[36m (98.3ms)[0m [1mCREATE TABLE "chat_contacts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer NOT NULL, "jid" varchar(255) NOT NULL, "name" varchar(255), "ask" varchar(128), "subscription" varchar(128) NOT NULL, "groups" text) [0m
-D, [2016-02-12T23:48:08.321845 #25629] DEBUG -- : [1m[35m (65.8ms)[0m CREATE UNIQUE INDEX "index_chat_contacts_on_user_id_and_jid" ON "chat_contacts" ("user_id", "jid")
-D, [2016-02-12T23:48:08.388890 #25629] DEBUG -- : [1m[36m (64.9ms)[0m [1mCREATE TABLE "chat_fragments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer NOT NULL, "root" varchar(256) NOT NULL, "namespace" varchar(256) NOT NULL, "xml" text NOT NULL) [0m
-D, [2016-02-12T23:48:08.489381 #25629] DEBUG -- : [1m[35m (99.1ms)[0m CREATE UNIQUE INDEX "index_chat_fragments_on_user_id" ON "chat_fragments" ("user_id")
-D, [2016-02-12T23:48:08.600853 #25629] DEBUG -- : [1m[36m (109.2ms)[0m [1mCREATE TABLE "chat_offline_messages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "from" varchar(255) NOT NULL, "to" varchar(255) NOT NULL, "message" text NOT NULL, "created_at" datetime NOT NULL) [0m
-D, [2016-02-12T23:48:08.733871 #25629] DEBUG -- : [1m[35m (129.6ms)[0m CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "username" varchar(255), "serialized_private_key" text, "getting_started" boolean DEFAULT 't' NOT NULL, "disable_mail" boolean DEFAULT 'f' NOT NULL, "language" varchar(255), "email" varchar(255) DEFAULT '' NOT NULL, "encrypted_password" varchar(255) DEFAULT '' NOT NULL, "invitation_token" varchar(60), "invitation_sent_at" datetime, "reset_pas [...]
-D, [2016-02-12T23:48:08.878627 #25629] DEBUG -- : [1m[36m (143.4ms)[0m [1mCREATE UNIQUE INDEX "index_users_on_authentication_token" ON "users" ("authentication_token")[0m
-D, [2016-02-12T23:48:09.006061 #25629] DEBUG -- : [1m[35m (125.8ms)[0m CREATE INDEX "index_users_on_email" ON "users" ("email")
-D, [2016-02-12T23:48:09.172983 #25629] DEBUG -- : [1m[36m (165.6ms)[0m [1mCREATE UNIQUE INDEX "index_users_on_invitation_service_and_invitation_identifier" ON "users" ("invitation_service", "invitation_identifier")[0m
-D, [2016-02-12T23:48:09.331707 #25629] DEBUG -- : [1m[35m (156.9ms)[0m CREATE INDEX "index_users_on_invitation_token" ON "users" ("invitation_token")
-D, [2016-02-12T23:48:09.561798 #25629] DEBUG -- : [1m[36m (227.6ms)[0m [1mCREATE UNIQUE INDEX "index_users_on_username" ON "users" ("username")[0m
-D, [2016-02-12T23:48:09.609386 #25629] DEBUG -- : [1m[35m (0.1ms)[0m begin transaction
-D, [2016-02-12T23:48:09.613066 #25629] DEBUG -- : [1m[36mSQL (0.5ms)[0m [1mINSERT INTO "users" ("authentication_token", "created_at", "email", "encrypted_password", "updated_at", "username") VALUES (?, ?, ?, ?, ?, ?)[0m [["authentication_token", "1234"], ["created_at", 2016-02-12 18:18:09 UTC], ["email", "test at test.de"], ["encrypted_password", "$2a$10$c2G6rHjGeamQIOFI0c1/b.4mvFBw4AfOtgVrAkO1QPMuAyporj5e6"], ["updated_at", 2016-02-12 18:18:09 UTC], ["username", "test"]]
-D, [2016-02-12T23:48:09.740016 #25629] DEBUG -- : [1m[35m (126.5ms)[0m commit transaction
-D, [2016-02-12T23:48:09.752720 #25629] DEBUG -- : [1m[36m (0.1ms)[0m [1mbegin transaction[0m
-D, [2016-02-12T23:48:09.755773 #25629] DEBUG -- : [1m[35mSQL (1.0ms)[0m INSERT INTO "people" ("created_at", "diaspora_handle", "guid", "owner_id", "serialized_public_key", "updated_at", "url") VALUES (?, ?, ?, ?, ?, ?, ?) [["created_at", 2016-02-12 18:18:09 UTC], ["diaspora_handle", "test at local.host"], ["guid", "1697a4b0198901321e9b10e6ba921ce9"], ["owner_id", 1], ["serialized_public_key", "some pub key"], ["updated_at", 2016-02-12 18:18:09 UTC], ["url", "http://remote.host/"]]
-D, [2016-02-12T23:48:09.918366 #25629] DEBUG -- : [1m[36m (162.0ms)[0m [1mcommit transaction[0m
-D, [2016-02-12T23:48:09.937458 #25629] DEBUG -- : [1m[35m (0.1ms)[0m begin transaction
-D, [2016-02-12T23:48:09.939663 #25629] DEBUG -- : [1m[36mSQL (0.9ms)[0m [1mINSERT INTO "profiles" ("created_at", "diaspora_handle", "first_name", "image_url", "last_name", "person_id", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?)[0m [["created_at", 2016-02-12 18:18:09 UTC], ["diaspora_handle", "test at local.host"], ["first_name", "Harry"], ["image_url", "http://path.to/image.png"], ["last_name", "Hirsch"], ["person_id", 1], ["updated_at", 2016-02-12 18:18:09 UTC]]
-D, [2016-02-12T23:48:10.098728 #25629] DEBUG -- : [1m[35m (158.7ms)[0m commit transaction
-D, [2016-02-12T23:48:10.109731 #25629] DEBUG -- : [1m[36m (0.1ms)[0m [1mbegin transaction[0m
-D, [2016-02-12T23:48:10.112385 #25629] DEBUG -- : [1m[35mSQL (0.6ms)[0m INSERT INTO "contacts" ("created_at", "person_id", "receiving", "sharing", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?) [["created_at", 2016-02-12 18:18:10 UTC], ["person_id", 1], ["receiving", true], ["sharing", true], ["updated_at", 2016-02-12 18:18:10 UTC], ["user_id", 1]]
-D, [2016-02-12T23:48:10.244333 #25629] DEBUG -- : [1m[36m (131.5ms)[0m [1mcommit transaction[0m
-D, [2016-02-12T23:48:10.260495 #25629] DEBUG -- : [1m[35m (0.1ms)[0m begin transaction
-D, [2016-02-12T23:48:10.262514 #25629] DEBUG -- : [1m[36mSQL (0.7ms)[0m [1mINSERT INTO "aspects" ("created_at", "name", "updated_at", "user_id") VALUES (?, ?, ?, ?)[0m [["created_at", 2016-02-12 18:18:10 UTC], ["name", "without_chat"], ["updated_at", 2016-02-12 18:18:10 UTC], ["user_id", 1]]
-D, [2016-02-12T23:48:10.389111 #25629] DEBUG -- : [1m[35m (126.2ms)[0m commit transaction
-D, [2016-02-12T23:48:10.402073 #25629] DEBUG -- : [1m[36m (0.1ms)[0m [1mbegin transaction[0m
-D, [2016-02-12T23:48:10.405202 #25629] DEBUG -- : [1m[35mSQL (0.8ms)[0m INSERT INTO "aspect_memberships" ("aspect_id", "contact_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["aspect_id", 1], ["contact_id", 1], ["created_at", 2016-02-12 18:18:10 UTC], ["updated_at", 2016-02-12 18:18:10 UTC]]
-D, [2016-02-12T23:48:10.555570 #25629] DEBUG -- : [1m[36m (149.7ms)[0m [1mcommit transaction[0m
-D, [2016-02-12T23:48:10.567804 #25629] DEBUG -- : [1m[35m (0.1ms)[0m begin transaction
-D, [2016-02-12T23:48:10.571148 #25629] DEBUG -- : [1m[36mSQL (1.4ms)[0m [1mINSERT INTO "chat_offline_messages" ("created_at", "from", "message", "to") VALUES (?, ?, ?, ?)[0m [["created_at", 2016-02-12 18:18:10 UTC], ["from", "test at local.host"], ["message", "test"], ["to", "someone at inthe.void"]]
-D, [2016-02-12T23:48:10.700746 #25629] DEBUG -- : [1m[35m (128.9ms)[0m commit transaction
-D, [2016-02-12T23:48:10.702464 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.7ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages"[0m
-D, [2016-02-12T23:48:10.769189 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.4ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages" WHERE "chat_offline_messages"."id" = ? LIMIT 1 [["id", 1]]
-D, [2016-02-12T23:48:10.769857 #25629] DEBUG -- : [1m[36m (0.1ms)[0m [1mbegin transaction[0m
-D, [2016-02-12T23:48:10.771754 #25629] DEBUG -- : [1m[35mSQL (0.5ms)[0m DELETE FROM "chat_offline_messages" WHERE "chat_offline_messages"."id" = ? [["id", 1]]
-D, [2016-02-12T23:48:10.923421 #25629] DEBUG -- : [1m[36m (151.3ms)[0m [1mcommit transaction[0m
-D, [2016-02-12T23:48:10.925786 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.4ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:10.988387 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.5ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1[0m
-D, [2016-02-12T23:48:11.012548 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Contact Load (0.3ms)[0m SELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id [["user_id", 1]]
-D, [2016-02-12T23:48:11.015611 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatContact Load (0.2ms)[0m [1mSELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ?[0m [["user_id", 1]]
-D, [2016-02-12T23:48:11.634679 #25629] DEBUG -- : [1m[35mSQL (618.1ms)[0m UPDATE "aspects" SET "name" = 'with_chat', "chat_enabled" = 't' WHERE "aspects"."id" = 1
-D, [2016-02-12T23:48:11.641931 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.6ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1[0m
-D, [2016-02-12T23:48:11.648091 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Contact Load (0.6ms)[0m SELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id [["user_id", 1]]
-D, [2016-02-12T23:48:11.653867 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Person Load (0.2ms)[0m [1mSELECT "people".* FROM "people" WHERE "people"."id" = ? ORDER BY "people"."id" ASC LIMIT 1[0m [["id", 1]]
-D, [2016-02-12T23:48:11.657626 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Profile Load (0.2ms)[0m SELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1 [["person_id", 1]]
-D, [2016-02-12T23:48:11.661667 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Aspect Load (0.3ms)[0m [1mSELECT "aspects".* FROM "aspects" INNER JOIN "aspect_memberships" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "aspect_memberships"."contact_id" = ?[0m [["contact_id", 1]]
-D, [2016-02-12T23:48:11.663822 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatContact Load (0.2ms)[0m SELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ? [["user_id", 1]]
-D, [2016-02-12T23:48:11.666804 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.3ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages"[0m
-D, [2016-02-12T23:48:11.668970 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.2ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:11.675639 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.3ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages" WHERE "chat_offline_messages"."to" = 'someone at inthe.void'[0m
-D, [2016-02-12T23:48:11.676873 #25629] DEBUG -- : [1m[35m (0.1ms)[0m begin transaction
-D, [2016-02-12T23:48:11.678910 #25629] DEBUG -- : [1m[36mSQL (0.8ms)[0m [1mINSERT INTO "chat_offline_messages" ("created_at", "from", "message", "to") VALUES (?, ?, ?, ?)[0m [["created_at", 2016-02-12 18:18:11 UTC], ["from", "test at local.host"], ["message", "test"], ["to", "someone at inthe.void"]]
-D, [2016-02-12T23:48:11.834382 #25629] DEBUG -- : [1m[35m (155.0ms)[0m commit transaction
-D, [2016-02-12T23:48:11.840302 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.5ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages" WHERE "chat_offline_messages"."to" = 'someone at inthe.void'[0m
-D, [2016-02-12T23:48:11.843017 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.4ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:11.843478 #25629] DEBUG -- : [1m[36m (0.1ms)[0m [1mbegin transaction[0m
-D, [2016-02-12T23:48:11.845474 #25629] DEBUG -- : [1m[35mSQL (0.6ms)[0m DELETE FROM "chat_offline_messages" WHERE "chat_offline_messages"."id" = ? [["id", 2]]
-D, [2016-02-12T23:48:12.023724 #25629] DEBUG -- : [1m[36m (153.5ms)[0m [1mcommit transaction[0m
-E, [2016-02-12T23:48:12.030536 #25629] ERROR -- : Thread pool operation failed: Unknown key: to
-D, [2016-02-12T23:48:12.034472 #25629] DEBUG -- : [1m[35m (0.3ms)[0m SELECT COUNT(*) FROM "chat_offline_messages" WHERE "chat_offline_messages"."to" = 'someone at inthe.void'
-D, [2016-02-12T23:48:12.048540 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.8ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages"[0m
-D, [2016-02-12T23:48:12.052123 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.4ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:12.060116 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Person Load (0.4ms)[0m [1mSELECT "people".* FROM "people" WHERE "people"."diaspora_handle" = 'test at local.host' LIMIT 1[0m
-D, [2016-02-12T23:48:12.063652 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Profile Load (0.6ms)[0m SELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1 [["person_id", 1]]
-D, [2016-02-12T23:48:12.070412 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.3ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages"[0m
-D, [2016-02-12T23:48:12.080356 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.3ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:12.090811 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.5ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1[0m
-D, [2016-02-12T23:48:12.096454 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Contact Load (0.4ms)[0m SELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id [["user_id", 1]]
-D, [2016-02-12T23:48:12.097640 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Person Load (0.1ms)[0m [1mSELECT "people".* FROM "people" WHERE "people"."id" = ? ORDER BY "people"."id" ASC LIMIT 1[0m [["id", 1]]
-D, [2016-02-12T23:48:12.098852 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Profile Load (0.2ms)[0m SELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1 [["person_id", 1]]
-D, [2016-02-12T23:48:12.099977 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Aspect Load (0.3ms)[0m [1mSELECT "aspects".* FROM "aspects" INNER JOIN "aspect_memberships" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "aspect_memberships"."contact_id" = ?[0m [["contact_id", 1]]
-D, [2016-02-12T23:48:12.101192 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatContact Load (0.1ms)[0m SELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ? [["user_id", 1]]
-D, [2016-02-12T23:48:12.103202 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.6ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1[0m
-D, [2016-02-12T23:48:12.105621 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Contact Load (0.4ms)[0m SELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id [["user_id", 1]]
-D, [2016-02-12T23:48:12.107151 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Person Load (0.4ms)[0m [1mSELECT "people".* FROM "people" WHERE "people"."id" = ? ORDER BY "people"."id" ASC LIMIT 1[0m [["id", 1]]
-D, [2016-02-12T23:48:12.108644 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Profile Load (0.3ms)[0m SELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1 [["person_id", 1]]
-D, [2016-02-12T23:48:12.110462 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Aspect Load (0.2ms)[0m [1mSELECT "aspects".* FROM "aspects" INNER JOIN "aspect_memberships" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "aspect_memberships"."contact_id" = ?[0m [["contact_id", 1]]
-D, [2016-02-12T23:48:12.112166 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatContact Load (0.2ms)[0m SELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ? [["user_id", 1]]
-D, [2016-02-12T23:48:12.114044 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.5ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1[0m
-D, [2016-02-12T23:48:12.116255 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Contact Load (0.3ms)[0m SELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id [["user_id", 1]]
-D, [2016-02-12T23:48:12.117670 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Person Load (0.2ms)[0m [1mSELECT "people".* FROM "people" WHERE "people"."id" = ? ORDER BY "people"."id" ASC LIMIT 1[0m [["id", 1]]
-D, [2016-02-12T23:48:12.119046 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Profile Load (0.2ms)[0m SELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1 [["person_id", 1]]
-D, [2016-02-12T23:48:12.120133 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Aspect Load (0.1ms)[0m [1mSELECT "aspects".* FROM "aspects" INNER JOIN "aspect_memberships" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "aspect_memberships"."contact_id" = ?[0m [["contact_id", 1]]
-D, [2016-02-12T23:48:12.120731 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatContact Load (0.1ms)[0m SELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ? [["user_id", 1]]
-D, [2016-02-12T23:48:12.122647 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatOfflineMessage Load (0.2ms)[0m [1mSELECT "chat_offline_messages".* FROM "chat_offline_messages"[0m
-D, [2016-02-12T23:48:12.132814 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::User Load (0.5ms)[0m SELECT "users".* FROM "users" WHERE "users"."username" = 'test2' LIMIT 1
-D, [2016-02-12T23:48:12.134433 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.6ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" = 'test2' LIMIT 1[0m
-D, [2016-02-12T23:48:12.136764 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.3ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:12.148501 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::User Load (0.3ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."username" IS NULL LIMIT 1[0m
-D, [2016-02-12T23:48:12.149870 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::User Load (0.3ms)[0m SELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1
-D, [2016-02-12T23:48:12.153525 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Contact Load (0.3ms)[0m [1mSELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id[0m [["user_id", 1]]
-D, [2016-02-12T23:48:12.155170 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Person Load (0.2ms)[0m SELECT "people".* FROM "people" WHERE "people"."id" = ? ORDER BY "people"."id" ASC LIMIT 1 [["id", 1]]
-D, [2016-02-12T23:48:12.156944 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Profile Load (0.2ms)[0m [1mSELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1[0m [["person_id", 1]]
-D, [2016-02-12T23:48:12.158140 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Aspect Load (0.2ms)[0m SELECT "aspects".* FROM "aspects" INNER JOIN "aspect_memberships" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "aspect_memberships"."contact_id" = ? [["contact_id", 1]]
-D, [2016-02-12T23:48:12.159616 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatContact Load (0.2ms)[0m [1mSELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ?[0m [["user_id", 1]]
-D, [2016-02-12T23:48:12.229953 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::User Load (0.5ms)[0m SELECT "users".* FROM "users" WHERE "users"."username" = 'test' LIMIT 1
-D, [2016-02-12T23:48:12.231801 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Contact Load (0.3ms)[0m [1mSELECT "contacts".* FROM "contacts" INNER JOIN "aspect_memberships" ON "aspect_memberships"."contact_id" = "contacts"."id" INNER JOIN "aspects" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "contacts"."user_id" = ? AND (aspects.chat_enabled = 't') GROUP BY person_id, contacts.id[0m [["user_id", 1]]
-D, [2016-02-12T23:48:12.233066 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Person Load (0.4ms)[0m SELECT "people".* FROM "people" WHERE "people"."id" = ? ORDER BY "people"."id" ASC LIMIT 1 [["id", 1]]
-D, [2016-02-12T23:48:12.234183 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Profile Load (0.3ms)[0m [1mSELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1[0m [["person_id", 1]]
-D, [2016-02-12T23:48:12.235585 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Aspect Load (0.2ms)[0m SELECT "aspects".* FROM "aspects" INNER JOIN "aspect_memberships" ON "aspects"."id" = "aspect_memberships"."aspect_id" WHERE "aspect_memberships"."contact_id" = ? [["contact_id", 1]]
-D, [2016-02-12T23:48:12.236636 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::ChatContact Load (0.2ms)[0m [1mSELECT "chat_contacts".* FROM "chat_contacts" WHERE "chat_contacts"."user_id" = ?[0m [["user_id", 1]]
-D, [2016-02-12T23:48:12.312647 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.4ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-D, [2016-02-12T23:48:12.316812 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Person Load (0.2ms)[0m [1mSELECT "people".* FROM "people" WHERE "people"."diaspora_handle" = 'someone at inthe.void' LIMIT 1[0m
-D, [2016-02-12T23:48:12.317598 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::Person Load (0.2ms)[0m SELECT "people".* FROM "people" WHERE "people"."diaspora_handle" = 'test at local.host' LIMIT 1
-D, [2016-02-12T23:48:12.319368 #25629] DEBUG -- : [1m[36mVines::Storage::Sql::Profile Load (0.2ms)[0m [1mSELECT "profiles".* FROM "profiles" WHERE "profiles"."person_id" = ? ORDER BY "profiles"."id" ASC LIMIT 1[0m [["person_id", 1]]
-D, [2016-02-12T23:48:12.320718 #25629] DEBUG -- : [1m[35mVines::Storage::Sql::ChatOfflineMessage Load (0.1ms)[0m SELECT "chat_offline_messages".* FROM "chat_offline_messages"
-I, [2016-02-12T23:48:12.542995 #25629] INFO -- : Authenticating user: alice at wonderland.lit
-I, [2016-02-12T23:48:12.544076 #25629] INFO -- : Authenticating user: alice at wonderland.lit
-I, [2016-02-12T23:48:12.544442 #25629] INFO -- : Authenticating user: alice at wonderland.lit
-I, [2016-02-12T23:48:12.544535 #25629] INFO -- : Authentication succeeded: alice at wonderland.lit
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-diaspora-vines.git
More information about the Pkg-ruby-extras-commits
mailing list