diaspora-vines 0.1.25 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/conf/config.rb +4 -0
- data/lib/vines/config/diaspora.rb +2 -0
- data/lib/vines/config.rb +5 -0
- data/lib/vines/stanza/iq/disco_info.rb +1 -1
- data/lib/vines/stanza/message.rb +5 -2
- data/lib/vines/stanza/presence.rb +26 -0
- data/lib/vines/storage/local.rb +12 -0
- data/lib/vines/storage/null.rb +12 -0
- data/lib/vines/storage/sql.rb +39 -0
- data/lib/vines/storage.rb +31 -0
- data/lib/vines/version.rb +1 -1
- data/lib/vines.rb +3 -0
- data/test/stanza/iq/disco_info_test.rb +2 -0
- data/test/stanza/message_test.rb +1 -0
- data/test/storage/sql_schema.rb +7 -0
- data/test/storage/sql_test.rb +72 -0
- metadata +73 -74
- data/lib/vines/stanza/iq/offline.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69f1732a51eafbd6380760225853ba02f152146c
|
4
|
+
data.tar.gz: ee927ae9eb69d6584cede7180dc24ceae9bff465
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e520f4868fb123ccd57bf09437cf1219edc90af497dbdac5f63079afd028a275d200ac7dc83d4e12b5a6af374dc9c09b0662bead7e953e8e927c1ee01446dd60
|
7
|
+
data.tar.gz: 6170127b740aaa2b0b1eb61a708e75aa3d103561bcdc611fe21f114f2c20a61aba1707a1fc99ca2e445916afdf5fb3a110a3a33eccc6efe9fa99ac0793fb8a62
|
data/conf/config.rb
CHANGED
@@ -12,6 +12,10 @@ Vines::Config.configure do
|
|
12
12
|
# `vines init`.
|
13
13
|
certs 'conf/certs'
|
14
14
|
|
15
|
+
# Set the maximum of offline messages stored per user.
|
16
|
+
# If it exceeds, old messages will be deleted.
|
17
|
+
max_offline_msgs 150
|
18
|
+
|
15
19
|
host 'diaspora' do
|
16
20
|
cross_domain_messages true
|
17
21
|
accept_self_signed false
|
@@ -9,6 +9,8 @@ Vines::Config.configure do
|
|
9
9
|
|
10
10
|
certs AppConfig.chat.server.certs.to_s
|
11
11
|
|
12
|
+
max_offline_msgs AppConfig.chat.server.max_offline_msgs.to_i
|
13
|
+
|
12
14
|
host diaspora_domain do
|
13
15
|
cross_domain_messages AppConfig.chat.server.cross_domain_messages
|
14
16
|
accept_self_signed AppConfig.chat.server.accept_self_signed
|
data/lib/vines/config.rb
CHANGED
@@ -21,6 +21,7 @@ module Vines
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def initialize(&block)
|
24
|
+
@max_offline_msgs = 150
|
24
25
|
@certs = File.expand_path('conf/certs')
|
25
26
|
@vhosts, @ports, @cluster = {}, {}, nil
|
26
27
|
@null = Storage::Null.new
|
@@ -33,6 +34,10 @@ module Vines
|
|
33
34
|
dir ? @certs = File.expand_path(dir) : @certs
|
34
35
|
end
|
35
36
|
|
37
|
+
def max_offline_msgs(count=nil)
|
38
|
+
count ? @max_offline_msgs = count : @max_offline_msgs
|
39
|
+
end
|
40
|
+
|
36
41
|
def host(*names, &block)
|
37
42
|
names = names.flatten.map {|name| name.downcase }
|
38
43
|
dupes = names.uniq.size != names.size || (@vhosts.keys & names).any?
|
@@ -19,7 +19,7 @@ module Vines
|
|
19
19
|
features(query, :disco_info, :ping, :pubsub, *pubsub)
|
20
20
|
else
|
21
21
|
identity(query, 'server', 'im')
|
22
|
-
features = [:disco_info, :disco_items, :ping, :vcard, :version]
|
22
|
+
features = [:disco_info, :disco_items, :offline, :ping, :vcard, :version]
|
23
23
|
features << :storage if stream.config.private_storage?(validate_to || stream.domain)
|
24
24
|
features(query, features)
|
25
25
|
end
|
data/lib/vines/stanza/message.rb
CHANGED
@@ -24,8 +24,11 @@ module Vines
|
|
24
24
|
recipients = stream.connected_resources(to)
|
25
25
|
if recipients.empty?
|
26
26
|
if user = storage(to.domain).find_user(to)
|
27
|
-
|
28
|
-
|
27
|
+
if Config.instance.max_offline_msgs > 0 && self[TYPE].match(/(chat|normal)/i)
|
28
|
+
storage(to.domain).save_message(stream.user.jid.bare.to_s, to.to_s, @node.text)
|
29
|
+
else
|
30
|
+
raise StanzaErrors::ServiceUnavailable.new(self, 'cancel')
|
31
|
+
end
|
29
32
|
end
|
30
33
|
else
|
31
34
|
broadcast(recipients)
|
@@ -18,10 +18,36 @@ module Vines
|
|
18
18
|
unless self['type'].nil?
|
19
19
|
raise StanzaErrors::BadRequest.new(self, 'modify')
|
20
20
|
end
|
21
|
+
if Config.instance.max_offline_msgs > 0
|
22
|
+
check_offline_messages(stream.last_broadcast_presence)
|
23
|
+
end
|
21
24
|
dir = outbound? ? 'outbound' : 'inbound'
|
22
25
|
method("#{dir}_broadcast_presence").call
|
23
26
|
end
|
24
27
|
|
28
|
+
def check_offline_messages(presence)
|
29
|
+
priority = presence.xpath("//priority").text.to_i rescue nil
|
30
|
+
if priority != nil && priority >= 0
|
31
|
+
jid = stream.user.jid.to_s
|
32
|
+
storage.find_messages(jid).each do |id, m|
|
33
|
+
stamp = Time.parse(m[:created_at].to_s)
|
34
|
+
doc = Nokogiri::XML::Builder.new
|
35
|
+
doc.message(:type => "chat", :from => m[:from], :to => m[:to]) do |msg|
|
36
|
+
msg.send(:"body", m[:message])
|
37
|
+
msg.send(:"delay", "Offline Storage",
|
38
|
+
:xmlns => NAMESPACES[:delay],
|
39
|
+
:from => m[:from],
|
40
|
+
:stamp => stamp.iso8601)
|
41
|
+
end
|
42
|
+
xml = doc.to_xml :save_with => Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
|
43
|
+
stream.write(xml)
|
44
|
+
# after delivering it we should
|
45
|
+
# delete the message from database
|
46
|
+
storage.destroy_message(id)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
25
51
|
def outbound?
|
26
52
|
!inbound?
|
27
53
|
end
|
data/lib/vines/storage/local.rb
CHANGED
@@ -77,6 +77,18 @@ module Vines
|
|
77
77
|
save(file, node.to_xml)
|
78
78
|
end
|
79
79
|
|
80
|
+
def find_messages(jid)
|
81
|
+
{}
|
82
|
+
end
|
83
|
+
|
84
|
+
def save_message(from, to, message)
|
85
|
+
# do nothing
|
86
|
+
end
|
87
|
+
|
88
|
+
def destroy_message(id)
|
89
|
+
# do nothing
|
90
|
+
end
|
91
|
+
|
80
92
|
private
|
81
93
|
|
82
94
|
# Resolves a relative file name into an absolute path inside the
|
data/lib/vines/storage/null.rb
CHANGED
@@ -34,6 +34,18 @@ module Vines
|
|
34
34
|
def save_fragment(jid, node)
|
35
35
|
# do nothing
|
36
36
|
end
|
37
|
+
|
38
|
+
def find_messages(jid)
|
39
|
+
{}
|
40
|
+
end
|
41
|
+
|
42
|
+
def save_message(from, to, message)
|
43
|
+
# do nothing
|
44
|
+
end
|
45
|
+
|
46
|
+
def destroy_message(id)
|
47
|
+
# do nothing
|
48
|
+
end
|
37
49
|
end
|
38
50
|
end
|
39
51
|
end
|
data/lib/vines/storage/sql.rb
CHANGED
@@ -56,6 +56,8 @@ module Vines
|
|
56
56
|
has_one :person, :foreign_key => :owner_id
|
57
57
|
end
|
58
58
|
|
59
|
+
class ChatOfflineMessage < ActiveRecord::Base; end
|
60
|
+
|
59
61
|
class ChatContact < ActiveRecord::Base
|
60
62
|
belongs_to :users
|
61
63
|
end
|
@@ -200,6 +202,43 @@ module Vines
|
|
200
202
|
end
|
201
203
|
with_connection :save_vcard
|
202
204
|
|
205
|
+
def find_messages(jid)
|
206
|
+
jid = JID.new(jid).bare.to_s
|
207
|
+
return if jid.empty?
|
208
|
+
results = Hash.new
|
209
|
+
Sql::ChatOfflineMessage.where(:to => jid).each do |r|
|
210
|
+
results[r.id] = {
|
211
|
+
:from => r.from,
|
212
|
+
:to => r.to,
|
213
|
+
:message => r.message,
|
214
|
+
:created_at => r.created_at
|
215
|
+
}
|
216
|
+
end
|
217
|
+
return results
|
218
|
+
end
|
219
|
+
with_connection :find_messages
|
220
|
+
|
221
|
+
def save_message(from, to, msg)
|
222
|
+
return if from.empty? || to.empty? || msg.empty?
|
223
|
+
com = Sql::ChatOfflineMessage
|
224
|
+
current = com.count(:to => to)
|
225
|
+
unless current < Config.instance.max_offline_msgs
|
226
|
+
com.where(:to => to)
|
227
|
+
.order(created_at: :asc)
|
228
|
+
.first
|
229
|
+
.delete
|
230
|
+
end
|
231
|
+
com.create(:from => from, :to => to, :message => msg)
|
232
|
+
end
|
233
|
+
with_connection :save_message
|
234
|
+
|
235
|
+
def destroy_message(id)
|
236
|
+
id = id.to_i rescue nil
|
237
|
+
return if id.nil?
|
238
|
+
Sql::ChatOfflineMessage.find(id).destroy
|
239
|
+
end
|
240
|
+
with_connection :destroy_message
|
241
|
+
|
203
242
|
def find_fragment(jid, node)
|
204
243
|
jid = JID.new(jid).bare.to_s
|
205
244
|
return if jid.empty?
|
data/lib/vines/storage.rb
CHANGED
@@ -212,6 +212,37 @@ module Vines
|
|
212
212
|
raise 'subclass must implement'
|
213
213
|
end
|
214
214
|
|
215
|
+
# Check whether offline messages are available for the user
|
216
|
+
# jid - The String or JID of the user, possibly nil. This may be
|
217
|
+
# either a bare JID or full JID. Implementations of this method
|
218
|
+
# must convert the JID to a bare JID before searching for
|
219
|
+
# offline messages.
|
220
|
+
#
|
221
|
+
# Returns hash
|
222
|
+
def find_messages(jid)
|
223
|
+
raise 'subclass must implement'
|
224
|
+
end
|
225
|
+
|
226
|
+
# Save the offline message to the database, and return when the save is complete.
|
227
|
+
#
|
228
|
+
# from - The String or JID of the user.
|
229
|
+
# to - The String or JID of the user.
|
230
|
+
# message - The message you want to store.
|
231
|
+
#
|
232
|
+
# Returns nothing.
|
233
|
+
def save_mesage(from, to, message)
|
234
|
+
raise 'subclass must implement'
|
235
|
+
end
|
236
|
+
|
237
|
+
# Delete a offline message from database.
|
238
|
+
#
|
239
|
+
# id - The identifier of the offline message
|
240
|
+
#
|
241
|
+
# Returns nothing.
|
242
|
+
def destroy_message(id)
|
243
|
+
raise 'subclass must implement'
|
244
|
+
end
|
245
|
+
|
215
246
|
private
|
216
247
|
|
217
248
|
# Determine if any of the arguments are nil or empty strings.
|
data/lib/vines/version.rb
CHANGED
data/lib/vines.rb
CHANGED
@@ -15,6 +15,7 @@ module Vines
|
|
15
15
|
:bind => 'urn:ietf:params:xml:ns:xmpp-bind'.freeze,
|
16
16
|
:session => 'urn:ietf:params:xml:ns:xmpp-session'.freeze,
|
17
17
|
:ping => 'urn:xmpp:ping'.freeze,
|
18
|
+
:delay => 'urn:xmpp:delay'.freeze,
|
18
19
|
:pubsub => 'http://jabber.org/protocol/pubsub'.freeze,
|
19
20
|
:pubsub_event => 'http://jabber.org/protocol/pubsub#event'.freeze,
|
20
21
|
:pubsub_create => 'http://jabber.org/protocol/pubsub#create-nodes'.freeze,
|
@@ -26,6 +27,7 @@ module Vines
|
|
26
27
|
:disco_items => 'http://jabber.org/protocol/disco#items'.freeze,
|
27
28
|
:disco_info => 'http://jabber.org/protocol/disco#info'.freeze,
|
28
29
|
:http_bind => 'http://jabber.org/protocol/httpbind'.freeze,
|
30
|
+
:offline => 'msgoffline'.freeze,
|
29
31
|
:bosh => 'urn:xmpp:xbosh'.freeze,
|
30
32
|
:vcard => 'vcard-temp'.freeze,
|
31
33
|
:si => 'http://jabber.org/protocol/si'.freeze,
|
@@ -72,6 +74,7 @@ end
|
|
72
74
|
resolv
|
73
75
|
set
|
74
76
|
socket
|
77
|
+
time
|
75
78
|
uri
|
76
79
|
yaml
|
77
80
|
|
@@ -35,6 +35,7 @@ describe Vines::Stanza::Iq::DiscoInfo do
|
|
35
35
|
<identity category="server" type="im"/>
|
36
36
|
<feature var="http://jabber.org/protocol/disco#info"/>
|
37
37
|
<feature var="http://jabber.org/protocol/disco#items"/>
|
38
|
+
<feature var="msgoffline"/>
|
38
39
|
<feature var="urn:xmpp:ping"/>
|
39
40
|
<feature var="vcard-temp"/>
|
40
41
|
<feature var="jabber:iq:version"/>
|
@@ -59,6 +60,7 @@ describe Vines::Stanza::Iq::DiscoInfo do
|
|
59
60
|
<identity category="server" type="im"/>
|
60
61
|
<feature var="http://jabber.org/protocol/disco#info"/>
|
61
62
|
<feature var="http://jabber.org/protocol/disco#items"/>
|
63
|
+
<feature var="msgoffline"/>
|
62
64
|
<feature var="urn:xmpp:ping"/>
|
63
65
|
<feature var="vcard-temp"/>
|
64
66
|
<feature var="jabber:iq:version"/>
|
data/test/stanza/message_test.rb
CHANGED
@@ -72,6 +72,7 @@ describe Vines::Stanza::Message do
|
|
72
72
|
let(:storage) { MiniTest::Mock.new }
|
73
73
|
|
74
74
|
before do
|
75
|
+
skip # due offline message implementation
|
75
76
|
storage.expect :find_user, hatter, [hatter.jid]
|
76
77
|
stream.expect :storage, storage, [hatter.jid.domain]
|
77
78
|
stream.expect :connected_resources, [], [hatter.jid]
|
data/test/storage/sql_schema.rb
CHANGED
@@ -125,6 +125,13 @@ module SqlSchema
|
|
125
125
|
|
126
126
|
add_index "chat_fragments", ["user_id"], :name => "index_chat_fragments_on_user_id", :unique => true
|
127
127
|
|
128
|
+
create_table "chat_offline_messages", force: true do |t|
|
129
|
+
t.string "from", null: false
|
130
|
+
t.string "to", null: false
|
131
|
+
t.text "message", null: false
|
132
|
+
t.datetime "created_at", null: false
|
133
|
+
end
|
134
|
+
|
128
135
|
create_table "users", :force => true do |t|
|
129
136
|
t.string "username"
|
130
137
|
t.text "serialized_private_key"
|
data/test/storage/sql_test.rb
CHANGED
@@ -3,6 +3,14 @@
|
|
3
3
|
require 'test_helper'
|
4
4
|
require 'storage/sql_schema'
|
5
5
|
|
6
|
+
module Vines
|
7
|
+
class Config
|
8
|
+
def instance.max_offline_msgs
|
9
|
+
return 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
module Diaspora
|
7
15
|
class Application < Rails::Application
|
8
16
|
def config.database_configuration
|
@@ -75,6 +83,70 @@ describe Vines::Storage::Sql do
|
|
75
83
|
File.delete(db) if File.exist?(db)
|
76
84
|
end
|
77
85
|
|
86
|
+
def test_save_message
|
87
|
+
fibered do
|
88
|
+
db = storage
|
89
|
+
|
90
|
+
assert_nil db.save_message("", "", "")
|
91
|
+
assert_nil db.save_message("dude@valid@jid", "dude2@valid.jid", "")
|
92
|
+
assert_nil db.save_message("dude@valid@jid", "", "test")
|
93
|
+
assert_nil db.save_message("", "dude2@valid.jid", "test")
|
94
|
+
|
95
|
+
db.save_message(@test_user[:jid], "someone@inthe.void", "test")
|
96
|
+
|
97
|
+
msgs = Vines::Storage::Sql::ChatOfflineMessage.where(:to => "someone@inthe.void")
|
98
|
+
assert_equal 1, msgs.count
|
99
|
+
assert_equal "someone@inthe.void", msgs.first.to
|
100
|
+
assert_equal @test_user[:jid], msgs.first.from
|
101
|
+
assert_equal "test", msgs.first.message
|
102
|
+
|
103
|
+
db.save_message("someone@else.void", "someone@inthe.void", "test2")
|
104
|
+
|
105
|
+
msgs = Vines::Storage::Sql::ChatOfflineMessage.where(:to => "someone@inthe.void")
|
106
|
+
assert_equal 1, msgs.count # due max limit equals one (see max_offline_msgs)
|
107
|
+
assert_equal "someone@inthe.void", msgs.first.to
|
108
|
+
assert_equal "someone@else.void", msgs.first.from
|
109
|
+
assert_equal "test2", msgs.first.message # should be latest message
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_find_messages
|
114
|
+
fibered do
|
115
|
+
db = storage
|
116
|
+
|
117
|
+
assert_nil db.find_messages("")
|
118
|
+
assert_equal 0, db.find_messages("someone@inthe.void").keys.count
|
119
|
+
|
120
|
+
Vines::Storage::Sql::ChatOfflineMessage.new(
|
121
|
+
:from => @test_user[:jid],
|
122
|
+
:to => "someone@inthe.void",
|
123
|
+
:message => "test"
|
124
|
+
).save
|
125
|
+
|
126
|
+
msgs = db.find_messages("someone@inthe.void")
|
127
|
+
assert_equal 1, msgs.keys.count
|
128
|
+
assert_equal "someone@inthe.void", msgs[1][:to]
|
129
|
+
assert_equal @test_user[:jid], msgs[1][:from]
|
130
|
+
assert_equal "test", msgs[1][:message]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_destroy_message
|
135
|
+
fibered do
|
136
|
+
db = storage
|
137
|
+
com = Vines::Storage::Sql::ChatOfflineMessage
|
138
|
+
com.new(:from => @test_user[:jid],
|
139
|
+
:to => "someone@inthe.void",
|
140
|
+
:message => "test"
|
141
|
+
).save
|
142
|
+
|
143
|
+
db.destroy_message(1)
|
144
|
+
|
145
|
+
count = Vines::Storage::Sql::ChatOfflineMessage.count(:id => 1)
|
146
|
+
assert_equal 0, count
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
78
150
|
def test_aspect_chat_enabled
|
79
151
|
fibered do
|
80
152
|
db = storage
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diaspora-vines
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Graham
|
@@ -9,146 +9,146 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bcrypt
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.1'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3.1'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: em-hiredis
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 0.3.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 0.3.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: eventmachine
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '1.0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: http_parser.rb
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0.6'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0.6'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: nokogiri
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '1.6'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '1.6'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: activerecord
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - ~>
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 4.1
|
90
|
+
version: '4.1'
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - ~>
|
95
|
+
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: 4.1
|
97
|
+
version: '4.1'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rails
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - ~>
|
102
|
+
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: 4.1
|
104
|
+
version: '4.1'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - ~>
|
109
|
+
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 4.1
|
111
|
+
version: '4.1'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: sqlite3
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- - ~>
|
116
|
+
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: 1.3.9
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- - ~>
|
123
|
+
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: 1.3.9
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: minitest
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- - ~>
|
130
|
+
- - "~>"
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '5.3'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- - ~>
|
137
|
+
- - "~>"
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '5.3'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: rake
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
|
-
- - ~>
|
144
|
+
- - "~>"
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '10.3'
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
|
-
- - ~>
|
151
|
+
- - "~>"
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '10.3'
|
154
154
|
description: Diaspora-vines is a Vines fork build for diaspora integration. DO NOT
|
@@ -199,7 +199,6 @@ files:
|
|
199
199
|
- lib/vines/stanza/iq/disco_info.rb
|
200
200
|
- lib/vines/stanza/iq/disco_items.rb
|
201
201
|
- lib/vines/stanza/iq/error.rb
|
202
|
-
- lib/vines/stanza/iq/offline.rb
|
203
202
|
- lib/vines/stanza/iq/ping.rb
|
204
203
|
- lib/vines/stanza/iq/private_storage.rb
|
205
204
|
- lib/vines/stanza/iq/query.rb
|
@@ -339,73 +338,73 @@ require_paths:
|
|
339
338
|
- lib
|
340
339
|
required_ruby_version: !ruby/object:Gem::Requirement
|
341
340
|
requirements:
|
342
|
-
- -
|
341
|
+
- - ">="
|
343
342
|
- !ruby/object:Gem::Version
|
344
343
|
version: 1.9.3
|
345
344
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
346
345
|
requirements:
|
347
|
-
- -
|
346
|
+
- - ">="
|
348
347
|
- !ruby/object:Gem::Version
|
349
348
|
version: '0'
|
350
349
|
requirements: []
|
351
350
|
rubyforge_project:
|
352
|
-
rubygems_version: 2.
|
351
|
+
rubygems_version: 2.3.0
|
353
352
|
signing_key:
|
354
353
|
specification_version: 4
|
355
354
|
summary: Diaspora-vines is a Vines fork build for diaspora integration.
|
356
355
|
test_files:
|
357
|
-
- test/
|
358
|
-
- test/
|
359
|
-
- test/
|
356
|
+
- test/error_test.rb
|
357
|
+
- test/test_helper.rb
|
358
|
+
- test/storage/local_test.rb
|
359
|
+
- test/storage/mock_redis.rb
|
360
|
+
- test/storage/sql_schema.rb
|
361
|
+
- test/storage/sql_test.rb
|
362
|
+
- test/storage/null_test.rb
|
363
|
+
- test/storage/storage_tests.rb
|
360
364
|
- test/ext/nokogiri.rb
|
361
|
-
- test/kit_test.rb
|
362
365
|
- test/contact_test.rb
|
363
|
-
- test/router_test.rb
|
364
|
-
- test/config/host_test.rb
|
365
|
-
- test/config/pubsub_test.rb
|
366
|
-
- test/jid_test.rb
|
367
|
-
- test/stanza/iq/vcard_test.rb
|
368
|
-
- test/stanza/iq/private_storage_test.rb
|
369
|
-
- test/stanza/iq/roster_test.rb
|
370
|
-
- test/stanza/iq/disco_info_test.rb
|
371
|
-
- test/stanza/iq/session_test.rb
|
372
|
-
- test/stanza/iq/disco_items_test.rb
|
373
|
-
- test/stanza/iq/version_test.rb
|
374
|
-
- test/stanza/presence/probe_test.rb
|
375
|
-
- test/stanza/presence/subscribe_test.rb
|
376
|
-
- test/stanza/message_test.rb
|
377
|
-
- test/stanza/iq_test.rb
|
378
|
-
- test/stanza/pubsub/publish_test.rb
|
379
|
-
- test/stanza/pubsub/create_test.rb
|
380
|
-
- test/stanza/pubsub/subscribe_test.rb
|
381
|
-
- test/stanza/pubsub/unsubscribe_test.rb
|
382
|
-
- test/stanza/pubsub/delete_test.rb
|
383
|
-
- test/token_bucket_test.rb
|
384
366
|
- test/store_test.rb
|
385
|
-
- test/
|
386
|
-
- test/
|
367
|
+
- test/cluster/sessions_test.rb
|
368
|
+
- test/cluster/publisher_test.rb
|
369
|
+
- test/cluster/subscriber_test.rb
|
370
|
+
- test/config_test.rb
|
387
371
|
- test/stream/parser_test.rb
|
372
|
+
- test/stream/client/ready_test.rb
|
388
373
|
- test/stream/client/auth_test.rb
|
389
374
|
- test/stream/client/session_test.rb
|
390
|
-
- test/stream/
|
391
|
-
- test/stream/http/auth_test.rb
|
392
|
-
- test/stream/http/start_test.rb
|
375
|
+
- test/stream/sasl_test.rb
|
393
376
|
- test/stream/http/sessions_test.rb
|
394
|
-
- test/stream/http/
|
377
|
+
- test/stream/http/start_test.rb
|
395
378
|
- test/stream/http/ready_test.rb
|
396
|
-
- test/stream/
|
397
|
-
- test/stream/
|
398
|
-
- test/stream/server/ready_test.rb
|
399
|
-
- test/stream/sasl_test.rb
|
400
|
-
- test/stream/component/handshake_test.rb
|
379
|
+
- test/stream/http/auth_test.rb
|
380
|
+
- test/stream/http/request_test.rb
|
401
381
|
- test/stream/component/start_test.rb
|
402
382
|
- test/stream/component/ready_test.rb
|
383
|
+
- test/stream/component/handshake_test.rb
|
384
|
+
- test/stream/server/ready_test.rb
|
385
|
+
- test/stream/server/auth_test.rb
|
386
|
+
- test/stream/server/outbound/auth_test.rb
|
387
|
+
- test/token_bucket_test.rb
|
388
|
+
- test/router_test.rb
|
403
389
|
- test/user_test.rb
|
404
|
-
- test/
|
405
|
-
- test/
|
406
|
-
- test/
|
407
|
-
- test/
|
408
|
-
- test/
|
409
|
-
- test/
|
410
|
-
- test/
|
411
|
-
- test/
|
390
|
+
- test/stanza/message_test.rb
|
391
|
+
- test/stanza/presence/subscribe_test.rb
|
392
|
+
- test/stanza/presence/probe_test.rb
|
393
|
+
- test/stanza/pubsub/publish_test.rb
|
394
|
+
- test/stanza/pubsub/delete_test.rb
|
395
|
+
- test/stanza/pubsub/create_test.rb
|
396
|
+
- test/stanza/pubsub/unsubscribe_test.rb
|
397
|
+
- test/stanza/pubsub/subscribe_test.rb
|
398
|
+
- test/stanza/iq_test.rb
|
399
|
+
- test/stanza/iq/roster_test.rb
|
400
|
+
- test/stanza/iq/vcard_test.rb
|
401
|
+
- test/stanza/iq/disco_info_test.rb
|
402
|
+
- test/stanza/iq/private_storage_test.rb
|
403
|
+
- test/stanza/iq/session_test.rb
|
404
|
+
- test/stanza/iq/version_test.rb
|
405
|
+
- test/stanza/iq/disco_items_test.rb
|
406
|
+
- test/jid_test.rb
|
407
|
+
- test/stanza_test.rb
|
408
|
+
- test/config/host_test.rb
|
409
|
+
- test/config/pubsub_test.rb
|
410
|
+
- test/kit_test.rb
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
module Vines
|
4
|
-
class Stanza
|
5
|
-
class Iq
|
6
|
-
class Ping < Iq
|
7
|
-
include Vines::Log
|
8
|
-
|
9
|
-
NS = NAMESPACES[:disco_info]
|
10
|
-
NODE = NAMESPACES[:offline]
|
11
|
-
|
12
|
-
register "/iq[@id and @type='get']/ns:offline", 'ns' => NODE
|
13
|
-
|
14
|
-
def process
|
15
|
-
log.debug("heelo world::#{to_result.to_yaml}")
|
16
|
-
#return if route_iq || !allowed?
|
17
|
-
#stream.write(to_result)
|
18
|
-
result = to_result.tap do |el|
|
19
|
-
el << el.document.create_element('query') do |query|
|
20
|
-
query.default_namespace = NS
|
21
|
-
query['node'] = NODE
|
22
|
-
items = [
|
23
|
-
[
|
24
|
-
:jid => 'romeo@montague.net',
|
25
|
-
:node => '2003-02-27T22:49:17.008Z',
|
26
|
-
:name => 'mercutio@shakespeare.lit/pda'
|
27
|
-
],
|
28
|
-
[
|
29
|
-
:jid => 'romeo@montague.net',
|
30
|
-
:node => '2003-02-27T22:52:51.270Z',
|
31
|
-
:name => 'juliet@capulet.com/balcony'
|
32
|
-
]
|
33
|
-
]
|
34
|
-
items(query, items)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
stream.write(result)
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def items(query, *items)
|
43
|
-
items.flatten.each do |item|
|
44
|
-
query << query.document.create_element(
|
45
|
-
'item',
|
46
|
-
'jid' => item[:jid],
|
47
|
-
'node' => item[:node],
|
48
|
-
'name'=> item[:name])
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|