social_stream 0.12.1 → 0.12.2
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.
- data/Rakefile +3 -5
- data/base/app/assets/javascripts/social_stream-base.js +1 -0
- data/base/app/models/contact.rb +3 -1
- data/base/config/routes.rb +14 -4
- data/base/lib/social_stream/base/version.rb +1 -1
- data/base/vendor/assets/javascripts/jquery.screw.js +188 -0
- data/documents/app/assets/javascripts/documents.js.erb +6 -0
- data/documents/app/assets/stylesheets/documents.css.scss +5 -0
- data/documents/app/controllers/documents_controller.rb +31 -4
- data/documents/app/views/common/_headers.html.erb +76 -0
- data/documents/app/views/common/_index.html.erb +16 -30
- data/documents/config/routes.rb +1 -1
- data/documents/lib/social_stream/documents/version.rb +1 -1
- data/documents/social_stream-documents.gemspec +1 -1
- data/events/db/migrate/20111102145626_add_more_fields_to_events.rb +24 -0
- data/events/lib/social_stream/events/version.rb +1 -1
- data/events/social_stream-events.gemspec +1 -1
- data/lib/social_stream/version.rb +1 -1
- data/presence/app/assets/javascripts/store.js +6 -0
- data/presence/app/assets/javascripts/{xmpp_client.js → xmpp_client.js.erb} +53 -1
- data/presence/app/controllers/xmpp_controller.rb +2 -2
- data/presence/app/views/xmpp/_chat.html.erb +22 -36
- data/presence/app/views/xmpp/_chat_connecting.html.erb +1 -1
- data/presence/app/views/xmpp/_chat_contacts.html.erb +6 -6
- data/presence/app/views/xmpp/_chat_off.html.erb +29 -15
- data/presence/app/views/xmpp/index.html +0 -1
- data/presence/config/locales/en.yml +11 -0
- data/presence/config/locales/es.yml +11 -0
- data/presence/config/routes.rb +1 -0
- data/presence/ejabberd/conf/ssconfig_example.cfg +6 -0
- data/presence/ejabberd/ejabberd_scripts/authentication_script +61 -5
- data/presence/ejabberd/ejabberd_scripts/emanagement +123 -35
- data/presence/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
- data/presence/lib/generators/social_stream/presence/templates/initializer.rb +13 -6
- data/presence/lib/social_stream-presence.rb +9 -4
- data/presence/lib/social_stream/presence/models/buddy_manager.rb +10 -2
- data/presence/lib/social_stream/presence/version.rb +1 -1
- data/presence/lib/social_stream/presence/xmpp_server_order.rb +193 -121
- data/presence/lib/tasks/presence/synchronize.rake +2 -2
- data/presence/social_stream-presence.gemspec +2 -0
- data/social_stream.gemspec +3 -3
- metadata +19 -15
- data/presence/app/views/xmpp/chat.html.erb +0 -13
@@ -26,12 +26,12 @@ def getOption(option)
|
|
26
26
|
return "Undefined"
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
$logger.info "Ejabberd Management Script: " + text
|
31
|
-
end
|
29
|
+
|
32
30
|
|
33
31
|
#Configuration variables
|
34
32
|
$domain = getOption("server_domain=")
|
33
|
+
$verbose = (getOption("verbose=")=="true")
|
34
|
+
|
35
35
|
|
36
36
|
PARAMS_FOR_COMMANDS = {
|
37
37
|
'addBuddyToRoster' => 5,
|
@@ -54,6 +54,7 @@ PARAMS_FOR_COMMANDS = {
|
|
54
54
|
'sendMessageToUser' => 3,
|
55
55
|
'getUserResource' => 1,
|
56
56
|
'isEjabberdNodeStarted' => 0,
|
57
|
+
'checkEjabberdctlQuotedString' => 0,
|
57
58
|
'help' => 0,
|
58
59
|
}
|
59
60
|
|
@@ -78,12 +79,20 @@ SYNTAX_FOR_COMMANDS = {
|
|
78
79
|
'sendMessageToUser' => 'sendMessageToUser from_name to_name msg',
|
79
80
|
'getUserResource' => 'getUserResource username',
|
80
81
|
'isEjabberdNodeStarted' => 'isEjabberdNodeStarted',
|
82
|
+
'checkEjabberdctlQuotedString' => 'checkEjabberdctlQuotedString',
|
81
83
|
'help' => 'help',
|
82
84
|
}
|
83
85
|
|
84
86
|
|
85
87
|
|
86
88
|
#Debug methods
|
89
|
+
def ejabberdLog(text)
|
90
|
+
$logger.info "Ejabberd Management Script: " + text
|
91
|
+
if $verbose
|
92
|
+
#puts "Writing to ejabberdLog: " + "Ejabberd Management Script: " + text
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
87
96
|
def log(msg)
|
88
97
|
logWithTitle(msg,nil)
|
89
98
|
end
|
@@ -123,8 +132,7 @@ def addBuddyToRoster(userSid,buddySid,buddyNick,buddyGroup,subscription_type)
|
|
123
132
|
buddy = buddySid.split("@")[0]
|
124
133
|
userDomain = userSid.split("@")[1]
|
125
134
|
buddyDomain = buddySid.split("@")[1]
|
126
|
-
|
127
|
-
%x[#{command}];
|
135
|
+
executeCommand("ejabberdctl add-rosteritem " + user + " " + userDomain + " " + buddy + " " + buddyDomain + " " + buddyNick + " " + buddyGroup + " " + subscription_type)
|
128
136
|
return "Done"
|
129
137
|
end
|
130
138
|
|
@@ -134,8 +142,7 @@ def removeBuddyFromRoster(userSid,buddySid)
|
|
134
142
|
userDomain = userSid.split("@")[1]
|
135
143
|
buddyDomain = buddySid.split("@")[1]
|
136
144
|
if checkUserInRoster(buddy,getRoster(user))
|
137
|
-
|
138
|
-
%x[#{command}];
|
145
|
+
executeCommand("ejabberdctl delete_rosteritem " + user + " " + userDomain + " " + buddy + " " + buddyDomain)
|
139
146
|
return "Done"
|
140
147
|
else
|
141
148
|
return "User " + buddy + " not found in " + user + " roster."
|
@@ -147,10 +154,9 @@ end
|
|
147
154
|
|
148
155
|
def getRoster(username)
|
149
156
|
if checkUser(username)
|
150
|
-
|
151
|
-
%x[#{command}];
|
157
|
+
executeCommand("ejabberdctl get_roster " + username + " " + $domain)
|
152
158
|
else
|
153
|
-
return "
|
159
|
+
return "Roster not found for user " + username
|
154
160
|
end
|
155
161
|
end
|
156
162
|
|
@@ -174,21 +180,18 @@ def removeRoster(username)
|
|
174
180
|
end
|
175
181
|
return "Done"
|
176
182
|
else
|
177
|
-
return "
|
183
|
+
return "Roster not found for user " + username
|
178
184
|
end
|
179
185
|
end
|
180
186
|
|
181
187
|
def removeAllRosters()
|
182
|
-
|
183
|
-
%x[#{command}];
|
188
|
+
executeCommand("ejabberdctl process_rosteritems delete any any any any")
|
184
189
|
return "Done";
|
185
190
|
end
|
186
191
|
|
187
192
|
def getAllUsersWithRoster()
|
188
|
-
|
189
|
-
output = %x[#{command}];
|
193
|
+
output = executeCommand("ejabberdctl process_rosteritems list any any any any")
|
190
194
|
|
191
|
-
i = 0
|
192
195
|
users = []
|
193
196
|
|
194
197
|
lines = output.split("\n");
|
@@ -198,14 +201,13 @@ def getAllUsersWithRoster()
|
|
198
201
|
if items.to_i.to_s == items
|
199
202
|
if items.to_i > 0
|
200
203
|
lines.each do |line|
|
201
|
-
if
|
204
|
+
if line.split(":")[0]=="Matches"
|
202
205
|
user = line.split(" ")[1].split("@")[0]
|
203
206
|
#puts i.to_s() + " :" + line
|
204
207
|
unless users.include?(user)
|
205
208
|
users << user
|
206
209
|
end
|
207
210
|
end
|
208
|
-
i=i+1
|
209
211
|
end
|
210
212
|
end
|
211
213
|
end
|
@@ -286,9 +288,7 @@ end
|
|
286
288
|
def sendStanzaUserMessage(username,msg)
|
287
289
|
resource = getUserResource(username);
|
288
290
|
stanza = "\\<\\'message\\'\\>\\<\\'body\\'\\>\\'" + msg + "\\'\\<\\'/body\\'\\>\\<\\'/message\\'\\>"
|
289
|
-
|
290
|
-
puts "Executing: " + command
|
291
|
-
%x[#{command}];
|
291
|
+
executeCommand("ejabberdctl send_stanza_c2s " + username + " " + $domain + " " + resource + " " + stanza)
|
292
292
|
return "Done"
|
293
293
|
end
|
294
294
|
|
@@ -311,9 +311,7 @@ def sendPresenceWithShow(from_name,to_name,show)
|
|
311
311
|
from_sid = from_name + "@" + $domain;
|
312
312
|
to_sid = to_name + "@" + $domain;
|
313
313
|
pres_stanza = "\\<\\'presence from=\\'\\\"\\'" + from_sid + "\\'\\\"\\' to=\\'\\\"\\'" + to_sid + "\\'\\\"\\>\\<\\'show\\'\\>\\'" + show + "\\'\\<\\'/show\\'\\>\\<\\'/presence\\'\\>"
|
314
|
-
|
315
|
-
puts "Executing: " + command
|
316
|
-
%x[#{command}];
|
314
|
+
executeCommand("ejabberdctl send_stanza_c2s " + from_name + " " + $domain + " " + resource + " " + pres_stanza)
|
317
315
|
return "Done"
|
318
316
|
end
|
319
317
|
|
@@ -322,24 +320,19 @@ def sendPresenceStanzaWithType(from_name,to_name,presence_type)
|
|
322
320
|
from_sid = from_name + "@" + $domain;
|
323
321
|
to_sid = to_name + "@" + $domain;
|
324
322
|
pres_stanza = "\\<\\'presence type=\\'\\\"\\'" + presence_type + "\\'\\\"\\' from=\\'\\\"\\'" + from_sid + "\\'\\\"\\' to=\\'\\\"\\'" + to_sid + "\\'\\\"\\>\\<\\'/presence\\'\\>"
|
325
|
-
|
326
|
-
puts "Executing: " + command
|
327
|
-
%x[#{command}];
|
323
|
+
executeCommand("ejabberdctl send_stanza_c2s " + from_name + " " + $domain + " " + resource + " " + pres_stanza)
|
328
324
|
return "Done"
|
329
325
|
end
|
330
326
|
|
331
327
|
def sendMessageToUser(from_name,to_name,msg)
|
332
328
|
from_sid = from_name + "@" + $domain;
|
333
329
|
to_sid = to_name + "@" + $domain;
|
334
|
-
|
335
|
-
puts "Executing: " + command
|
336
|
-
%x[#{command}];
|
330
|
+
executeCommand("ejabberdctl send_message_chat " + from_sid + " " + to_sid + " " + buildQuotedString(msg))
|
337
331
|
return "Done"
|
338
332
|
end
|
339
333
|
|
340
334
|
def getUserResource(username)
|
341
|
-
|
342
|
-
output = %x[#{command}];
|
335
|
+
output = executeCommand("ejabberdctl connected-users")
|
343
336
|
lines = output.split("\n");
|
344
337
|
lines.each do |line|
|
345
338
|
if line.split("@")[0] == username
|
@@ -356,18 +349,113 @@ end
|
|
356
349
|
#More utilities
|
357
350
|
|
358
351
|
def isEjabberdNodeStarted
|
359
|
-
|
360
|
-
output = %x[#{command}]
|
352
|
+
output = executeCommand("ejabberdctl status")
|
361
353
|
if firstLine = output.split("\n")[0]
|
362
354
|
return ((firstLine.split(":")[1]).strip()=="started")
|
363
355
|
end
|
364
356
|
return false
|
365
357
|
end
|
366
358
|
|
359
|
+
def checkEjabberdctlQuotedString
|
360
|
+
puts "checkForSimpleSlash: " + checkForSimpleSlash.to_s()
|
361
|
+
puts "checkForDoubleSlash: " + checkForDoubleSlash.to_s()
|
362
|
+
end
|
363
|
+
|
364
|
+
def checkForDoubleSlash
|
365
|
+
command = "ejabberdctl send_message_chat example@localhost example@localhost \\'Hello quoted string\\'"
|
366
|
+
if execute_as_sudo
|
367
|
+
command = "sudo " + command
|
368
|
+
end
|
369
|
+
#puts "Executing " + command
|
370
|
+
output = %x[#{command}]
|
371
|
+
firstLine = ""
|
372
|
+
lines = output.split("\n")
|
373
|
+
lines.each do |line|
|
374
|
+
if line != ""
|
375
|
+
firstLine = line
|
376
|
+
break
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
if firstLine==""
|
381
|
+
return true
|
382
|
+
elsif firstLine.split(":")[0]=="Error"
|
383
|
+
return false
|
384
|
+
else
|
385
|
+
#Unknown error
|
386
|
+
return false
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
def checkForSimpleSlash
|
391
|
+
command = "ejabberdctl send_message_chat example@localhost example@localhost \'Hello quoted string\'"
|
392
|
+
if execute_as_sudo
|
393
|
+
command = "sudo " + command
|
394
|
+
end
|
395
|
+
#puts "Executing " + command
|
396
|
+
output = %x[#{command}]
|
397
|
+
firstLine = ""
|
398
|
+
lines = output.split("\n")
|
399
|
+
lines.each do |line|
|
400
|
+
if line != ""
|
401
|
+
firstLine = line
|
402
|
+
break
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
if firstLine==""
|
407
|
+
return true
|
408
|
+
elsif firstLine.split(":")[0]=="Error"
|
409
|
+
return false
|
410
|
+
else
|
411
|
+
#Unknown error
|
412
|
+
return false
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
def buildQuotedString(msg)
|
417
|
+
if checkForSimpleSlash
|
418
|
+
return "\'" + msg + "\'"
|
419
|
+
end
|
420
|
+
if checkForDoubleSlash
|
421
|
+
return "\\'" + msg + "\\'"
|
422
|
+
end
|
423
|
+
return msg
|
424
|
+
end
|
367
425
|
|
368
426
|
|
369
427
|
#Help & Support methods
|
370
428
|
|
429
|
+
def executeCommand(command)
|
430
|
+
#Building...
|
431
|
+
command = buildCommand(command)
|
432
|
+
|
433
|
+
if $verbose
|
434
|
+
puts "Executing: " + command
|
435
|
+
ejabberdLog("Executing (#{command})")
|
436
|
+
end
|
437
|
+
|
438
|
+
#Executing...
|
439
|
+
output = %x[#{command}]
|
440
|
+
return output
|
441
|
+
end
|
442
|
+
|
443
|
+
def buildCommand(command)
|
444
|
+
if execute_as_sudo
|
445
|
+
command = "sudo -u ejabberd " + command
|
446
|
+
end
|
447
|
+
return command
|
448
|
+
end
|
449
|
+
|
450
|
+
def execute_as_sudo
|
451
|
+
current_user = %x["whoami"].split("\n")[0]
|
452
|
+
sudo_users = getOption("users_require_sudo=")
|
453
|
+
sudo_users_array = sudo_users.split(",")
|
454
|
+
if sudo_users_array.include?(current_user)
|
455
|
+
return true
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
371
459
|
def help
|
372
460
|
log("Command list")
|
373
461
|
SYNTAX_FOR_COMMANDS.values.each do |command|
|
@@ -386,7 +474,7 @@ begin
|
|
386
474
|
if ARGV[0] and PARAMS_FOR_COMMANDS.keys.include?(ARGV[0])
|
387
475
|
if (ARGV.length == (PARAMS_FOR_COMMANDS[ARGV[0]]+1))
|
388
476
|
|
389
|
-
ejabberdLog("Executing (#{ARGV
|
477
|
+
ejabberdLog("Executing (#{ARGV})")
|
390
478
|
|
391
479
|
length = ARGV.length;
|
392
480
|
case length
|
Binary file
|
@@ -3,20 +3,27 @@ SocialStream::Presence.setup do |config|
|
|
3
3
|
config.domain = "localhost"
|
4
4
|
#Configures Bosh Service Path
|
5
5
|
#config.bosh_service = "http://xmpp-proxy/http-bind"
|
6
|
+
#Configures Authentication Method: "cookie" or "password"
|
7
|
+
config.auth_method = "cookie"
|
6
8
|
#Configures XMPP Server Password
|
7
9
|
config.xmpp_server_password = "password"
|
8
10
|
#Remote or local mode
|
9
11
|
config.remote_xmpp_server = false
|
12
|
+
#Scripts path to execute ejabberd scripts: local or remote
|
13
|
+
config.scripts_path = "/scripts_path"
|
10
14
|
#False to disable Social Stream Presence
|
11
15
|
#config.enable = false
|
12
16
|
|
13
17
|
#Parameters for remote mode
|
18
|
+
#SSH Login
|
19
|
+
#config.ssh_domain = "domain"
|
20
|
+
#config.ssh_user = "login"
|
21
|
+
#config.ssh_password= "password"
|
22
|
+
|
23
|
+
#Configure to use a Xmpp Client on Rails App
|
14
24
|
#Username of the the Social Stream Admin sid
|
15
25
|
config.social_stream_presence_username = "social_stream-presence"
|
16
26
|
#Configures Social Stream Rails App Password
|
17
|
-
config.password = "password"
|
18
|
-
|
19
|
-
|
20
|
-
#Scripts path to execute local ejabberd commands
|
21
|
-
config.scripts_path = "/scripts_path"
|
22
|
-
end
|
27
|
+
config.password = "password"
|
28
|
+
|
29
|
+
end
|
@@ -9,19 +9,24 @@ module SocialStream
|
|
9
9
|
autoload :BuddyManager, 'social_stream/presence/models/buddy_manager'
|
10
10
|
end
|
11
11
|
|
12
|
+
mattr_accessor :domain
|
12
13
|
mattr_accessor :bosh_service
|
14
|
+
mattr_accessor :auth_method
|
13
15
|
mattr_accessor :xmpp_server_password
|
14
16
|
mattr_accessor :remote_xmpp_server
|
17
|
+
mattr_accessor :scripts_path
|
15
18
|
mattr_accessor :enable
|
16
19
|
|
17
|
-
mattr_accessor :
|
20
|
+
mattr_accessor :ssh_domain
|
21
|
+
mattr_accessor :ssh_user
|
22
|
+
mattr_accessor :ssh_password
|
23
|
+
|
18
24
|
mattr_accessor :social_stream_presence_username
|
19
25
|
mattr_accessor :password
|
20
26
|
|
21
|
-
|
22
|
-
|
23
|
-
@@enable = true
|
27
|
+
@@auth_method = "cookie"
|
24
28
|
@@remote_xmpp_server = false
|
29
|
+
@@enable = true
|
25
30
|
|
26
31
|
class << self
|
27
32
|
def setup
|
@@ -17,6 +17,10 @@ module SocialStream
|
|
17
17
|
return
|
18
18
|
end
|
19
19
|
|
20
|
+
unless self.receiver and self.sender
|
21
|
+
return
|
22
|
+
end
|
23
|
+
|
20
24
|
unless self.receiver.subject_type == "User" and self.sender.subject_type == "User"
|
21
25
|
return
|
22
26
|
end
|
@@ -44,12 +48,16 @@ module SocialStream
|
|
44
48
|
end
|
45
49
|
|
46
50
|
|
47
|
-
def remove_buddy
|
51
|
+
def remove_buddy
|
48
52
|
|
49
53
|
unless SocialStream::Presence.enable
|
50
54
|
return
|
51
55
|
end
|
52
56
|
|
57
|
+
unless self.receiver and self.sender
|
58
|
+
return
|
59
|
+
end
|
60
|
+
|
53
61
|
unless self.receiver.subject_type == "User" and self.sender.subject_type == "User"
|
54
62
|
return
|
55
63
|
end
|
@@ -64,7 +72,7 @@ module SocialStream
|
|
64
72
|
#Check if is a positive and replied tie
|
65
73
|
if self.bidirectional?
|
66
74
|
#Execute unsetRosterForBidirectionalTie(user_sid,oldfriend_sid,oldfriendNick,oldfriendGroup)
|
67
|
-
SocialStream::Presence::XmppServerOrder::unsetRosterForBidirectionalTie(user_sid,
|
75
|
+
SocialStream::Presence::XmppServerOrder::unsetRosterForBidirectionalTie(buddy_sid,user_sid,user_name,"SocialStream")
|
68
76
|
elsif self.positive?
|
69
77
|
#Case: Possitive tie unidirectional
|
70
78
|
#Execute removeBuddyFromRoster(user_sid,buddy_sid)
|
@@ -3,114 +3,111 @@ require 'xmpp4r/muc'
|
|
3
3
|
require 'xmpp4r/roster'
|
4
4
|
require 'xmpp4r/client'
|
5
5
|
require 'xmpp4r/message'
|
6
|
+
require 'net/ssh'
|
6
7
|
|
7
8
|
module SocialStream
|
8
9
|
module Presence
|
9
10
|
class XmppServerOrder
|
10
11
|
|
11
12
|
class << self
|
12
|
-
|
13
|
+
|
13
14
|
def setRosterForBidirectionalTie(userASid,userBSid,userANick,userBNick,groupForA,groupForB)
|
14
|
-
|
15
|
-
puts "Not implemented setRosterForBidirectionalTie(userASid,userBSid,userANick,userBNick,groupForA,groupForB) for remote_xmpp_server"
|
16
|
-
return
|
17
|
-
else
|
18
|
-
#SocialStream::Presence.remote_xmpp_server=false
|
19
|
-
executeEmanagementLocalCommand("setBidireccionalBuddys",[userASid,userBSid,userANick,userBNick,groupForA,groupForB])
|
20
|
-
end
|
15
|
+
executeEmanagementCommand("setBidireccionalBuddys",[userASid,userBSid,userANick,userBNick,groupForA,groupForB])
|
21
16
|
end
|
22
17
|
|
18
|
+
|
23
19
|
def unsetRosterForBidirectionalTie(userSid,oldfriendSid,oldfriendNick,oldfriendGroup)
|
24
|
-
|
25
|
-
puts "Not implemented unsetRosterForBidirectionalTie(user_sid,oldfriend_sid,oldfriendNick,oldfriendGroup) for remote_xmpp_server"
|
26
|
-
return
|
27
|
-
else
|
28
|
-
#SocialStream::Presence.remote_xmpp_server=false
|
29
|
-
executeEmanagementLocalCommand("unsetBidireccionalBuddys",[userSid,oldfriendSid,oldfriendNick,oldfriendGroup])
|
30
|
-
end
|
20
|
+
executeEmanagementCommand("unsetBidireccionalBuddys",[userSid,oldfriendSid,oldfriendNick,oldfriendGroup])
|
31
21
|
end
|
32
22
|
|
23
|
+
|
33
24
|
def addBuddyToRoster(userSid,buddySid,buddyNick,buddyGroup,subscription_type)
|
34
|
-
|
35
|
-
puts "Not implemented addBuddyToRoster(userSID,buddySID,buddyNick,buddyGroup,subscription_type) for remote_xmpp_server"
|
36
|
-
return
|
37
|
-
else
|
38
|
-
#SocialStream::Presence.remote_xmpp_server=false
|
39
|
-
executeEmanagementLocalCommand("addBuddyToRoster",[userSid,buddySid,buddyNick,buddyGroup,subscription_type])
|
40
|
-
end
|
25
|
+
executeEmanagementCommand("addBuddyToRoster",[userSid,buddySid,buddyNick,buddyGroup,subscription_type])
|
41
26
|
end
|
42
27
|
|
28
|
+
|
43
29
|
def removeBuddyFromRoster(userSid,buddySid)
|
44
|
-
|
45
|
-
|
30
|
+
executeEmanagementCommand("removeBuddyFromRoster",[userSid,buddySid])
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
#Before delete contact (destroy ties) callback
|
35
|
+
def removeBuddy(contact)
|
36
|
+
|
37
|
+
unless SocialStream::Presence.enable
|
38
|
+
return
|
39
|
+
end
|
40
|
+
|
41
|
+
unless contact.receiver and contact.sender
|
42
|
+
return
|
43
|
+
end
|
44
|
+
|
45
|
+
unless contact.receiver.subject_type == "User" and contact.sender.subject_type == "User"
|
46
46
|
return
|
47
|
-
else
|
48
|
-
#SocialStream::Presence.remote_xmpp_server=false
|
49
|
-
executeEmanagementLocalCommand("removeBuddyFromRoster",[userSid,buddySid])
|
50
47
|
end
|
48
|
+
|
49
|
+
#XMPP DOMAIN
|
50
|
+
domain = SocialStream::Presence.domain
|
51
|
+
user_sid = contact.sender.slug + "@" + domain
|
52
|
+
user_name = contact.sender.name
|
53
|
+
buddy_sid = contact.receiver.slug + "@" + domain
|
54
|
+
buddy_name = contact.receiver.name
|
55
|
+
|
56
|
+
#Check for bidirecctional
|
57
|
+
|
58
|
+
if contact.sender.contact_actors(:type=>:user).include?(contact.receiver)
|
59
|
+
#Bidirectional contacts
|
60
|
+
#Execute unsetRosterForBidirectionalTie(user_sid,oldfriend_sid,oldfriendNick,oldfriendGroup)
|
61
|
+
unsetRosterForBidirectionalTie(buddy_sid,user_sid,user_name,"SocialStream")
|
62
|
+
elsif contact.sender.contact_actors(:type=>:user, :direction=>:sent).include?(contact.receiver)
|
63
|
+
#Unidirectional contacts
|
64
|
+
removeBuddyFromRoster(user_sid,buddy_sid)
|
65
|
+
end
|
66
|
+
|
51
67
|
end
|
52
68
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
return "Reset Connected Users"
|
65
|
-
end
|
66
|
-
rescue
|
67
|
-
puts "Error in SocialStream::Presence::XmppServerOrder::synchronize_presence"
|
68
|
-
end
|
69
|
-
|
69
|
+
|
70
|
+
def synchronizePresence
|
71
|
+
|
72
|
+
if !isEjabberdNodeUp
|
73
|
+
resetPresence
|
74
|
+
return "Xmpp Server Down: Reset Connected Users"
|
75
|
+
end
|
76
|
+
|
77
|
+
if SocialStream::Presence.remote_xmpp_server
|
78
|
+
command = buildCommand("synchronize_presence_script","",[])
|
79
|
+
executeCommand(command)
|
70
80
|
else
|
71
81
|
#SocialStream::Presence.remote_xmpp_server=false
|
72
82
|
|
73
|
-
#Get connected users locally
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
sessions.each do |session|
|
83
|
-
users << session.split("@")[0]
|
84
|
-
puts session.split("@")[0]
|
85
|
-
end
|
86
|
-
|
87
|
-
synchronize_presence_for_slugs(users)
|
88
|
-
|
89
|
-
else
|
90
|
-
reset_presence
|
91
|
-
return "Xmpp Server Down: Reset Connected Users"
|
83
|
+
#Get connected users locally
|
84
|
+
users = []
|
85
|
+
output = %x[ejabberdctl connected-users]
|
86
|
+
sessions = output.split("\n")
|
87
|
+
|
88
|
+
sessions.each do |session|
|
89
|
+
users << session.split("@")[0]
|
90
|
+
puts session.split("@")[0]
|
92
91
|
end
|
93
92
|
|
93
|
+
synchronizePresenceForSlugs(users)
|
94
|
+
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
97
98
|
|
98
|
-
def
|
99
|
-
|
100
|
-
puts "Not implemented SocialStream::Presence::XmppServerOrder::remove_all_rosters for remote_xmpp_server"
|
101
|
-
return
|
102
|
-
else
|
103
|
-
#SocialStream::Presence.remote_xmpp_server=false
|
104
|
-
executeEmanagementLocalCommand("removeAllRosters",[])
|
105
|
-
end
|
99
|
+
def removeAllRosters
|
100
|
+
executeEmanagementCommand("removeAllRosters",[])
|
106
101
|
end
|
107
102
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
103
|
+
|
104
|
+
def synchronizeRosters
|
105
|
+
commands = []
|
106
|
+
|
107
|
+
#"Remove all rosters"
|
108
|
+
commands << buildCommand("emanagement","removeAllRosters",[])
|
109
|
+
|
110
|
+
#"Populate rosters"
|
114
111
|
users = User.all
|
115
112
|
checkedUsers = []
|
116
113
|
|
@@ -121,50 +118,17 @@ module SocialStream
|
|
121
118
|
unless checkedUsers.include?(contact.slug)
|
122
119
|
domain = SocialStream::Presence.domain
|
123
120
|
user_sid = user.slug + "@" + domain
|
124
|
-
contact_sid = contact.slug + "@" + domain
|
125
|
-
|
121
|
+
contact_sid = contact.slug + "@" + domain
|
122
|
+
commands << buildCommand("emanagement","setBidireccionalBuddys",[user_sid,contact_sid,user.name,contact.name,"SocialStream","SocialStream"])
|
126
123
|
end
|
127
124
|
end
|
128
125
|
end
|
126
|
+
|
127
|
+
executeCommands(commands)
|
129
128
|
end
|
130
129
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
def getSocialStreamUserSid
|
135
|
-
#XMPP DOMAIN
|
136
|
-
domain = SocialStream::Presence.domain
|
137
|
-
#SS Username
|
138
|
-
ss_name = SocialStream::Presence.social_stream_presence_username
|
139
|
-
return ss_name + "@" + domain
|
140
|
-
end
|
141
|
-
|
142
|
-
def openXmppClientForSocialStreamUser
|
143
|
-
begin
|
144
|
-
password= SocialStream::Presence.password
|
145
|
-
client = Jabber::Client.new(Jabber::JID.new(getSocialStreamUserSid))
|
146
|
-
client.connect
|
147
|
-
client.auth(password)
|
148
|
-
return client
|
149
|
-
rescue Exception => e
|
150
|
-
case e
|
151
|
-
when Errno::ECONNREFUSED
|
152
|
-
puts "Connection to XMPP Server refused"
|
153
|
-
return nil
|
154
|
-
else
|
155
|
-
puts "Unknown exception: #{e.to_s}"
|
156
|
-
return nil
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def sendXmppChatMessage(client,dest_sid,body)
|
162
|
-
msg = Jabber::Message::new(dest_sid, body)
|
163
|
-
msg.type=:chat
|
164
|
-
client.send(msg)
|
165
|
-
end
|
166
|
-
|
167
|
-
def synchronize_presence_for_slugs(user_slugs)
|
130
|
+
|
131
|
+
def synchronizePresenceForSlugs(user_slugs)
|
168
132
|
#Check connected users
|
169
133
|
users = User.find_all_by_connected(true)
|
170
134
|
|
@@ -184,7 +148,8 @@ module SocialStream
|
|
184
148
|
end
|
185
149
|
end
|
186
150
|
|
187
|
-
|
151
|
+
|
152
|
+
def resetPresence
|
188
153
|
users = User.find_all_by_connected(true)
|
189
154
|
|
190
155
|
users.each do |user|
|
@@ -193,18 +158,125 @@ module SocialStream
|
|
193
158
|
end
|
194
159
|
end
|
195
160
|
|
196
|
-
|
197
|
-
|
161
|
+
|
162
|
+
|
163
|
+
#Execution commands manage
|
164
|
+
|
165
|
+
def buildCommand(script,order,params)
|
166
|
+
command = SocialStream::Presence.scripts_path + "/" + script + " " + order
|
198
167
|
params.each do |param|
|
199
168
|
command = command + " " + param.split(" ")[0]
|
200
169
|
end
|
170
|
+
return command
|
171
|
+
end
|
172
|
+
|
173
|
+
def executeEmanagementCommand(order,params)
|
174
|
+
command = buildCommand("emanagement",order,params)
|
175
|
+
executeCommand(command)
|
176
|
+
end
|
177
|
+
|
178
|
+
def executeCommand(command)
|
201
179
|
puts "Executing " + command
|
202
|
-
|
180
|
+
if SocialStream::Presence.remote_xmpp_server
|
181
|
+
output = executeRemoteCommand(command)
|
182
|
+
else
|
183
|
+
#SocialStream::Presence.remote_xmpp_server=false
|
184
|
+
output = executeLocalCommand(command)
|
185
|
+
end
|
203
186
|
return output
|
204
187
|
end
|
188
|
+
|
189
|
+
def executeCommands(commands)
|
190
|
+
puts "Executing the following commands:"
|
191
|
+
commands.each do |command|
|
192
|
+
puts command
|
193
|
+
end
|
194
|
+
puts "Command list finish"
|
195
|
+
if SocialStream::Presence.remote_xmpp_server
|
196
|
+
output = executeRemoteCommands(commands)
|
197
|
+
else
|
198
|
+
#SocialStream::Presence.remote_xmpp_server=false
|
199
|
+
output = executeLocalCommands(commands)
|
200
|
+
end
|
201
|
+
return output
|
202
|
+
end
|
203
|
+
|
204
|
+
def executeLocalCommand(command)
|
205
|
+
return executeLocalCommands([command])
|
206
|
+
end
|
207
|
+
|
208
|
+
def executeLocalCommands(commands)
|
209
|
+
output="No command received";
|
210
|
+
commands.each do |command|
|
211
|
+
output = %x[#{command}];
|
212
|
+
end
|
213
|
+
return output
|
214
|
+
end
|
215
|
+
|
216
|
+
def executeRemoteCommand(command)
|
217
|
+
return executeRemoteCommands([command])
|
218
|
+
end
|
219
|
+
|
220
|
+
def executeRemoteCommands(commands)
|
221
|
+
output="No command received";
|
222
|
+
Net::SSH.start( SocialStream::Presence.ssh_domain, SocialStream::Presence.ssh_user, :password => SocialStream::Presence.ssh_password, :auth_methods => ["password"]) do |session|
|
223
|
+
commands.each do |command|
|
224
|
+
output = session.exec!(command)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
return output
|
228
|
+
end
|
229
|
+
|
230
|
+
|
231
|
+
|
232
|
+
#Help methods
|
233
|
+
|
234
|
+
def isEjabberdNodeUp
|
235
|
+
output = executeEmanagementCommand("isEjabberdNodeStarted",[])
|
236
|
+
nodeUp = output.split("\n")[3]
|
237
|
+
return (nodeUp and nodeUp.strip()=="true")
|
238
|
+
end
|
239
|
+
|
240
|
+
|
205
241
|
|
242
|
+
#Xmpp client manage methods
|
243
|
+
|
244
|
+
def getSocialStreamUserSid
|
245
|
+
#XMPP DOMAIN
|
246
|
+
domain = SocialStream::Presence.domain
|
247
|
+
#SS Username
|
248
|
+
ss_name = SocialStream::Presence.social_stream_presence_username
|
249
|
+
return ss_name + "@" + domain
|
250
|
+
end
|
251
|
+
|
252
|
+
|
253
|
+
def openXmppClientForSocialStreamUser
|
254
|
+
begin
|
255
|
+
password= SocialStream::Presence.password
|
256
|
+
client = Jabber::Client.new(Jabber::JID.new(getSocialStreamUserSid))
|
257
|
+
client.connect
|
258
|
+
client.auth(password)
|
259
|
+
return client
|
260
|
+
rescue Exception => e
|
261
|
+
case e
|
262
|
+
when Errno::ECONNREFUSED
|
263
|
+
puts "Connection to XMPP Server refused"
|
264
|
+
return nil
|
265
|
+
else
|
266
|
+
puts "Unknown exception: #{e.to_s}"
|
267
|
+
return nil
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
|
273
|
+
def sendXmppChatMessage(client,dest_sid,body)
|
274
|
+
msg = Jabber::Message::new(dest_sid, body)
|
275
|
+
msg.type=:chat
|
276
|
+
client.send(msg)
|
277
|
+
end
|
278
|
+
|
206
279
|
end
|
207
|
-
|
208
280
|
end
|
209
281
|
end
|
210
282
|
end
|