social_stream-presence 0.0.2 → 0.0.4

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.
Files changed (64) hide show
  1. data/Rakefile +7 -0
  2. data/app/assets/audio/chat/onMessageAudio.mp3 +0 -0
  3. data/app/assets/audio/chat/onMessageAudio.wav +0 -0
  4. data/app/assets/images/black_arrow3.png +0 -0
  5. data/app/assets/images/status/available.png +0 -0
  6. data/app/assets/images/status/away.png +0 -0
  7. data/app/assets/images/status/dnd.png +0 -0
  8. data/app/assets/javascripts/jquery-ui-1.8.14.custom.min.js +789 -0
  9. data/app/assets/javascripts/jquery.tools.min.js +17 -0
  10. data/app/assets/javascripts/jquery.tools.tooltip.js +11 -0
  11. data/app/assets/javascripts/jquery.ui.chatbox.js +260 -0
  12. data/app/assets/javascripts/social_stream-presence.js +2 -0
  13. data/app/assets/javascripts/store.js +20 -0
  14. data/app/assets/javascripts/strophe.js +3612 -0
  15. data/app/assets/javascripts/xmpp_client.js +494 -0
  16. data/app/assets/stylesheets/chat.css +239 -0
  17. data/app/assets/stylesheets/jquery.ui.chatbox.css +54 -0
  18. data/app/assets/stylesheets/social_stream-presence.css +3 -0
  19. data/app/controllers/xmpp_controller.rb +223 -0
  20. data/app/helpers/xmpp_helper.rb +20 -0
  21. data/app/views/xmpp/_chat.html.erb +63 -0
  22. data/app/views/xmpp/_chat_connecting.html.erb +8 -0
  23. data/app/views/xmpp/_chat_contacts.html.erb +46 -0
  24. data/app/views/xmpp/_chat_off.html.erb +35 -0
  25. data/app/views/xmpp/active_users.html.erb +33 -0
  26. data/app/views/xmpp/chat.html.erb +13 -0
  27. data/app/views/xmpp/index.html +19 -0
  28. data/app/views/xmpp/test.html.erb +11 -0
  29. data/config/routes.rb +15 -0
  30. data/db/migrate/20110711111408_add_connected_column_to_user.rb +9 -0
  31. data/db/migrate/20110928135031_add_status_column_to_user.rb +9 -0
  32. data/ejabberd/conf/ejabberd.cfg +625 -0
  33. data/ejabberd/conf/ejabberdctl.cfg +154 -0
  34. data/ejabberd/conf/inetrc +3 -0
  35. data/ejabberd/conf/server.pem +37 -0
  36. data/ejabberd/conf/ssconfig.cfg +32 -0
  37. data/ejabberd/ejabberd_scripts/authentication_script +117 -0
  38. data/ejabberd/ejabberd_scripts/authentication_script_org +114 -0
  39. data/ejabberd/ejabberd_scripts/compile_module +34 -0
  40. data/ejabberd/ejabberd_scripts/emanagement +245 -0
  41. data/ejabberd/ejabberd_scripts/generate_random_password +18 -0
  42. data/ejabberd/ejabberd_scripts/kill_authentication_script.sh +13 -0
  43. data/ejabberd/ejabberd_scripts/reset_connection_script +55 -0
  44. data/ejabberd/ejabberd_scripts/reset_logs.sh +23 -0
  45. data/ejabberd/ejabberd_scripts/set_connection_script +48 -0
  46. data/ejabberd/ejabberd_scripts/set_presence_script +48 -0
  47. data/ejabberd/ejabberd_scripts/show_config.sh +30 -0
  48. data/ejabberd/ejabberd_scripts/start_ejabberd.sh +68 -0
  49. data/ejabberd/ejabberd_scripts/stop_ejabberd.sh +12 -0
  50. data/ejabberd/ejabberd_scripts/synchronize_presence_script +57 -0
  51. data/ejabberd/ejabberd_scripts/unset_connection_script +48 -0
  52. data/ejabberd/mod_admin_extra/mod_admin_extra.beam +0 -0
  53. data/ejabberd/mod_admin_extra/mod_admin_extra.erl +1560 -0
  54. data/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
  55. data/ejabberd/mod_sspresence/mod_sspresence.erl +257 -0
  56. data/lib/social_stream-presence.rb +19 -2
  57. data/lib/social_stream/migrations/presence.rb +9 -0
  58. data/lib/social_stream/presence/engine.rb +62 -0
  59. data/lib/social_stream/presence/models/buddy_manager.rb +76 -0
  60. data/lib/social_stream/presence/version.rb +5 -0
  61. data/lib/tasks/presence/synchronize.rake +63 -0
  62. data/social_stream-presence.gemspec +4 -4
  63. metadata +69 -11
  64. data/.project +0 -17
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ def getOption(option)
5
+ File.open('/etc/ejabberd/ssconfig.cfg', 'r') do |f1|
6
+ while line = f1.gets
7
+ line = line.gsub(/\n/,'')
8
+ if line.match(/^#/)
9
+ #Comments
10
+ elsif line.match(/^#{option}/)
11
+ return line.gsub(/#{option}/,'')
12
+ end
13
+ end
14
+ end
15
+ return "Undefined"
16
+ end
17
+
18
+
19
+
20
+
21
+ source_path = getOption("source_path=")
22
+
23
+ if source_path == "Undefined"
24
+ #puts "mod_sspresence source_path in undefined: define source_path in /etc/ejabberd/ssconfig.cfg to compile mod_sspresence"
25
+ puts "mod_sspresence source_path in undefined: Exit compile"
26
+ else
27
+ puts "Compile mod_sspresence"
28
+ system("erlc #{source_path}/mod_sspresence.erl")
29
+ system 'sudo mv mod_sspresence.beam /lib/ejabberd/ebin/mod_sspresence.beam'
30
+ puts "Compile mod_sspresence OK"
31
+ end
32
+
33
+
34
+
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #Ejabberd Management script
4
+ #New features for management and maintenance ejabberd
5
+ #@author Aldo
6
+
7
+ require 'logger'
8
+
9
+ path = "/var/log/ejabberd/scripts.log"
10
+ file = File.open(path, File::WRONLY | File::APPEND | File::CREAT)
11
+ file.sync = true
12
+ $logger = Logger.new(file)
13
+ $logger.level = Logger::DEBUG
14
+
15
+ def getOption(option)
16
+ File.open('/etc/ejabberd/ssconfig.cfg', 'r') do |f1|
17
+ while line = f1.gets
18
+ line = line.gsub(/\n/,'')
19
+ if line.match(/^#/)
20
+ #Comments
21
+ elsif line.match(/^#{option}/)
22
+ return line.gsub(/#{option}/,'')
23
+ end
24
+ end
25
+ end
26
+ return "Undefined"
27
+ end
28
+
29
+ def ejabberdLog(text)
30
+ $logger.info "Ejabberd Management Script: " + text
31
+ end
32
+
33
+ #Configuration variables
34
+ $domain = getOption("server_domain=")
35
+
36
+ PARAMS_FOR_COMMANDS = {
37
+ 'getRoster' => 1,
38
+ 'removeBuddyFromRoster' => 2,
39
+ 'addBuddyToRoster' => 5,
40
+ 'removeRoster' => 1,
41
+ 'getBuddysFromRoster' => 1,
42
+ 'setBidireccionalBuddys' => 4,
43
+ 'help' => 0,
44
+ 'getUserResource' => 1,
45
+ 'sendMessageToUser' => 3,
46
+ 'sendPresence' => 2,
47
+ 'unsetPresence' => 1,
48
+ 'setPresence' => 1,
49
+ 'removeAllRosters' => 0,
50
+ }
51
+
52
+ SYNTAX_FOR_COMMANDS = {
53
+ 'getRoster' => "getRoster username",
54
+ 'removeBuddyFromRoster' => "removeBuddyFromRoster username buddy",
55
+ 'addBuddyToRoster' => "addBuddyToRoster username buddy buddyNick buddyGroup subscription_type",
56
+ 'removeRoster' => "removeRoster username",
57
+ 'getBuddysFromRoster' => "getBuddysFromRoster roster",
58
+ 'setBidireccionalBuddys' => "setBidireccionalBuddys usernameA usernameB nickA nickB",
59
+ 'getUserResource' => "getUserResource username",
60
+ 'sendMessageToUser' => "sendMessageToUser from_name to_name msg",
61
+ 'sendPresence' => 'sendPresence username show',
62
+ 'unsetPresence' => 'unsetPresence username',
63
+ 'setPresence' => 'setPresence username',
64
+ 'removeAllRosters' => 'removeAllRosters'
65
+ }
66
+
67
+ def log(msg)
68
+ logWithTitle(msg,nil)
69
+ end
70
+
71
+ def logWithTitle(msg,title)
72
+ puts "------------------------"
73
+ if title
74
+ puts ("<<<" + title + ">>>")
75
+ end
76
+ puts msg
77
+ puts "------------------------"
78
+ end
79
+
80
+
81
+ def getRoster(username)
82
+ command = "ejabberdctl get_roster " + username + " " + $domain
83
+ %x[#{command}];
84
+ end
85
+
86
+ def removeBuddyFromRoster(username,buddy)
87
+ command = "ejabberdctl delete_rosteritem " + username + " " + $domain + " " + buddy + " " + $domain
88
+ %x[#{command}];
89
+ end
90
+
91
+ def addBuddyToRoster(username,buddy,buddyNick,buddyGroup,subscription_type)
92
+ command = "ejabberdctl add-rosteritem " + username + " " + $domain + " " + buddy + " " + $domain + " \\'" + buddyNick + "\\' " + buddyGroup + " " + subscription_type
93
+ %x[#{command}];
94
+ end
95
+
96
+ def removeRoster(username)
97
+ user_roster = getRoster(username);
98
+ user_buddys = getBuddysFromRoster(user_roster);
99
+ user_buddys.each do |buddy|
100
+ removeBuddyFromRoster(username,buddy)
101
+ end
102
+ return "Done"
103
+ end
104
+
105
+ def removeAllRosters()
106
+ command = "ejabberdctl process_rosteritems delete any any any any"
107
+ %x[#{command}];
108
+ return "Done";
109
+ end
110
+
111
+ def getBuddysFromRoster(roster)
112
+ buddys = []
113
+ lines = roster.split("\n")
114
+ lines.each do |line|
115
+ buddys << line.split("@")[0]
116
+ end
117
+ buddys
118
+ end
119
+
120
+ def setBidireccionalBuddys(usernameA,usernameB,nickA,nickB)
121
+ #addBuddyToRoster(username,buddy,buddyNick,buddyGroup,subscription_type)
122
+ addBuddyToRoster(usernameA,usernameB,nickB,"SocialStream","both")
123
+ addBuddyToRoster(usernameB,usernameA,nickA,"SocialStream","both")
124
+ sendPresence(usernameA,"chat")
125
+ sendPresence(usernameB,"chat")
126
+ return "Done"
127
+ end
128
+
129
+ def sendStanzaUserMessage(username,msg)
130
+ resource = getUserResource(username);
131
+ stanza = "\\<\\'message\\'\\>\\<\\'body\\'\\>\\'" + msg + "\\'\\<\\'/body\\'\\>\\<\\'/message\\'\\>"
132
+ command = "ejabberdctl send_stanza_c2s " + username + " " + $domain + " " + resource + " " + stanza
133
+ puts "Executing: " + command
134
+ %x[#{command}];
135
+ return "Done"
136
+ end
137
+
138
+
139
+ def sendPresence(username,show)
140
+ sendPresenceWithShow(username,username,show)
141
+ end
142
+
143
+ def unsetPresence(username)
144
+ sendPresenceStanzaWithType(username,username,"unavailable")
145
+ end
146
+
147
+ def setPresence(username)
148
+ sendPresenceStanzaWithType(username,username,"available")
149
+ end
150
+
151
+ def sendPresenceWithShow(from_name,to_name,show)
152
+ puts from_name
153
+ resource = getUserResource(from_name);
154
+ puts resource
155
+ from_sid = from_name + "@" + $domain;
156
+ to_sid = to_name + "@" + $domain;
157
+ pres_stanza = "\\<\\'presence from=\\'\\\"\\'" + from_sid + "\\'\\\"\\' to=\\'\\\"\\'" + to_sid + "\\'\\\"\\>\\<\\'show\\'\\>\\'" + show + "\\'\\<\\'/show\\'\\>\\<\\'/presence\\'\\>"
158
+ command = "ejabberdctl send_stanza_c2s " + from_name + " " + $domain + " " + resource + " " + pres_stanza
159
+ puts "Executing: " + command
160
+ %x[#{command}];
161
+ return "Done"
162
+ end
163
+
164
+ def sendPresenceStanzaWithType(from_name,to_name,presence_type)
165
+ resource = getUserResource(from_name);
166
+ from_sid = from_name + "@" + $domain;
167
+ to_sid = to_name + "@" + $domain;
168
+ pres_stanza = "\\<\\'presence type=\\'\\\"\\'" + presence_type + "\\'\\\"\\' from=\\'\\\"\\'" + from_sid + "\\'\\\"\\' to=\\'\\\"\\'" + to_sid + "\\'\\\"\\>\\<\\'/presence\\'\\>"
169
+ command = "ejabberdctl send_stanza_c2s " + from_name + " " + $domain + " " + resource + " " + pres_stanza
170
+ puts "Executing: " + command
171
+ %x[#{command}];
172
+ return "Done"
173
+ end
174
+
175
+ def sendMessageToUser(from_name,to_name,msg)
176
+ from_sid = from_name + "@" + $domain;
177
+ to_sid = to_name + "@" + $domain;
178
+ command = "ejabberdctl send_message_chat " + from_sid + " " + to_sid + " " + "\\'" + msg + "\\'";
179
+ puts "Executing: " + command
180
+ %x[#{command}];
181
+ return "Done"
182
+ end
183
+
184
+ def getUserResource(username)
185
+ command = "ejabberdctl connected-users"
186
+ output = %x[#{command}];
187
+ lines = output.split("\n");
188
+ lines.each do |line|
189
+ if line.split("@")[0] == username
190
+ #puts "Find " + username
191
+ s = line.split("@")[1];
192
+ resource = s.split("/")[1];
193
+ return resource;
194
+ end
195
+ end
196
+ return username + " no have any active session"
197
+ end
198
+
199
+ def help
200
+ log("Command list")
201
+ SYNTAX_FOR_COMMANDS.values.each do |command|
202
+ puts command
203
+ end
204
+ puts ""
205
+ end
206
+
207
+ log("Init Ejabberd Maintenance script")
208
+
209
+ begin
210
+ if ARGV[0] and PARAMS_FOR_COMMANDS.keys.include?(ARGV[0])
211
+ if (ARGV.length == (PARAMS_FOR_COMMANDS[ARGV[0]]+1))
212
+
213
+ ejabberdLog("Executing (#{ARGV[0]})")
214
+
215
+ length = ARGV.length;
216
+ case length
217
+ when 1
218
+ puts send(ARGV[0])
219
+ when 2
220
+ puts send(ARGV[0],ARGV[1])
221
+ when 3
222
+ puts send(ARGV[0],ARGV[1],ARGV[2])
223
+ when 4
224
+ puts send(ARGV[0],ARGV[1],ARGV[2],ARGV[3])
225
+ when 5
226
+ puts send(ARGV[0],ARGV[1],ARGV[2],ARGV[3],ARGV[4])
227
+ when 6
228
+ puts send(ARGV[0],ARGV[1],ARGV[2],ARGV[3],ARGV[4],ARGV[5])
229
+ else
230
+ puts send(ARGV[0],ARGV)
231
+ end
232
+ puts ""
233
+ else
234
+ log("Error: Params required for command " + (ARGV[0]).to_s() + ": " + (PARAMS_FOR_COMMANDS[ARGV[0]]).to_s())
235
+ log("Use 'help' to get information about command syntax")
236
+ end
237
+ else
238
+
239
+ log("Error: Command not recognized")
240
+ log("Use 'help' to get information about command syntax")
241
+ end
242
+ rescue
243
+ puts "Parametros incorrectos"
244
+ end
245
+
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ def newpass(l)
4
+ chars = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!$%&()=?|@^*'
5
+ password = ''
6
+ l.downto(1) { |i| password << chars[rand(chars.length - 1)] }
7
+ return password
8
+ end
9
+
10
+ puts "Generate random password"
11
+
12
+ unless ARGV[0]
13
+ puts "Error: Password lenght argument missed"
14
+ exit
15
+ else
16
+ puts ARGV[0]
17
+ puts newpass(Integer(ARGV[0]))
18
+ end
@@ -0,0 +1,13 @@
1
+ #!/bin/bash
2
+
3
+ echo "Kill All Authentication Scripts"
4
+
5
+ for pid in `ps -aef | grep './authentication_script' | grep -v grep | awk '{print $2}'`
6
+ do
7
+ echo $pid
8
+ kill -9 $pid
9
+ done
10
+
11
+
12
+
13
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+ #Reset Connection Script
3
+ #@author Aldo
4
+
5
+ require 'logger'
6
+ require 'rest_client'
7
+
8
+ path = "/var/log/ejabberd/scripts.log"
9
+ file = File.open(path, File::WRONLY | File::APPEND | File::CREAT)
10
+ file.sync = true
11
+ $logger = Logger.new(file)
12
+ $logger.level = Logger::DEBUG
13
+
14
+ def getOption(option)
15
+ File.open('/etc/ejabberd/ssconfig.cfg', 'r') do |f1|
16
+ while line = f1.gets
17
+ line = line.gsub(/\n/,'')
18
+ if line.match(/^#/)
19
+ #Comments
20
+ elsif line.match(/^#{option}/)
21
+ return line.gsub(/#{option}/,'')
22
+ end
23
+ end
24
+ end
25
+ return "Undefined"
26
+ end
27
+
28
+ $url = getOption("reset_connection_api=")
29
+ $pass = getOption("ejabberd_password=")
30
+
31
+
32
+ def log(text)
33
+ $logger.info "Reset Connection Script: " + text
34
+ end
35
+
36
+
37
+ def resetConnection()
38
+ begin
39
+ RestClient.post($url, :password => $pass)
40
+ return true
41
+ rescue => e
42
+ log("#{e.class.name}: #{e.message}")
43
+ return false
44
+ end
45
+ end
46
+
47
+ if (resetConnection())
48
+ puts "Reset Connection [OK]"
49
+ log( "Reset Connection [OK]" )
50
+ else
51
+ puts "Reset Connection [FAIL]"
52
+ log( "Reset Connection [FAIL]" )
53
+ end
54
+
55
+
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+
3
+ echo "Starting Reset logs"
4
+
5
+ rm /var/log/ejabberd/auth.log
6
+ rm /var/log/ejabberd/auth_error.log
7
+ rm /var/log/ejabberd/ejabberd.log
8
+ rm /var/log/ejabberd/erlang.log
9
+ rm /var/log/ejabberd/scripts.log
10
+ rm /var/log/ejabberd/erl_crash_*
11
+
12
+ touch /var/log/ejabberd/auth.log
13
+ touch /var/log/ejabberd/auth_error.log
14
+ touch /var/log/ejabberd/ejabberd.log
15
+ touch /var/log/ejabberd/erlang.log
16
+ touch /var/log/ejabberd/scripts.log
17
+ touch /var/log/ejabberd/erl_crash_dummy.log
18
+
19
+ echo "Reset logs OK"
20
+
21
+
22
+
23
+
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ #Set Connection Script
3
+ #@author Aldo
4
+
5
+ require 'logger'
6
+ require 'rest_client'
7
+
8
+ path = "/var/log/ejabberd/scripts.log"
9
+ file = File.open(path, File::WRONLY | File::APPEND | File::CREAT)
10
+ file.sync = true
11
+ $logger = Logger.new(file)
12
+ $logger.level = Logger::DEBUG
13
+
14
+ def getOption(option)
15
+ File.open('/etc/ejabberd/ssconfig.cfg', 'r') do |f1|
16
+ while line = f1.gets
17
+ line = line.gsub(/\n/,'')
18
+ if line.match(/^#/)
19
+ #Comments
20
+ elsif line.match(/^#{option}/)
21
+ return line.gsub(/#{option}/,'')
22
+ end
23
+ end
24
+ end
25
+ return "Undefined"
26
+ end
27
+
28
+ $url = getOption("set_connection_api=")
29
+ $pass = getOption("ejabberd_password=")
30
+
31
+
32
+ def log(text)
33
+ $logger.info "Set Connection Script: " + text
34
+ end
35
+
36
+ def setConnection(username)
37
+ log("setConnection(#{username})")
38
+ RestClient.post($url, :name => username, :password => $pass)
39
+ return true
40
+
41
+ rescue RestClient::Exception
42
+ log("RestClient::Exception with setConnection(#{username})")
43
+ end
44
+
45
+
46
+ setConnection(ARGV[0])
47
+
48
+
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ #Set Presence Script
3
+ #@author Aldo
4
+
5
+ require 'logger'
6
+ require 'rest_client'
7
+
8
+ path = "/var/log/ejabberd/scripts.log"
9
+ file = File.open(path, File::WRONLY | File::APPEND | File::CREAT)
10
+ file.sync = true
11
+ $logger = Logger.new(file)
12
+ $logger.level = Logger::DEBUG
13
+
14
+ def getOption(option)
15
+ File.open('/etc/ejabberd/ssconfig.cfg', 'r') do |f1|
16
+ while line = f1.gets
17
+ line = line.gsub(/\n/,'')
18
+ if line.match(/^#/)
19
+ #Comments
20
+ elsif line.match(/^#{option}/)
21
+ return line.gsub(/#{option}/,'')
22
+ end
23
+ end
24
+ end
25
+ return "Undefined"
26
+ end
27
+
28
+ $url = getOption("set_presence_api=")
29
+ $pass = getOption("ejabberd_password=")
30
+
31
+
32
+ def log(text)
33
+ $logger.info "Set Presence Script: " + text
34
+ end
35
+
36
+ def setPresence(username,status)
37
+ log("setPresence(#{username},#{status})")
38
+ RestClient.post($url, :name => username, :status => status, :password => $pass)
39
+ return true
40
+
41
+ rescue RestClient::Exception
42
+ log("RestClient::Exception with setPresence(#{username})")
43
+ end
44
+
45
+
46
+ setPresence(ARGV[0],ARGV[1])
47
+
48
+