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.
- data/Rakefile +7 -0
- data/app/assets/audio/chat/onMessageAudio.mp3 +0 -0
- data/app/assets/audio/chat/onMessageAudio.wav +0 -0
- data/app/assets/images/black_arrow3.png +0 -0
- data/app/assets/images/status/available.png +0 -0
- data/app/assets/images/status/away.png +0 -0
- data/app/assets/images/status/dnd.png +0 -0
- data/app/assets/javascripts/jquery-ui-1.8.14.custom.min.js +789 -0
- data/app/assets/javascripts/jquery.tools.min.js +17 -0
- data/app/assets/javascripts/jquery.tools.tooltip.js +11 -0
- data/app/assets/javascripts/jquery.ui.chatbox.js +260 -0
- data/app/assets/javascripts/social_stream-presence.js +2 -0
- data/app/assets/javascripts/store.js +20 -0
- data/app/assets/javascripts/strophe.js +3612 -0
- data/app/assets/javascripts/xmpp_client.js +494 -0
- data/app/assets/stylesheets/chat.css +239 -0
- data/app/assets/stylesheets/jquery.ui.chatbox.css +54 -0
- data/app/assets/stylesheets/social_stream-presence.css +3 -0
- data/app/controllers/xmpp_controller.rb +223 -0
- data/app/helpers/xmpp_helper.rb +20 -0
- data/app/views/xmpp/_chat.html.erb +63 -0
- data/app/views/xmpp/_chat_connecting.html.erb +8 -0
- data/app/views/xmpp/_chat_contacts.html.erb +46 -0
- data/app/views/xmpp/_chat_off.html.erb +35 -0
- data/app/views/xmpp/active_users.html.erb +33 -0
- data/app/views/xmpp/chat.html.erb +13 -0
- data/app/views/xmpp/index.html +19 -0
- data/app/views/xmpp/test.html.erb +11 -0
- data/config/routes.rb +15 -0
- data/db/migrate/20110711111408_add_connected_column_to_user.rb +9 -0
- data/db/migrate/20110928135031_add_status_column_to_user.rb +9 -0
- data/ejabberd/conf/ejabberd.cfg +625 -0
- data/ejabberd/conf/ejabberdctl.cfg +154 -0
- data/ejabberd/conf/inetrc +3 -0
- data/ejabberd/conf/server.pem +37 -0
- data/ejabberd/conf/ssconfig.cfg +32 -0
- data/ejabberd/ejabberd_scripts/authentication_script +117 -0
- data/ejabberd/ejabberd_scripts/authentication_script_org +114 -0
- data/ejabberd/ejabberd_scripts/compile_module +34 -0
- data/ejabberd/ejabberd_scripts/emanagement +245 -0
- data/ejabberd/ejabberd_scripts/generate_random_password +18 -0
- data/ejabberd/ejabberd_scripts/kill_authentication_script.sh +13 -0
- data/ejabberd/ejabberd_scripts/reset_connection_script +55 -0
- data/ejabberd/ejabberd_scripts/reset_logs.sh +23 -0
- data/ejabberd/ejabberd_scripts/set_connection_script +48 -0
- data/ejabberd/ejabberd_scripts/set_presence_script +48 -0
- data/ejabberd/ejabberd_scripts/show_config.sh +30 -0
- data/ejabberd/ejabberd_scripts/start_ejabberd.sh +68 -0
- data/ejabberd/ejabberd_scripts/stop_ejabberd.sh +12 -0
- data/ejabberd/ejabberd_scripts/synchronize_presence_script +57 -0
- data/ejabberd/ejabberd_scripts/unset_connection_script +48 -0
- data/ejabberd/mod_admin_extra/mod_admin_extra.beam +0 -0
- data/ejabberd/mod_admin_extra/mod_admin_extra.erl +1560 -0
- data/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
- data/ejabberd/mod_sspresence/mod_sspresence.erl +257 -0
- data/lib/social_stream-presence.rb +19 -2
- data/lib/social_stream/migrations/presence.rb +9 -0
- data/lib/social_stream/presence/engine.rb +62 -0
- data/lib/social_stream/presence/models/buddy_manager.rb +76 -0
- data/lib/social_stream/presence/version.rb +5 -0
- data/lib/tasks/presence/synchronize.rake +63 -0
- data/social_stream-presence.gemspec +4 -4
- metadata +69 -11
- 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,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
|
+
|