webappsword_sdk 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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,62 @@
|
|
1
|
+
module EasyInstaller
|
2
|
+
class Sandbox
|
3
|
+
module Message
|
4
|
+
def self.beforecode
|
5
|
+
"add_message = (type, message) ->
|
6
|
+
result.push {type: 'message', class: type, message: message}
|
7
|
+
|
8
|
+
redirect_to = (site) ->
|
9
|
+
result.push {type: 'message', class: 'redirect_to', message: site}
|
10
|
+
"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.aftercode
|
14
|
+
""
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.result_analize(raw_result)
|
18
|
+
if raw_result["type"] == "message"
|
19
|
+
return Result::Message.new(raw_result)
|
20
|
+
elsif raw_result["type"] == "action"
|
21
|
+
return Result::Action.new(raw_result)
|
22
|
+
else
|
23
|
+
return false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.name
|
28
|
+
"messages"
|
29
|
+
end
|
30
|
+
module IncludedCode
|
31
|
+
end
|
32
|
+
|
33
|
+
module EvalInstanceMethods
|
34
|
+
def messages
|
35
|
+
@returned
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module Result
|
40
|
+
class Message
|
41
|
+
def initialize(raw_message)
|
42
|
+
@message = raw_message
|
43
|
+
end
|
44
|
+
def to_s
|
45
|
+
@message[:message].to_s
|
46
|
+
end
|
47
|
+
def raw
|
48
|
+
@message[:message]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
class Action
|
52
|
+
def initialize(raw_message)
|
53
|
+
@action = raw_message
|
54
|
+
end
|
55
|
+
def to_s
|
56
|
+
@action[:site].to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module EasyInstaller
|
2
|
+
class Steps
|
3
|
+
def initialize(config, method)
|
4
|
+
@config = config
|
5
|
+
@method = method
|
6
|
+
@config.method = method
|
7
|
+
end
|
8
|
+
# First step which validates inputs data from user. In case of error it returns false and sets inputs_errors.
|
9
|
+
# inputs_errors is hash which looks like:
|
10
|
+
# {
|
11
|
+
# "input_name" => "error"
|
12
|
+
# }
|
13
|
+
def validate(inputs)
|
14
|
+
validator = EasyInstaller::Validator.new(@config)
|
15
|
+
validator.import_from_config_by_method(@method)
|
16
|
+
raise validator.inputs_errors unless validator.check(inputs)
|
17
|
+
end
|
18
|
+
|
19
|
+
# This is second step it evals install code with support of helper methods
|
20
|
+
def install(inputs)
|
21
|
+
install = EasyInstaller::Installer.new(@config)
|
22
|
+
install.install(@config.install_code(@method), inputs)
|
23
|
+
end
|
24
|
+
# Third step which evals code after successfull instalation
|
25
|
+
def after_install
|
26
|
+
install = EasyInstaller::Installer.new(@config)
|
27
|
+
install.install(@config.after_install_code)
|
28
|
+
end
|
29
|
+
# Last step which is evaled by redirecting user back to page for example to remove install directory on server
|
30
|
+
def return_callback(inputs)
|
31
|
+
install = EasyInstaller::Installer.new(@config)
|
32
|
+
install.install(@config.return_callback_code, inputs)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'fileutils'
|
3
|
+
module EasyInstaller
|
4
|
+
class Temp
|
5
|
+
def initialize
|
6
|
+
@tempdir = File.join(Dir.tmpdir, "easyinstaller#{rand(1..10000)}")
|
7
|
+
FileUtils.mkdir_p(tempdir)
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy_to_tempdir(dir)
|
12
|
+
FileUtils.cp_r(dir, @tempdir)
|
13
|
+
end
|
14
|
+
|
15
|
+
def clear
|
16
|
+
FileUtils.rm_rf(@tempdir)
|
17
|
+
end
|
18
|
+
|
19
|
+
def tempdir
|
20
|
+
@tempdir
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
# Class used to translate GUI
|
3
|
+
module EasyInstaller
|
4
|
+
class Translate
|
5
|
+
# Lets you specific path to language pack
|
6
|
+
class << self
|
7
|
+
attr_accessor :translation_file_path
|
8
|
+
end
|
9
|
+
# Sets location
|
10
|
+
# ==== Attributes
|
11
|
+
# * +location+ - String: 2 char representation of location
|
12
|
+
# ==== Example
|
13
|
+
# set_location("pl")
|
14
|
+
def self.set_location(location)
|
15
|
+
@@location = location.to_s
|
16
|
+
path = String.new
|
17
|
+
unless translation_file_path
|
18
|
+
path = File.join("translations", @@location+".yml")
|
19
|
+
else
|
20
|
+
path = File.join(translation_file_path, @@location+".yml")
|
21
|
+
end
|
22
|
+
@@translator = YAML::load(File::open(path))
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns translated input
|
26
|
+
# ==== Attributes
|
27
|
+
# * +name+ - String: name of input
|
28
|
+
# * +type+ - String or Symbol: Type of value
|
29
|
+
# ====Example
|
30
|
+
# input("path", :name)
|
31
|
+
# input("path", :description)
|
32
|
+
def self.input(name, type)
|
33
|
+
begin
|
34
|
+
@@translator["input"][name.to_s][type.to_s]
|
35
|
+
rescue
|
36
|
+
name
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns translated method
|
41
|
+
# ==== Attributes
|
42
|
+
# * +name+ - String: name of input
|
43
|
+
# * +type+ - String or Symbol: Type of value
|
44
|
+
# ====Example
|
45
|
+
# method("ftp", :title)
|
46
|
+
# method("local", :description)
|
47
|
+
def self.method(name, type)
|
48
|
+
begin
|
49
|
+
@@translator["method"][name.to_s][type.to_s]
|
50
|
+
rescue
|
51
|
+
name
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns translated info about application
|
56
|
+
# ==== Attributes
|
57
|
+
# * +type+ - String or Symbol: value
|
58
|
+
# ====Example
|
59
|
+
# app(:info1)
|
60
|
+
# app("info2")
|
61
|
+
def self.app(type)
|
62
|
+
begin
|
63
|
+
@@translator["app"][type.to_s]
|
64
|
+
rescue
|
65
|
+
type.to_S
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'yaml'
|
4
|
+
# class which includes all necessary helpers for validator code
|
5
|
+
module EasyInstaller
|
6
|
+
|
7
|
+
module ValidatorHelper #:nodoc:
|
8
|
+
attr_accessor :validator
|
9
|
+
module IncludedCode
|
10
|
+
end
|
11
|
+
module EvalInstanceMethods
|
12
|
+
|
13
|
+
end
|
14
|
+
def self.beforecode
|
15
|
+
"check = (params, code) ->
|
16
|
+
@code = code
|
17
|
+
@input = params['for']
|
18
|
+
@input_ready = params['then'] || input
|
19
|
+
result.push {
|
20
|
+
code: @code
|
21
|
+
input: @input
|
22
|
+
input_ready: @input_ready
|
23
|
+
}
|
24
|
+
"
|
25
|
+
end
|
26
|
+
def self.aftercode
|
27
|
+
""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
# Singleton Class which handles input validation
|
31
|
+
class Validator
|
32
|
+
attr_accessor :inputs_errors
|
33
|
+
def initialize(config)
|
34
|
+
@config = config
|
35
|
+
end
|
36
|
+
|
37
|
+
# Automaticaly imports validation function from config by method
|
38
|
+
# ==== Attributes
|
39
|
+
# * +method+ - String : name of method
|
40
|
+
def import_from_config_by_method(method)
|
41
|
+
@method = method
|
42
|
+
sandbox = Sandbox.new @config.validating_code(method)
|
43
|
+
sandbox.modules << ValidatorHelper
|
44
|
+
sandbox.eval
|
45
|
+
@checking_functions = sandbox.returned_raw
|
46
|
+
end
|
47
|
+
|
48
|
+
# Manualy add validating function to class
|
49
|
+
# ==== Attributes
|
50
|
+
# * +input+ - Array of String : list of input names which will be validated by function
|
51
|
+
# * +input_ready+ - Array of String: list of input names which have to be ready to run function
|
52
|
+
# * +&block+ - Block of code : validating code
|
53
|
+
# ==== Example
|
54
|
+
# add_validating_function(['path'],['path','host']) do
|
55
|
+
# #some code
|
56
|
+
# true
|
57
|
+
# end
|
58
|
+
def add_validating_function(input, input_ready, code)
|
59
|
+
@checking_functions = Array.new unless @checking_functions
|
60
|
+
@checking_functions << {:input => input, :input_ready=>input_ready, :code => code }
|
61
|
+
end
|
62
|
+
|
63
|
+
# Eval each validating functions and returns validated user_input
|
64
|
+
def check(inputs)
|
65
|
+
lang = @config["lang"]
|
66
|
+
require "easy_installer/modules/#{lang}/validate_helper"
|
67
|
+
require "easy_installer/methods/#{@method}/install_helper" if @method
|
68
|
+
require "easy_installer/methods/#{@method}/validate_helper" if @method
|
69
|
+
# runner = ValidatorRunner.new
|
70
|
+
# runner.inputs = inputs
|
71
|
+
# runner.extend(ModuleValidateHelper)
|
72
|
+
# runner.extend(InstallHelper) if @method
|
73
|
+
# runner.extend(MethodValidateHelper) if @method
|
74
|
+
|
75
|
+
@inputs_errors = inputs.clone
|
76
|
+
@inputs_errors.each{|key,val| @inputs_errors[key]=nil}
|
77
|
+
|
78
|
+
@checking_functions.each do |element|
|
79
|
+
begin
|
80
|
+
return false unless (element['code'].call)
|
81
|
+
rescue Exception => e
|
82
|
+
element['input'].each do |key, val|
|
83
|
+
@inputs_errors[key] = e.message
|
84
|
+
end
|
85
|
+
return false
|
86
|
+
end
|
87
|
+
end
|
88
|
+
return true
|
89
|
+
end
|
90
|
+
#checks is inputs valid
|
91
|
+
# def valid?
|
92
|
+
# ifcheck_evaled
|
93
|
+
# end
|
94
|
+
# Removes all validating functions
|
95
|
+
def clear_checking_functions
|
96
|
+
@checking_functions = Array.new
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
class ValidatorSupportMethods
|
5
|
+
|
6
|
+
def self.assert_http_body(requested_url, expected_result, error_msg)
|
7
|
+
result = self.get_html_content(requested_url)
|
8
|
+
if expected_result == result
|
9
|
+
return true
|
10
|
+
else
|
11
|
+
raise error_msg
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.assert_http_for_multi_error(requested_url)
|
16
|
+
result = self.get_html_content(requested_url)
|
17
|
+
if result == 'OK'
|
18
|
+
return true
|
19
|
+
else
|
20
|
+
return result.split("\n")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
def self.get_html_content(requested_url)
|
26
|
+
url = URI.parse(requested_url)
|
27
|
+
full_path = (!url.query) ? url.path : "#{url.path}?#{url.query}"
|
28
|
+
the_request = Net::HTTP::Get.new(full_path)
|
29
|
+
|
30
|
+
the_response = Net::HTTP.start(url.host, url.port) { |http|
|
31
|
+
http.request(the_request)
|
32
|
+
}
|
33
|
+
|
34
|
+
raise "Response was not 200, response was #{the_response.code}" if the_response.code != "200"
|
35
|
+
return the_response.body
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
redirect_to "http://google.pl/"
|
@@ -0,0 +1 @@
|
|
1
|
+
false
|
@@ -0,0 +1 @@
|
|
1
|
+
true
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @sample %>one
|
@@ -0,0 +1,11 @@
|
|
1
|
+
input:
|
2
|
+
path:
|
3
|
+
name: "sciezka"
|
4
|
+
description: "ścieżka do"
|
5
|
+
method:
|
6
|
+
ftp:
|
7
|
+
title: "FTP"
|
8
|
+
description: "Zainstaluj za pomocą FTP"
|
9
|
+
app:
|
10
|
+
info: "Info about jooma which is cool"
|
11
|
+
info2: "This could be info about what you need to install joomla on your machine"
|
File without changes
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'easy_installer/config.rb'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
class EasyInstaller::Config
|
6
|
+
def path_to_gem
|
7
|
+
File.join Dir.pwd
|
8
|
+
end
|
9
|
+
end
|
10
|
+
class TestConfig< Test::Unit::TestCase
|
11
|
+
|
12
|
+
def test_praser_validation
|
13
|
+
@config = EasyInstaller::Config.new("tests/files/config.yml")
|
14
|
+
assert(@config.valid?, "Vaild config didn't passed: valid?")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_getting_install_code
|
18
|
+
@config = EasyInstaller::Config.new("tests/files/config.yml")
|
19
|
+
code = @config.install_code "ftp"
|
20
|
+
assert_equal("false", code)
|
21
|
+
code = @config.install_code "local"
|
22
|
+
assert_equal("true", code)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_required_items
|
26
|
+
@config = EasyInstaller::Config.new("tests/files/config.yml")
|
27
|
+
assert_kind_of(Array, @config.required_inputs_for_method_as_tree("ftp").flatern_to_array)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'easy_installer/config_validator'
|
3
|
+
|
4
|
+
class TestConfigValidator < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_simple_validation
|
9
|
+
@config = EasyInstaller::Config.new("tests/files/config.yml")
|
10
|
+
should_be_true = EasyInstaller::Config::Validator.new(@config)
|
11
|
+
assert_equal(true, should_be_true.check)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_invalid_config
|
15
|
+
@invalid_config = EasyInstaller::Config.new("tests/wrong_config/config.yml")
|
16
|
+
should_be_false = EasyInstaller::Config::Validator.new(@invalid_config)
|
17
|
+
assert_equal(false, should_be_false.check)
|
18
|
+
puts "error"
|
19
|
+
assert_kind_of(String, should_be_false.error_message)
|
20
|
+
assert_kind_of(Array, should_be_false.error_backtrace)
|
21
|
+
end
|
22
|
+
end
|
data/tests/test_ftp.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
$LOAD_PATH << '../lib/'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'easy_installer'
|
4
|
+
require 'easy_installer/methods/ftp/validate_helper'
|
5
|
+
require 'easy_installer/methods/ftp/install_helper'
|
6
|
+
|
7
|
+
class ExampleClass
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestFtpHelper < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
@class = ExampleClass.new
|
14
|
+
@class.extend(EasyInstaller::MethodValidateHelper)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_testing_connection
|
18
|
+
if ENV["ftp_host"] && ENV["ftp_username"] && ENV["ftp_password"]
|
19
|
+
res = @class.check_connection "ftp_host"=>ENV["ftp_host"], "ftp_username"=>ENV["ftp_username"], "ftp_password"=>ENV["ftp_password"]
|
20
|
+
assert_equal(true, res, "problem with connecting to given ftp")
|
21
|
+
else
|
22
|
+
puts ""
|
23
|
+
puts "WARNING:"
|
24
|
+
puts "Add sample ftp access data to ENV : ftp_host ftp_username ftp_password"
|
25
|
+
puts ""
|
26
|
+
end
|
27
|
+
res = @class.check_connection :ftp_host=>"smaple.qw", :ftp_username=>"ENV", :ftp_password=>"q"
|
28
|
+
assert_equal(false, res, "problem with wrong data to ftp")
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_simple_install
|
32
|
+
if ENV["ftp_host"] && ENV["ftp_username"] && ENV["ftp_password"] && ENV["path"]
|
33
|
+
params = {
|
34
|
+
"path" => ENV['path'],
|
35
|
+
"ftp_host" => ENV['ftp_host'],
|
36
|
+
"ftp_username" => ENV['ftp_username'],
|
37
|
+
"ftp_password" => ENV['ftp_password']
|
38
|
+
}
|
39
|
+
code ="
|
40
|
+
setup @inputs
|
41
|
+
move_directory('tests/example/files/joomla', @inputs['path'])
|
42
|
+
"
|
43
|
+
evaluator = EasyInstaller::Sandbox.new(code)
|
44
|
+
evaluator.helpers << EasyInstaller::InstallHelper
|
45
|
+
evaluator.inputs = params
|
46
|
+
|
47
|
+
assert_equal(true, evaluator.eval)
|
48
|
+
puts evaluator.returned
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|