social_stream-presence 0.1.4 → 0.1.6
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/.gitignore +1 -0
- data/app/controllers/xmpp_controller.rb +41 -52
- data/ejabberd/conf/ssconfig_example.cfg +2 -1
- data/ejabberd/ejabberd_files.zip +0 -0
- data/ejabberd/ejabberd_scripts/reset_connection_script +255 -13
- data/ejabberd/ejabberd_scripts/rest_api_client_script +301 -0
- data/ejabberd/ejabberd_scripts/synchronize_presence_script +256 -18
- data/ejabberd/mod_sspresence/mod_sspresence.beam +0 -0
- data/ejabberd/mod_sspresence/mod_sspresence.erl +10 -10
- data/lib/generators/social_stream/presence/templates/initializer.rb +6 -4
- data/lib/social_stream-presence.rb +2 -0
- data/lib/social_stream/presence/version.rb +1 -1
- data/lib/social_stream/presence/xmpp_server_order.rb +190 -12
- data/lib/tasks/presence/installer.rake +38 -4
- metadata +4 -7
- data/ejabberd/ejabberd_scripts/set_connection_script +0 -48
- data/ejabberd/ejabberd_scripts/set_presence_script +0 -48
- data/ejabberd/ejabberd_scripts/unset_connection_script +0 -48
- data/ejabberd/ejabberd_scripts/unset_presence_script +0 -48
Binary file
|
@@ -52,8 +52,8 @@ stop(Host) ->
|
|
52
52
|
on_register_connection(_SID, _JID, _Info) ->
|
53
53
|
{_A,User,_B,_C,_D,_E,_F} = _JID,
|
54
54
|
?INFO_MSG("mod_sspresence: on_register_connection (~p)", [User]),
|
55
|
-
|
56
|
-
os:cmd(string:join([
|
55
|
+
Rest_api_script_path = string:concat(getOptionValue("scripts_path="), "/rest_api_client_script "),
|
56
|
+
os:cmd(string:join([Rest_api_script_path, "setConnection", User ], " ")),
|
57
57
|
ok.
|
58
58
|
|
59
59
|
on_remove_connection(_SID, _JID, _SessionInfo) ->
|
@@ -62,8 +62,8 @@ on_remove_connection(_SID, _JID, _SessionInfo) ->
|
|
62
62
|
Connected = isConnected(User),
|
63
63
|
case Connected of
|
64
64
|
true -> ok;
|
65
|
-
_ ->
|
66
|
-
os:cmd(string:join([
|
65
|
+
_ -> Rest_api_script_path = string:concat(getOptionValue("scripts_path="), "/rest_api_client_script "),
|
66
|
+
os:cmd(string:join([Rest_api_script_path, "unsetConnection", User ], " "))
|
67
67
|
end,
|
68
68
|
ok.
|
69
69
|
|
@@ -73,19 +73,19 @@ on_presence(User, _Server, _Resource, Packet) ->
|
|
73
73
|
|
74
74
|
case Type of
|
75
75
|
"presence" -> Status = getStatusFromSubel(Subel),
|
76
|
-
|
76
|
+
Rest_api_script_path = string:concat(getOptionValue("scripts_path="), "/rest_api_client_script "),
|
77
77
|
?INFO_MSG("mod_sspresence: set_presence_script call with user (~p) and status (~p)", [User,Status]),
|
78
|
-
os:cmd(string:join([
|
78
|
+
os:cmd(string:join([Rest_api_script_path, "setPresence", User , Status], " "));
|
79
79
|
_ -> ok
|
80
80
|
end,
|
81
81
|
ok.
|
82
82
|
|
83
83
|
on_unset_presence(User, _Server, _Resource, _Status) ->
|
84
84
|
?INFO_MSG("mod_sspresence: on_unset_presence (~p)", [User]),
|
85
|
-
|
85
|
+
_Rest_api_script_path = string:concat(getOptionValue("scripts_path="), "/rest_api_client_script "),
|
86
86
|
%% Wait for on_remove_connection
|
87
87
|
%% ?INFO_MSG("mod_sspresence: unset_presence_script call with user (~p)", [User]),
|
88
|
-
%%os:cmd(string:join([
|
88
|
+
%%os:cmd(string:join([_Rest_api_script_path, "unsetPresence", User , Status], " ")),
|
89
89
|
ok.
|
90
90
|
|
91
91
|
on_packet_send(_From, _To, {xmlelement, Type, _Attr, _Subel} = _Packet) ->
|
@@ -185,8 +185,8 @@ end.
|
|
185
185
|
|
186
186
|
%Reset all connections
|
187
187
|
reset_connections() ->
|
188
|
-
|
189
|
-
os:cmd(
|
188
|
+
Rest_api_script_path = string:concat(getOptionValue("scripts_path="), "/rest_api_client_script "),
|
189
|
+
os:cmd(string:join([Rest_api_script_path, "resetConnection"], " ")),
|
190
190
|
ok.
|
191
191
|
|
192
192
|
|
@@ -6,13 +6,15 @@ SocialStream::Presence.setup do |config|
|
|
6
6
|
#Configures Authentication Method: "cookie" or "password"
|
7
7
|
config.auth_method = "cookie"
|
8
8
|
#Configures XMPP Server Password
|
9
|
-
config.xmpp_server_password = <%= SecureRandom.hex(
|
9
|
+
config.xmpp_server_password = <%= SecureRandom.hex(16).inspect %>
|
10
|
+
#Uncomment to enable REST API Security
|
11
|
+
#config.secure_rest_api = true
|
10
12
|
#Remote or local mode
|
11
13
|
config.remote_xmpp_server = false
|
12
14
|
#Scripts path to execute ejabberd scripts: local or remote
|
13
15
|
config.scripts_path = "/scripts_path"
|
14
16
|
#Ejabberd module path in the xmpp server
|
15
|
-
config.ejabberd_module_path = "/lib/ejabberd/ebin"
|
17
|
+
config.ejabberd_module_path = "/usr/lib/ejabberd/ebin"
|
16
18
|
#Uncomment to enable Social Stream Presence
|
17
19
|
#config.enable = true
|
18
20
|
|
@@ -27,6 +29,6 @@ SocialStream::Presence.setup do |config|
|
|
27
29
|
#Username of the the Social Stream Admin sid
|
28
30
|
config.social_stream_presence_username = "social_stream-presence"
|
29
31
|
#Configures Social Stream Rails App Password
|
30
|
-
config.password = <%= SecureRandom.hex(
|
32
|
+
config.password = <%= SecureRandom.hex(32).inspect %>
|
31
33
|
|
32
|
-
end
|
34
|
+
end
|
@@ -20,6 +20,7 @@ module SocialStream
|
|
20
20
|
mattr_accessor :bosh_service
|
21
21
|
mattr_accessor :auth_method
|
22
22
|
mattr_accessor :xmpp_server_password
|
23
|
+
mattr_accessor :secure_rest_api
|
23
24
|
mattr_accessor :remote_xmpp_server
|
24
25
|
mattr_accessor :scripts_path
|
25
26
|
mattr_accessor :ejabberd_module_path
|
@@ -34,6 +35,7 @@ module SocialStream
|
|
34
35
|
|
35
36
|
@@auth_method = "cookie"
|
36
37
|
@@remote_xmpp_server = false
|
38
|
+
@@secure_rest_api = false
|
37
39
|
@@enable = false
|
38
40
|
|
39
41
|
class << self
|
@@ -5,6 +5,9 @@ require 'xmpp4r/client'
|
|
5
5
|
require 'xmpp4r/message'
|
6
6
|
require 'net/ssh'
|
7
7
|
require 'net/sftp'
|
8
|
+
require 'openssl'
|
9
|
+
require 'digest/md5'
|
10
|
+
|
8
11
|
|
9
12
|
module SocialStream
|
10
13
|
module Presence
|
@@ -111,18 +114,18 @@ module SocialStream
|
|
111
114
|
|
112
115
|
#Installation methods
|
113
116
|
|
114
|
-
def
|
117
|
+
def copyFolderToXmppServer(oPath,dPath)
|
115
118
|
if SocialStream::Presence.remote_xmpp_server
|
116
119
|
#Remote mode
|
117
|
-
|
120
|
+
copyFolderToXmppServerRemote(oPath,dPath)
|
118
121
|
else
|
119
122
|
#Local mode
|
120
|
-
|
123
|
+
executeCommand("cp -r " + oPath + "/* " + dPath)
|
121
124
|
end
|
122
125
|
end
|
123
126
|
|
124
127
|
|
125
|
-
def
|
128
|
+
def copyFolderToXmppServerRemote(localPath,remotePath)
|
126
129
|
begin
|
127
130
|
if SocialStream::Presence.ssh_password
|
128
131
|
|
@@ -150,7 +153,15 @@ module SocialStream
|
|
150
153
|
end
|
151
154
|
|
152
155
|
|
153
|
-
def recursiveCopyFolder(localPath,remotePath,sftp)
|
156
|
+
def recursiveCopyFolder(localPath,remotePath,sftp)
|
157
|
+
|
158
|
+
#Check if localPath is a file
|
159
|
+
if File.file?(localPath) and File.file?(remotePath)
|
160
|
+
puts "Copy files..."
|
161
|
+
sftp.upload(localPath, remotePath)
|
162
|
+
return
|
163
|
+
end
|
164
|
+
|
154
165
|
# Create directory if not exits
|
155
166
|
sftp.mkdir(remotePath)
|
156
167
|
# Upload files to the remote host
|
@@ -172,6 +183,7 @@ module SocialStream
|
|
172
183
|
|
173
184
|
autoconf.push("scripts_path=" + SocialStream::Presence.scripts_path)
|
174
185
|
autoconf.push("ejabberd_password=" + SocialStream::Presence.xmpp_server_password)
|
186
|
+
autoconf.push("secure_rest_api=" + SocialStream::Presence.secure_rest_api.to_s)
|
175
187
|
autoconf.push("server_domain=" + SocialStream::Presence.domain)
|
176
188
|
autoconf.push("cookie_name=" + Rails.application.config.session_options[:key])
|
177
189
|
|
@@ -220,6 +232,53 @@ module SocialStream
|
|
220
232
|
end
|
221
233
|
end
|
222
234
|
|
235
|
+
def generateRSAKeys(keysPath)
|
236
|
+
|
237
|
+
unless File.directory?(keysPath)
|
238
|
+
return "Keys path not exists"
|
239
|
+
end
|
240
|
+
|
241
|
+
web_public_key_path=keysPath+"/web_rsa_key_public.pem"
|
242
|
+
web_private_key_path=keysPath+"/web_rsa_key_private.pem"
|
243
|
+
xmpp_public_key_path=keysPath+"/xmpp_rsa_key_public.pem"
|
244
|
+
xmpp_private_key_path=keysPath+"/xmpp_rsa_key_private.pem"
|
245
|
+
|
246
|
+
# .generate creates an object containing both keys
|
247
|
+
web_rsa_key = OpenSSL::PKey::RSA.generate( 1024 )
|
248
|
+
xmpp_rsa_key = OpenSSL::PKey::RSA.generate( 1024 )
|
249
|
+
|
250
|
+
#Write keys as PEM's
|
251
|
+
|
252
|
+
#Public Key
|
253
|
+
web_rsa_key_public = web_rsa_key.public_key
|
254
|
+
xmpp_rsa_key_public = xmpp_rsa_key.public_key
|
255
|
+
output_public = File.new(web_public_key_path, "w")
|
256
|
+
output_public.puts web_rsa_key_public
|
257
|
+
output_public.close
|
258
|
+
output_public = File.new(xmpp_public_key_path, "w")
|
259
|
+
output_public.puts xmpp_rsa_key_public
|
260
|
+
output_public.close
|
261
|
+
puts "New Web Server public key stored in #{web_public_key_path}\n"
|
262
|
+
#puts "New Web Server public key:\n#{web_rsa_key_public}\n"
|
263
|
+
puts "New Xmpp Server public key stored in #{xmpp_public_key_path}\n"
|
264
|
+
#puts "New Xmpp Server public key:\n#{xmpp_rsa_key_public}\n"
|
265
|
+
|
266
|
+
#Private Key
|
267
|
+
web_rsa_key_private = web_rsa_key.to_pem
|
268
|
+
xmpp_rsa_key_private = xmpp_rsa_key.to_pem
|
269
|
+
output_private = File.new(web_private_key_path, "w")
|
270
|
+
output_private.puts web_rsa_key_private
|
271
|
+
output_private.close
|
272
|
+
output_private = File.new(xmpp_private_key_path, "w")
|
273
|
+
output_private.puts xmpp_rsa_key_private
|
274
|
+
output_private.close
|
275
|
+
puts "New Web Server private key stored in #{web_private_key_path}\n"
|
276
|
+
#puts "New Web Server private key:\n#{web_rsa_key_private}\n"
|
277
|
+
puts "New Xmpp Server private key stored in #{xmpp_private_key_path}\n"
|
278
|
+
#puts "New Xmpp Server private key:\n#{xmpp_rsa_key_private}\n"
|
279
|
+
|
280
|
+
puts "Finish"
|
281
|
+
end
|
223
282
|
|
224
283
|
#Execution commands manage
|
225
284
|
|
@@ -264,38 +323,56 @@ module SocialStream
|
|
264
323
|
return output
|
265
324
|
end
|
266
325
|
|
326
|
+
def executeLocalCommand(command)
|
327
|
+
puts "Executing " + parsingCommand(command)
|
328
|
+
return executeLocalCommands([command])
|
329
|
+
end
|
330
|
+
|
267
331
|
def executeLocalCommands(commands)
|
268
|
-
|
332
|
+
if commands.empty?
|
333
|
+
return "No command received";
|
334
|
+
end
|
335
|
+
output=""
|
269
336
|
commands.each do |command|
|
270
|
-
|
337
|
+
response = %x[#{command}]
|
338
|
+
output = output + "\n" + response;
|
271
339
|
end
|
272
340
|
return output
|
273
341
|
end
|
274
342
|
|
275
343
|
def executeRemoteCommands(commands)
|
276
|
-
|
344
|
+
if commands.empty?
|
345
|
+
return "No command received";
|
346
|
+
end
|
277
347
|
|
278
348
|
begin
|
349
|
+
output="";
|
279
350
|
if SocialStream::Presence.ssh_password
|
280
351
|
Net::SSH.start( SocialStream::Presence.ssh_domain, SocialStream::Presence.ssh_user, :password => SocialStream::Presence.ssh_password, :auth_methods => ["password"]) do |session|
|
281
352
|
commands.each do |command|
|
282
|
-
|
353
|
+
response = session.exec!(command)
|
354
|
+
if response != nil
|
355
|
+
output = output + "\n" + response
|
356
|
+
end
|
283
357
|
end
|
284
358
|
end
|
285
359
|
else
|
286
360
|
#SSH with authentication key instead of password
|
287
361
|
Net::SSH.start( SocialStream::Presence.ssh_domain, SocialStream::Presence.ssh_user) do |session|
|
288
362
|
commands.each do |command|
|
289
|
-
|
363
|
+
response = session.exec!(command)
|
364
|
+
if response != nil
|
365
|
+
output = output + "\n" + response
|
366
|
+
end
|
290
367
|
end
|
291
368
|
end
|
292
369
|
end
|
293
370
|
rescue Exception => e
|
294
371
|
case e
|
295
372
|
when Net::SSH::AuthenticationFailed
|
296
|
-
|
373
|
+
return "ERROR: AuthenticationFailed on remote access"
|
297
374
|
else
|
298
|
-
|
375
|
+
return "ERROR: Unknown exception in executeRemoteCommands method: #{e.to_s}"
|
299
376
|
end
|
300
377
|
end
|
301
378
|
|
@@ -303,6 +380,97 @@ module SocialStream
|
|
303
380
|
end
|
304
381
|
|
305
382
|
|
383
|
+
#Authorization methods
|
384
|
+
def authorization(params)
|
385
|
+
case SocialStream::Presence.secure_rest_api
|
386
|
+
when true
|
387
|
+
#Authorization using asymmetric RSA keys
|
388
|
+
begin
|
389
|
+
presence_root = File.expand_path("../../../../", __FILE__)
|
390
|
+
xmpp_public_key_path = presence_root + "/rsa_keys/xmpp_rsa_key_public.pem";
|
391
|
+
xmpp_public_key = OpenSSL::PKey::RSA.new(File.read(xmpp_public_key_path))
|
392
|
+
|
393
|
+
stamp = xmpp_public_key.public_decrypt( params[:password] )
|
394
|
+
|
395
|
+
#stamp = password#####timestamp#####hash
|
396
|
+
stampParams=stamp.split("#####")
|
397
|
+
password = stampParams[0]
|
398
|
+
timestamp = stampParams[1]
|
399
|
+
hash = stampParams[2]
|
400
|
+
|
401
|
+
myHash = calculateHash(params)
|
402
|
+
|
403
|
+
#Evaluating Hash
|
404
|
+
if (myHash != hash)
|
405
|
+
#Hash not valid
|
406
|
+
return false
|
407
|
+
end
|
408
|
+
|
409
|
+
#Evaluating Timestamp
|
410
|
+
if ((Time.now.utc - Time.parse(timestamp).utc).to_int > (10*60))
|
411
|
+
#Timestamp not valid
|
412
|
+
return false
|
413
|
+
end
|
414
|
+
|
415
|
+
#Evaluating Password
|
416
|
+
return ( password == SocialStream::Presence.xmpp_server_password )
|
417
|
+
rescue
|
418
|
+
return false
|
419
|
+
end
|
420
|
+
else
|
421
|
+
#Basic authorization
|
422
|
+
return ( params[:password] and params[:password] == SocialStream::Presence.xmpp_server_password )
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
|
427
|
+
def calculateHash(params)
|
428
|
+
if params
|
429
|
+
params.delete("password")
|
430
|
+
params.delete("controller")
|
431
|
+
params.delete("action")
|
432
|
+
else
|
433
|
+
params = {};
|
434
|
+
end
|
435
|
+
|
436
|
+
hash = "";
|
437
|
+
params.each do |key,value|
|
438
|
+
hash = hash + key.to_s + value.to_s
|
439
|
+
end
|
440
|
+
return Digest::MD5.hexdigest(hash)
|
441
|
+
end
|
442
|
+
|
443
|
+
|
444
|
+
def decryptParams(params)
|
445
|
+
case SocialStream::Presence.secure_rest_api
|
446
|
+
when true
|
447
|
+
#Secure Mode
|
448
|
+
begin
|
449
|
+
if params[:encrypted_params]
|
450
|
+
presence_root = File.expand_path("../../../../", __FILE__)
|
451
|
+
web_private_key_path = presence_root + "/rsa_keys/web_rsa_key_private.pem";
|
452
|
+
private_key = OpenSSL::PKey::RSA.new(File.read(web_private_key_path))
|
453
|
+
|
454
|
+
clear_params_hash_string = private_key.private_decrypt( params[:encrypted_params] )
|
455
|
+
clear_params = getHashFromHashString(clear_params_hash_string)
|
456
|
+
params.delete("encrypted_params")
|
457
|
+
|
458
|
+
clear_params.each do |key,value|
|
459
|
+
params[key] = value
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
return params
|
464
|
+
rescue
|
465
|
+
return "Error in function: decryptParam(param)"
|
466
|
+
end
|
467
|
+
|
468
|
+
else
|
469
|
+
#Non Secure Mode
|
470
|
+
return params
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
306
474
|
|
307
475
|
#Help methods
|
308
476
|
|
@@ -316,6 +484,16 @@ module SocialStream
|
|
316
484
|
#Hide passwords on sudo commands: command pattern = "echo password | sudo -S order"
|
317
485
|
return command.gsub(/echo ([aA-zZ]+) [|] sudo -S [.]*/,"echo ****** | sudo -S \\2")
|
318
486
|
end
|
487
|
+
|
488
|
+
def getHashFromHashString(hashString)
|
489
|
+
hash={}
|
490
|
+
hashString[1..-2].split(/, /).each {|entry|
|
491
|
+
entryMap=entry.split(/=>/);
|
492
|
+
value_str = entryMap[1];
|
493
|
+
hash[entryMap[0].strip[1..-1].to_sym] = value_str.nil? ? "" : value_str.strip[1..-2]
|
494
|
+
}
|
495
|
+
return hash
|
496
|
+
end
|
319
497
|
|
320
498
|
#Xmpp client manage methods
|
321
499
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
namespace :presence do
|
2
2
|
desc 'Copy ejabberd files to the xmpp server and write configuration files'
|
3
|
-
task :install => [ 'presence:install:copy_xmpp_server_files', 'presence:install_xmpp_server' , 'presence:autoconfigure_xmpp_server' ]
|
3
|
+
task :install => [ 'presence:install:copy_xmpp_server_files', 'presence:install_xmpp_server' , 'presence:autoconfigure_xmpp_server' , 'presence:generate_RSA_keys' ]
|
4
4
|
|
5
5
|
namespace :install do
|
6
6
|
|
@@ -15,7 +15,7 @@ namespace :presence do
|
|
15
15
|
#Cleaning dpath
|
16
16
|
SocialStream::Presence::XmppServerOrder::executeCommands(["rm -r " + dpath,"mkdir -p " + dpath])
|
17
17
|
#Copy folders
|
18
|
-
SocialStream::Presence::XmppServerOrder::
|
18
|
+
SocialStream::Presence::XmppServerOrder::copyFolderToXmppServer(opath,dpath)
|
19
19
|
|
20
20
|
puts "Social Stream Ejabberd files copied to " + dpath + " in Xmpp Server"
|
21
21
|
puts "Copy_xmpp_server_files: Task complete"
|
@@ -63,9 +63,12 @@ namespace :presence do
|
|
63
63
|
commands << "echo " + password + " | sudo -S " + SocialStream::Presence.scripts_path + "/sstream_ejabberd_files/installer.sh \"ejabberd_module_path=" + SocialStream::Presence.ejabberd_module_path + "\" \"scripts_path=" + SocialStream::Presence.scripts_path + "\" \"" + options + "\""
|
64
64
|
|
65
65
|
#Execution order
|
66
|
-
output = SocialStream::Presence::XmppServerOrder::executeCommands(commands)
|
67
|
-
|
66
|
+
output = SocialStream::Presence::XmppServerOrder::executeCommands(commands)
|
68
67
|
puts output
|
68
|
+
|
69
|
+
#Generate RSA Keys
|
70
|
+
Rake::Task["presence:install:generate_RSA_keys"].execute
|
71
|
+
|
69
72
|
puts "Installation complete"
|
70
73
|
end
|
71
74
|
|
@@ -96,5 +99,36 @@ namespace :presence do
|
|
96
99
|
puts "Autoconfigure complete"
|
97
100
|
end
|
98
101
|
|
102
|
+
|
103
|
+
desc "Generate and distribute RSA Keys"
|
104
|
+
task :generate_RSA_keys => :environment do
|
105
|
+
puts "Starting presence:generate_RSA_keys"
|
106
|
+
|
107
|
+
presence_root = File.expand_path("../../../../", __FILE__)
|
108
|
+
webKeysPath = presence_root + "/rsa_keys";
|
109
|
+
xmppKeysPath = SocialStream::Presence.scripts_path + "/rsa_keys";
|
110
|
+
|
111
|
+
puts "Cleaning previous keys"
|
112
|
+
#Cleaning Keys path
|
113
|
+
SocialStream::Presence::XmppServerOrder::executeLocalCommand("rm -r " + webKeysPath)
|
114
|
+
SocialStream::Presence::XmppServerOrder::executeLocalCommand("mkdir -p " + webKeysPath)
|
115
|
+
SocialStream::Presence::XmppServerOrder::executeCommands(["rm -r " + xmppKeysPath,"mkdir -p " + xmppKeysPath])
|
116
|
+
|
117
|
+
puts "Generating new keys"
|
118
|
+
#Generating RSA Keys
|
119
|
+
SocialStream::Presence::XmppServerOrder::generateRSAKeys(webKeysPath)
|
120
|
+
|
121
|
+
puts "Copy keys to the Xmpp Server"
|
122
|
+
#Copy Xmpp Keys to the Xmpp Server
|
123
|
+
SocialStream::Presence::XmppServerOrder::copyFolderToXmppServer(webKeysPath,xmppKeysPath)
|
124
|
+
|
125
|
+
#Remove not own private keys
|
126
|
+
puts "Removing not own private keys"
|
127
|
+
SocialStream::Presence::XmppServerOrder::executeLocalCommand("rm -r " + webKeysPath + "/xmpp_rsa_key_private.pem")
|
128
|
+
SocialStream::Presence::XmppServerOrder::executeCommands(["rm -r " + xmppKeysPath + "/web_rsa_key_private.pem"])
|
129
|
+
|
130
|
+
puts "Generate_RSA_keys: Task complete"
|
131
|
+
end
|
132
|
+
|
99
133
|
end
|
100
134
|
end
|