webappsword_sdk 0.0.1
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/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/README.md +67 -0
- data/Rakefile +20 -0
- data/VERSION +1 -0
- data/bin/webappsword_sdk +85 -0
- data/easy_installer-0.0.1.gem +0 -0
- data/example/Rakefile +72 -0
- data/example/additional/after_install.rb +1 -0
- data/example/additional/return_callback.rb +2 -0
- data/example/arch.zip +0 -0
- data/example/config.yml +6 -0
- data/example/files/joomla/index.php +54 -0
- data/example/installers/global.rb +2 -0
- data/example/installers/local.rb +2 -0
- data/example/validators/ftp.rb +6 -0
- data/example/validators/local.rb +0 -0
- data/lib/easy_installer.rb +4 -0
- data/lib/easy_installer/autoload.rb +28 -0
- data/lib/easy_installer/coffeescript_sandbox.rb +95 -0
- data/lib/easy_installer/config.rb +138 -0
- data/lib/easy_installer/config_validator.rb +73 -0
- data/lib/easy_installer/fake/ftp/install_helper.rb +34 -0
- data/lib/easy_installer/fake/ftp/validate_helper.rb +12 -0
- data/lib/easy_installer/fake/local/install_helper.rb +30 -0
- data/lib/easy_installer/fake/local/standart_input.yml +2 -0
- data/lib/easy_installer/fake/local/validate_helper.rb +6 -0
- data/lib/easy_installer/fake/php/validate_helper.rb +12 -0
- data/lib/easy_installer/fake/validator.rb +0 -0
- data/lib/easy_installer/fake/zip.rb +9 -0
- data/lib/easy_installer/generators/base.rb +25 -0
- data/lib/easy_installer/generators/config.rb +58 -0
- data/lib/easy_installer/install.rb +56 -0
- data/lib/easy_installer/install_helpers/result.rb +14 -0
- data/lib/easy_installer/install_helpers/template.rb +19 -0
- data/lib/easy_installer/install_helpers/zip.rb +9 -0
- data/lib/easy_installer/methods/ftp/install_helper.rb +105 -0
- data/lib/easy_installer/methods/ftp/standart_input.yml +5 -0
- data/lib/easy_installer/methods/ftp/standart_input.yml~ +5 -0
- data/lib/easy_installer/methods/ftp/validate_helper.rb +24 -0
- data/lib/easy_installer/methods/local/install_helper.rb +37 -0
- data/lib/easy_installer/methods/local/standart_input.yml +2 -0
- data/lib/easy_installer/methods/local/validate_helper.rb +4 -0
- data/lib/easy_installer/methods/sample/install_helper.rb +67 -0
- data/lib/easy_installer/methods/sample/standart_input.yml +5 -0
- data/lib/easy_installer/methods/sample/standart_input.yml~ +5 -0
- data/lib/easy_installer/methods/sample/validate_helper.rb +17 -0
- data/lib/easy_installer/modules/php/standart_input.yml +6 -0
- data/lib/easy_installer/modules/php/validate_helper.rb +47 -0
- data/lib/easy_installer/sandbox.rb +100 -0
- data/lib/easy_installer/sandbox_modules/message.rb +62 -0
- data/lib/easy_installer/steps.rb +36 -0
- data/lib/easy_installer/temp.rb +23 -0
- data/lib/easy_installer/translate.rb +70 -0
- data/lib/easy_installer/validator.rb +99 -0
- data/lib/easy_installer/validator_support_methods.rb +37 -0
- data/tests/files/additional/after_install.rb +1 -0
- data/tests/files/config.yml +10 -0
- data/tests/files/installers/global.rb +1 -0
- data/tests/files/installers/local.rb +1 -0
- data/tests/files/sample.zip +0 -0
- data/tests/files/template.erb +1 -0
- data/tests/files/translations/pl.yml +11 -0
- data/tests/files/validators/ftp.rb +3 -0
- data/tests/files/validators/local.rb +0 -0
- data/tests/files/validators/sample.rb +2 -0
- data/tests/test_config.rb +30 -0
- data/tests/test_config_validator.rb +22 -0
- data/tests/test_ftp.rb +51 -0
- data/tests/test_install.rb +19 -0
- data/tests/test_sandbox.rb +48 -0
- data/tests/test_sandbox_messages.rb +18 -0
- data/tests/test_steps.rb +19 -0
- data/tests/test_temp.rb +14 -0
- data/tests/test_template.rb +17 -0
- data/tests/test_validator.rb +31 -0
- data/tests/test_zip.rb +26 -0
- data/tests/wrong_config/config.yml +6 -0
- data/tests/wrong_config/install/global.rb +2 -0
- data/tests/wrong_config/install/local.rb +1 -0
- data/tests/wrong_config/translations/pl.yml +11 -0
- data/tests/wrong_config/validators/ftp.rb +4 -0
- data/tests/wrong_config/validators/local.rb +0 -0
- data/tests/wrong_config/validators/sample.rb +3 -0
- data/tests/~test_translator.rb +17 -0
- data/webappsword_sdk.gemspec +24 -0
- metadata +149 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'erb'
|
2
|
+
module EasyInstaller
|
3
|
+
module InstallHelper
|
4
|
+
module Template
|
5
|
+
def define_template( filename )
|
6
|
+
@_templates = [] unless @_templates
|
7
|
+
@_templates << {
|
8
|
+
:filename => filename,
|
9
|
+
:erb => ERB.new(File.read(filename))}
|
10
|
+
end
|
11
|
+
|
12
|
+
def save_templates
|
13
|
+
@_templates.each{|template|
|
14
|
+
File.open(template[:filename],"w"){|f|
|
15
|
+
f.write(template[:erb].result(binding))}}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'net/ftp'
|
2
|
+
module EasyInstaller
|
3
|
+
module InstallHelper
|
4
|
+
def setup params = {}
|
5
|
+
host = params["ftp_host"]
|
6
|
+
username = params["ftp_username"]
|
7
|
+
password = params["ftp_password"]
|
8
|
+
|
9
|
+
@ftp = Net::FTP.new(host)
|
10
|
+
@ftp.login(username, password)
|
11
|
+
end
|
12
|
+
# copy local directory to remote can be used to push data to server
|
13
|
+
# e.g. move_directory("joomla_installer", @inputs["path"])
|
14
|
+
# * *Args* :
|
15
|
+
# - +local_directory+ -> path to local directory
|
16
|
+
# - +remote_directory+ -> path where put directory
|
17
|
+
# * *Returns* :
|
18
|
+
# - true
|
19
|
+
def move_directory(local_directory,remote_directory)
|
20
|
+
begin
|
21
|
+
puts remote_directory
|
22
|
+
@ftp.mkdir(remote_directory)
|
23
|
+
rescue
|
24
|
+
puts "can't create directory"
|
25
|
+
end
|
26
|
+
Dir.entries(local_directory).each do |element|
|
27
|
+
if element == "." || element == ".."
|
28
|
+
next
|
29
|
+
end
|
30
|
+
if File.directory?(local_directory+"/"+element)
|
31
|
+
move_directory(local_directory+"/"+element, remote_directory+"/"+element)
|
32
|
+
else
|
33
|
+
puts "binary put "
|
34
|
+
puts local_directory+"/"+element
|
35
|
+
@ftp.putbinaryfile(local_directory+"/"+element, remote_directory+"/"+element)
|
36
|
+
puts "send"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
# create directory on remote server and sets permissions
|
42
|
+
# e.g. create_directory("tmp", 664)
|
43
|
+
# * *Args* :
|
44
|
+
# - +dirpath+ -> path to dir
|
45
|
+
# - +chmod+ -> 3 digits of chmod
|
46
|
+
# * *Returns* :
|
47
|
+
# - true
|
48
|
+
def create_directory(dirpath, chmod=664)
|
49
|
+
dir = dirpath.split '/'
|
50
|
+
dir.each_index do |index|
|
51
|
+
begin
|
52
|
+
@ftp.mkdir(dir[0..index].join '/')
|
53
|
+
# @ftp.sendcmd("SITE CHMOD 0#{chmod} #{dir[0..index].join '/'}")
|
54
|
+
puts "SITE CHMOD 0#{chmod} #{dir[0..index].join '/'}"
|
55
|
+
rescue
|
56
|
+
# @ftp.sendcmd("SITE CHMOD 0#{chmod} #{dir[0..index].join '/'}")
|
57
|
+
puts "Can't create #{dir[0..index].join '/'}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# delete directory from remote server
|
63
|
+
# * *Args* :
|
64
|
+
# - +dirpath+ -> path to dir
|
65
|
+
# * *Returns* :
|
66
|
+
# - true
|
67
|
+
def remove_directory(dirpath)
|
68
|
+
@ftp.rmdir(dirpath)
|
69
|
+
end
|
70
|
+
# copy from local to remote and set premissions
|
71
|
+
# * *Args* :
|
72
|
+
# - +local_file+ -> path to local file
|
73
|
+
# - +remote_file+ -> path where put file
|
74
|
+
# - +chmod+ -> 3 digits of chmod
|
75
|
+
# * *Returns* :
|
76
|
+
# - true
|
77
|
+
def move_file(local_file,remote_file, chmod=664)
|
78
|
+
create_directory(File.dirname(remote_file), chmod)
|
79
|
+
@ftp.putbinaryfile(local_file, remote_file)
|
80
|
+
@ftp.sendcmd("SITE CHMOD 0#{chmod} #{remote_file}")
|
81
|
+
end
|
82
|
+
# sets premissions on remote folder
|
83
|
+
# * *Args* :
|
84
|
+
# - +remote_file+ -> path to file
|
85
|
+
# - +chmod+ -> 3 digits of chmod
|
86
|
+
# * *Returns* :
|
87
|
+
# - true
|
88
|
+
def chmod(remote_file, chmod)
|
89
|
+
@ftp.sendcmd("SITE CHMOD 0#{chmod} #{remote_file}")
|
90
|
+
end
|
91
|
+
#sets premissions to folder and sub-folders
|
92
|
+
# * *Args* :
|
93
|
+
# - +remote_file+ -> path to file
|
94
|
+
# - +chmod+ -> 3 digits of chmod
|
95
|
+
# * *Returns* :
|
96
|
+
# - true
|
97
|
+
def chmod_r(remote_dir, chmod)
|
98
|
+
@ftp.sendcmd("SITE CHMOD 0#{chmod} #{remote_dir}")
|
99
|
+
@ftp.list(remote_dir).each do |element|
|
100
|
+
chmod_r(File.joint(remote_dir, element))
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'easy_installer/methods/ftp/install_helper'
|
2
|
+
module EasyInstaller
|
3
|
+
module MethodValidateHelper
|
4
|
+
include InstallHelper
|
5
|
+
# copy local directory to remote can be used to push data to server
|
6
|
+
# e.g. move_directory("joomla_installer", @inputs["path"])
|
7
|
+
# * *Args* :
|
8
|
+
# - +params+ -> hash with data to connect {"ftp_host"=>"", "ftp_username"=> "", "ftp_password"=>""} @inputs
|
9
|
+
# * *Returns* :
|
10
|
+
# - true -> if connecting
|
11
|
+
# - false -> if fails
|
12
|
+
def check_connection params = {}
|
13
|
+
host = params["ftp_host"]
|
14
|
+
username = params["ftp_username"]
|
15
|
+
password = params["ftp_password"]
|
16
|
+
begin
|
17
|
+
setup "ftp_host"=>host, "ftp_username"=>username, "ftp_password"=>password
|
18
|
+
true
|
19
|
+
rescue
|
20
|
+
false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
module EasyInstaller
|
3
|
+
module InstallHelper
|
4
|
+
def setup(params)
|
5
|
+
end
|
6
|
+
|
7
|
+
def move_directory(from_directory, to_directory)
|
8
|
+
FileUtils::mkdir_p(to_directory)
|
9
|
+
FileUtils::rm_rf(to_directory)
|
10
|
+
FileUtils::mv(from_directory, to_directory)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_directory(dirpath,chmod=664)
|
14
|
+
FileUtils::mkdir_p(to_directory)
|
15
|
+
FileUtils::chmod(chmod, dirpath)
|
16
|
+
end
|
17
|
+
|
18
|
+
def move_file(local_file,remote_file, chmod=664)
|
19
|
+
FileUtils::mv(local_file, remote_file)
|
20
|
+
FileUtils::chmod(chmod, remote_file)
|
21
|
+
end
|
22
|
+
|
23
|
+
def delete_directory(dirpath)
|
24
|
+
FileUtils::rm_rf(dirpath)
|
25
|
+
end
|
26
|
+
|
27
|
+
def chmod(remote_file, chmod)
|
28
|
+
FileUtils::chmod(chmod, remote_file)
|
29
|
+
end
|
30
|
+
|
31
|
+
def chmod_r(remote_dir, chmod)
|
32
|
+
FileUtils::chmod_R(chmod, remote_dir)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'net/ftp'
|
2
|
+
module EasyInstaller
|
3
|
+
module InstallHelper
|
4
|
+
def setup params = {}
|
5
|
+
host = params[:host] || $user_input["ftp_host"].value
|
6
|
+
username = params[:username] || $user_input["ftp_username"].value
|
7
|
+
password = params[:password] || $user_input["ftp_password"].value
|
8
|
+
@ftp = Net::FTP.new(host)
|
9
|
+
@ftp.login(username, password)
|
10
|
+
end
|
11
|
+
|
12
|
+
def move_directory(local_directory,remote_directory)
|
13
|
+
begin
|
14
|
+
puts remote_directory
|
15
|
+
@ftp.mkdir(remote_directory)
|
16
|
+
rescue
|
17
|
+
puts "can't create directory"
|
18
|
+
end
|
19
|
+
Dir.entries(local_directory).each do |element|
|
20
|
+
if element == "." || element == ".."
|
21
|
+
next
|
22
|
+
end
|
23
|
+
if File.directory?(local_directory+"/"+element)
|
24
|
+
move_directory(local_directory+"/"+element, remote_directory+"/"+element)
|
25
|
+
else
|
26
|
+
puts "binary put "
|
27
|
+
puts local_directory+"/"+element
|
28
|
+
@ftp.putbinaryfile(local_directory+"/"+element, remote_directory+"/"+element)
|
29
|
+
puts "send"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_directory(dirpath, chmod=664)
|
36
|
+
dir = dirpath.split '/'
|
37
|
+
dir.each_index do |index|
|
38
|
+
begin
|
39
|
+
@ftp.mkdir(dir[0..index].join '/')
|
40
|
+
# @ftp.sendcmd("SITE CHMOD 0#{chmod} #{dir[0..index].join '/'}")
|
41
|
+
puts "SITE CHMOD 0#{chmod} #{dir[0..index].join '/'}"
|
42
|
+
rescue
|
43
|
+
# @ftp.sendcmd("SITE CHMOD 0#{chmod} #{dir[0..index].join '/'}")
|
44
|
+
puts "Can't create #{dir[0..index].join '/'}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def move_file(local_file,remote_file, chmod=664)
|
50
|
+
create_directory(File.dirname(remote_file), chmod)
|
51
|
+
@ftp.putbinaryfile(local_file, remote_file)
|
52
|
+
@ftp.sendcmd("SITE CHMOD 0#{chmod} #{remote_file}")
|
53
|
+
end
|
54
|
+
|
55
|
+
def chmod(remote_file, chmod)
|
56
|
+
@ftp.sendcmd("SITE CHMOD 0#{chmod} #{remote_file}")
|
57
|
+
end
|
58
|
+
#need to test
|
59
|
+
def chmod_r(remote_dir, chmod)
|
60
|
+
@ftp.sendcmd("SITE CHMOD 0#{chmod} #{remote_dir}")
|
61
|
+
@ftp.list(remote_dir).each do |element|
|
62
|
+
chmod_r(File.joint(remote_dir, element))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'easy_installer/methods/ftp/install_helper'
|
2
|
+
module EasyInstaller
|
3
|
+
module MethodValidateHelper
|
4
|
+
include InstallHelper
|
5
|
+
def check_connection params = {}
|
6
|
+
host = params[:host] || $user_input["ftp_host"].value
|
7
|
+
username = params[:username] || $user_input["ftp_username"].value
|
8
|
+
password = params[:password] || $user_input["ftp_password"].value
|
9
|
+
begin
|
10
|
+
setup :ftp_host=>host, :ftp_username=>username, :ftp_password=>password
|
11
|
+
true
|
12
|
+
rescue
|
13
|
+
false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'erb'
|
2
|
+
module EasyInstaller
|
3
|
+
module ModuleValidateHelper
|
4
|
+
def php?
|
5
|
+
file = File.new("phptest.php", "w")
|
6
|
+
file.write("<? echo 'OK' ?>")
|
7
|
+
file.close
|
8
|
+
begin
|
9
|
+
move_file(file.path, $user_input['path'].value+'/'+"phptest.php",777)
|
10
|
+
ValidatorSupportMethods.assert_http_body($user_input['http_address'].value+"/phptest.php","OK","no_php")
|
11
|
+
File.delete(file.path)
|
12
|
+
true
|
13
|
+
rescue
|
14
|
+
File.delete(file.path)
|
15
|
+
false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def mysql?
|
20
|
+
mysql_host = $user_input['mysql_host'].value
|
21
|
+
mysql_username = $user_input['mysql_username'].value
|
22
|
+
mysql_password = $user_input['mysql_password'].value
|
23
|
+
mysql_database = $user_input['mysql_database'].value
|
24
|
+
template = ERB.new <<-EOF
|
25
|
+
<?
|
26
|
+
$link = mysql_connect('<%= mysql_host %>', '<%= mysql_username %>', '<%= mysql_password %>')
|
27
|
+
or die('Could not connect: ' . mysql_error());
|
28
|
+
echo 'Connected successfully';
|
29
|
+
mysql_select_db('<%= mysql_database %>') or die('Could not select database');
|
30
|
+
print("OK");
|
31
|
+
?>
|
32
|
+
EOF
|
33
|
+
file = File.new("mysql.php", "w")
|
34
|
+
file.write(template.result binding)
|
35
|
+
file.close
|
36
|
+
begin
|
37
|
+
move_file(file.path, $user_input['path'].value+'/'+"mysql.php",777)
|
38
|
+
ValidatorSupportMethods.assert_http_body($user_input['http_address'].value+"/mysql.php","OK","no_mysql")
|
39
|
+
File.delete(file.path)
|
40
|
+
true
|
41
|
+
rescue
|
42
|
+
File.delete(file.path)
|
43
|
+
true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'coffee-script'
|
2
|
+
require 'v8'
|
3
|
+
module EasyInstaller
|
4
|
+
class Sandbox
|
5
|
+
class Runner
|
6
|
+
attr_accessor :inputs
|
7
|
+
end
|
8
|
+
attr_accessor :modules
|
9
|
+
attr_accessor :helpers
|
10
|
+
attr_accessor :inputs
|
11
|
+
attr_accessor :errors
|
12
|
+
|
13
|
+
def initialize(code, params = {})
|
14
|
+
@code = code
|
15
|
+
@helpers = []
|
16
|
+
@inputs = {}
|
17
|
+
@modules = []
|
18
|
+
@params = {
|
19
|
+
:coffee_script => true
|
20
|
+
}
|
21
|
+
@params.merge!(params)
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_module(mod)
|
25
|
+
@modules << mod
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_helper(helper)
|
29
|
+
@helpers << helper
|
30
|
+
end
|
31
|
+
|
32
|
+
def eval
|
33
|
+
run = Runner.new
|
34
|
+
run.inputs = @inputs
|
35
|
+
#include modules
|
36
|
+
@modules.each do |mod|
|
37
|
+
extend mod::EvalInstanceMethods
|
38
|
+
@code = "#{mod.beforecode}
|
39
|
+
#{@code}
|
40
|
+
#{mod.aftercode}"
|
41
|
+
run.extend(mod::IncludedCode)
|
42
|
+
end
|
43
|
+
#include return code
|
44
|
+
@code = "result = []
|
45
|
+
#{@code}
|
46
|
+
return result"
|
47
|
+
#include helpers
|
48
|
+
@helpers.each do |single_module|
|
49
|
+
run.extend single_module
|
50
|
+
end
|
51
|
+
#compile to coffeescript
|
52
|
+
@code = CoffeeScript.compile @code if @params[:coffee_script] == true
|
53
|
+
#eval code
|
54
|
+
V8::Context.new(:with => run) do |cxt|
|
55
|
+
@returned = cxt.eval(@code)
|
56
|
+
end
|
57
|
+
return true
|
58
|
+
end
|
59
|
+
|
60
|
+
def returned
|
61
|
+
unless @returned
|
62
|
+
raise "First eval Code"
|
63
|
+
end
|
64
|
+
@returned_packed = Result.new(@returned, @modules)
|
65
|
+
@returned_packed
|
66
|
+
end
|
67
|
+
|
68
|
+
def success?
|
69
|
+
@success
|
70
|
+
end
|
71
|
+
def returned_raw
|
72
|
+
unless @returned
|
73
|
+
raise "First eval Code"
|
74
|
+
end
|
75
|
+
@returned
|
76
|
+
end
|
77
|
+
|
78
|
+
class Result
|
79
|
+
def initialize(raw_result, modules)
|
80
|
+
@data = {}
|
81
|
+
@raw_result = raw_result
|
82
|
+
modules.each do |single_module|
|
83
|
+
@raw_result.each do |result|
|
84
|
+
data = single_module.result_analize(result)
|
85
|
+
unless data == false
|
86
|
+
@data[single_module.name] = [] unless @data[single_module.name]
|
87
|
+
@data[single_module.name] << data
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def method_missing(method_name, *args)
|
94
|
+
@data[method_name.to_s] ||= []
|
95
|
+
@data[method_name.to_s]
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|