social_stream-presence 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
+