knjrbfw 0.0.3
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +32 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/lib/knj/.gitignore +1 -0
- data/lib/knj/arrayext.rb +157 -0
- data/lib/knj/autoload/activesupport.rb +2 -0
- data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
- data/lib/knj/autoload/backups/parsedate.rb +53 -0
- data/lib/knj/autoload/backups/ping.rb +64 -0
- data/lib/knj/autoload/cinch.rb +2 -0
- data/lib/knj/autoload/erubis.rb +6 -0
- data/lib/knj/autoload/facebooker.rb +3 -0
- data/lib/knj/autoload/facets_dictionary.rb +7 -0
- data/lib/knj/autoload/gd2.rb +2 -0
- data/lib/knj/autoload/gettext.rb +9 -0
- data/lib/knj/autoload/gtk2.rb +5 -0
- data/lib/knj/autoload/json_autoload.rb +7 -0
- data/lib/knj/autoload/magick.rb +6 -0
- data/lib/knj/autoload/mysql.rb +6 -0
- data/lib/knj/autoload/parsedate.rb +1 -0
- data/lib/knj/autoload/ping.rb +64 -0
- data/lib/knj/autoload/rexml.rb +12 -0
- data/lib/knj/autoload/soap.rb +3 -0
- data/lib/knj/autoload/sqlite3.rb +6 -0
- data/lib/knj/autoload/tmail.rb +6 -0
- data/lib/knj/autoload/twitter.rb +2 -0
- data/lib/knj/autoload/xmlsimple.rb +6 -0
- data/lib/knj/autoload/zip.rb +6 -0
- data/lib/knj/autoload.rb +136 -0
- data/lib/knj/compiler.rb +53 -0
- data/lib/knj/cpufreq.rb +40 -0
- data/lib/knj/datarow.rb +256 -0
- data/lib/knj/datestamp.rb +91 -0
- data/lib/knj/datet.rb +448 -0
- data/lib/knj/degulesider.rb +46 -0
- data/lib/knj/erb/apache_knjerb.conf +8 -0
- data/lib/knj/erb/cache/README +1 -0
- data/lib/knj/erb/erb.rb +21 -0
- data/lib/knj/erb/erb_1.9.rb +13 -0
- data/lib/knj/erb/erb_cache_clean.rb +20 -0
- data/lib/knj/erb/erb_fcgi.rb +44 -0
- data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
- data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
- data/lib/knj/erb/erb_jruby.rb +22 -0
- data/lib/knj/erb/include.rb +248 -0
- data/lib/knj/errors.rb +19 -0
- data/lib/knj/eruby.rb +224 -0
- data/lib/knj/event_filemod.rb +53 -0
- data/lib/knj/event_handler.rb +69 -0
- data/lib/knj/exchangerates.rb +39 -0
- data/lib/knj/ext/webrick.rb +31 -0
- data/lib/knj/filesystem.rb +8 -0
- data/lib/knj/fs/drivers/filesystem.rb +14 -0
- data/lib/knj/fs/drivers/ftp.rb +33 -0
- data/lib/knj/fs/drivers/ssh.rb +28 -0
- data/lib/knj/fs/fs.rb +36 -0
- data/lib/knj/gettext_fallback.rb +17 -0
- data/lib/knj/gettext_threadded.rb +77 -0
- data/lib/knj/google_sitemap.rb +59 -0
- data/lib/knj/gtk2.rb +277 -0
- data/lib/knj/gtk2_cb.rb +85 -0
- data/lib/knj/gtk2_menu.rb +57 -0
- data/lib/knj/gtk2_statuswindow.rb +64 -0
- data/lib/knj/gtk2_tv.rb +63 -0
- data/lib/knj/hash_methods.rb +37 -0
- data/lib/knj/http.rb +190 -0
- data/lib/knj/includes/appserver_cli.rb +39 -0
- data/lib/knj/ip2location.rb +22 -0
- data/lib/knj/ironruby-gtk2/button.rb +19 -0
- data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
- data/lib/knj/ironruby-gtk2/entry.rb +9 -0
- data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
- data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
- data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
- data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
- data/lib/knj/ironruby-gtk2/glib.rb +15 -0
- data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
- data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
- data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
- data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
- data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
- data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
- data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
- data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
- data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
- data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
- data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
- data/lib/knj/ironruby-gtk2/image.rb +15 -0
- data/lib/knj/ironruby-gtk2/label.rb +19 -0
- data/lib/knj/ironruby-gtk2/stock.rb +4 -0
- data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
- data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
- data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
- data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
- data/lib/knj/ironruby-gtk2/window.rb +23 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
- data/lib/knj/jruby-gtk2/builder.rb +27 -0
- data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
- data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
- data/lib/knj/jruby-gtk2/combobox.rb +29 -0
- data/lib/knj/jruby-gtk2/dialog.rb +44 -0
- data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
- data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
- data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
- data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
- data/lib/knj/jruby-gtk2/hbox.rb +10 -0
- data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
- data/lib/knj/jruby-gtk2/image.rb +10 -0
- data/lib/knj/jruby-gtk2/liststore.rb +56 -0
- data/lib/knj/jruby-gtk2/menu.rb +40 -0
- data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
- data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
- data/lib/knj/jruby-gtk2/stock.rb +8 -0
- data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
- data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
- data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
- data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
- data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
- data/lib/knj/jruby-gtk2/treeview.rb +105 -0
- data/lib/knj/jruby-gtk2/vbox.rb +12 -0
- data/lib/knj/jruby-gtk2/window.rb +11 -0
- data/lib/knj/jruby_compiler.rb +14 -0
- data/lib/knj/knj.rb +19 -0
- data/lib/knj/knj_controller.rb +13 -0
- data/lib/knj/knjdb/dbtime.rb +30 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
- data/lib/knj/knjdb/libknjdb.rb +438 -0
- data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
- data/lib/knj/knjdb/libknjdb_row.rb +149 -0
- data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
- data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
- data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
- data/lib/knj/libqt.rb +75 -0
- data/lib/knj/libqt_window.rb +10 -0
- data/lib/knj/locale_strings.rb +3 -0
- data/lib/knj/locales.rb +54 -0
- data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
- data/lib/knj/mail.rb +75 -0
- data/lib/knj/mailobj.rb +82 -0
- data/lib/knj/mount.rb +115 -0
- data/lib/knj/notify.rb +13 -0
- data/lib/knj/nvidia_settings.rb +45 -0
- data/lib/knj/objects.rb +731 -0
- data/lib/knj/opts.rb +38 -0
- data/lib/knj/os.rb +158 -0
- data/lib/knj/php.rb +717 -0
- data/lib/knj/php_parser/arguments.rb +5 -0
- data/lib/knj/php_parser/functions.rb +97 -0
- data/lib/knj/php_parser/php_parser.rb +99 -0
- data/lib/knj/php_parser/tests/test.rb +12 -0
- data/lib/knj/php_parser/tests/test_function.php +8 -0
- data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
- data/lib/knj/power_manager.rb +31 -0
- data/lib/knj/rand.rb +10 -0
- data/lib/knj/retry.rb +71 -0
- data/lib/knj/rhodes/mutex.rb +11 -0
- data/lib/knj/rhodes/rhodes.js +3 -0
- data/lib/knj/rhodes/rhodes.rb +11 -0
- data/lib/knj/rsvgbin.rb +20 -0
- data/lib/knj/scripts/degulesider.rb +12 -0
- data/lib/knj/scripts/filesearch.rb +51 -0
- data/lib/knj/scripts/ip2location.rb +12 -0
- data/lib/knj/scripts/keepalive.rb +6 -0
- data/lib/knj/scripts/svn_merge.rb +29 -0
- data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
- data/lib/knj/sms.rb +54 -0
- data/lib/knj/sshrobot/sshrobot.rb +93 -0
- data/lib/knj/strings.rb +65 -0
- data/lib/knj/sysuser.rb +27 -0
- data/lib/knj/tests/compiler/compiler_test.rb +13 -0
- data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
- data/lib/knj/tests/test_degulesider.rb +11 -0
- data/lib/knj/tests/test_mount.rb +30 -0
- data/lib/knj/tests/test_retry.rb +30 -0
- data/lib/knj/thread.rb +32 -0
- data/lib/knj/thread2.rb +47 -0
- data/lib/knj/threadhandler.rb +130 -0
- data/lib/knj/threadpool.rb +177 -0
- data/lib/knj/translations.rb +139 -0
- data/lib/knj/unix_proc.rb +82 -0
- data/lib/knj/web.rb +932 -0
- data/lib/knj/webscripts/image.rhtml +82 -0
- data/lib/knj/win.rb +4 -0
- data/lib/knj/win_registry.rb +60 -0
- data/lib/knj/win_tightvnc.rb +127 -0
- data/lib/knj/x11vnc.rb +48 -0
- data/lib/knj/youtube.rb +38 -0
- data/lib/knjrbfw.rb +4 -0
- data/spec/knjrbfw_spec.rb +269 -0
- data/spec/spec_helper.rb +12 -0
- metadata +336 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<%
|
|
2
|
+
idstr = Knj::Php.md5("#{_get["path"]}_#{_get["smartsize"].to_i}_#{_get["width"].to_i}_#{_get["height"].to_i}_#{_get["maxwidth"].to_i}_#{_get["maxheight"].to_i}")
|
|
3
|
+
|
|
4
|
+
tmp_use = false
|
|
5
|
+
tmp_write = false
|
|
6
|
+
if $knj_webscripts_image_config
|
|
7
|
+
tmp_use = true
|
|
8
|
+
tmp_path = "#{$knj_webscripts_image_config["tmp_path"]}/#{idstr}"
|
|
9
|
+
tmp_exists = File.exists?(tmp_path)
|
|
10
|
+
tmp_write = true if !tmp_exists
|
|
11
|
+
|
|
12
|
+
if !tmp_write and tmp_exists
|
|
13
|
+
time_orig = File.mtime(_get["path"])
|
|
14
|
+
time_cache = File.mtime(tmp_path)
|
|
15
|
+
|
|
16
|
+
if time_orig > time_cache
|
|
17
|
+
tmp_write = true
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
if !tmp_use or tmp_write or _get["force"].to_i > 0
|
|
23
|
+
pic = Magick::ImageList.new(_get["path"])
|
|
24
|
+
width = pic.columns
|
|
25
|
+
height = pic.rows
|
|
26
|
+
|
|
27
|
+
height = _get["height"].to_i if _get["height"]
|
|
28
|
+
width = _get["width"].to_i if _get["width"]
|
|
29
|
+
|
|
30
|
+
if _get["smartsize"]
|
|
31
|
+
if pic.columns > pic.rows
|
|
32
|
+
width = _get["smartsize"].to_i
|
|
33
|
+
height = (pic.rows.to_f / (pic.columns.to_f / width.to_f)).to_i
|
|
34
|
+
else
|
|
35
|
+
height = _get["smartsize"].to_i
|
|
36
|
+
width = (pic.columns.to_f / (pic.rows.to_f / height.to_f)).to_i
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
if _get["maxwidth"]
|
|
41
|
+
maxwidth = _get["maxwidth"].to_i
|
|
42
|
+
|
|
43
|
+
if width > maxwidth
|
|
44
|
+
height = (pic.rows.to_f / (pic.columns.to_f / maxwidth.to_f)).to_i
|
|
45
|
+
width = maxwidth
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
if _get["maxheight"]
|
|
50
|
+
maxheight = _get["maxheight"].to_i
|
|
51
|
+
|
|
52
|
+
if height > maxheight
|
|
53
|
+
width = (pic.columns.to_f / (pic.rows.to_f / maxheight.to_f)).to_i
|
|
54
|
+
height = maxheight
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if _get["width"] and _get["height"]
|
|
59
|
+
width = _get["width"].to_i
|
|
60
|
+
height = _get["height"].to_i
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
if height != pic.rows or width != pic.columns
|
|
64
|
+
pic = pic.resize_to_fit(width.to_i, height.to_i)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
pic.format = "png"
|
|
68
|
+
blob_cont = pic.to_blob
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
if tmp_write and blob_cont
|
|
72
|
+
Knj::Php.file_put_contents(tmp_path, blob_cont)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
if tmp_use
|
|
76
|
+
Knj::Php.header("Content-Type: image/png")
|
|
77
|
+
print File.read(tmp_path)
|
|
78
|
+
else
|
|
79
|
+
Knj::Php.header("Content-Type: image/png")
|
|
80
|
+
print blob_cont
|
|
81
|
+
end
|
|
82
|
+
%>
|
data/lib/knj/win.rb
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
class Knj::Win::Registry
|
|
2
|
+
def self.const(type)
|
|
3
|
+
if type == :cur_user
|
|
4
|
+
return Win32::Registry::HKEY_CURRENT_USER
|
|
5
|
+
elsif type == :local_machine
|
|
6
|
+
return Win32::Registry::HKEY_LOCAL_MACHINE
|
|
7
|
+
else
|
|
8
|
+
raise "Unknown type: " + type.to_s
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.type(in_type)
|
|
13
|
+
return Win32::Registry::REG_SZ if in_type == :sz
|
|
14
|
+
return Win32::Registry::REG_DWORD if in_type == :dword
|
|
15
|
+
return Win32::Registry::REG_BINARY if in_type == :bin
|
|
16
|
+
return nil if in_type == nil
|
|
17
|
+
|
|
18
|
+
raise "Unknown type: #{in_type}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.get(type, regpath, key, in_type = nil)
|
|
22
|
+
hkey = self.const(type)
|
|
23
|
+
hkey.open(regpath, Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
|
24
|
+
return reg[key, self.type(in_type)].to_s
|
|
25
|
+
|
|
26
|
+
#reg.each_key do |k, v|
|
|
27
|
+
# puts k, v
|
|
28
|
+
#end
|
|
29
|
+
#reg.each_value do |k, v|
|
|
30
|
+
# puts k, v
|
|
31
|
+
#end
|
|
32
|
+
|
|
33
|
+
#reg_typ, reg_val = reg.read('')
|
|
34
|
+
#return {
|
|
35
|
+
# :type => reg_typ,
|
|
36
|
+
# :value => reg_val
|
|
37
|
+
#}
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.set(type, regpath, key, content = nil, in_type = nil)
|
|
42
|
+
if key.is_a?(Array)
|
|
43
|
+
key.each do |v|
|
|
44
|
+
if v.is_a?(Array)
|
|
45
|
+
self.set(type, regpath, v[0], v[1], v[2])
|
|
46
|
+
elsif v.is_a?(Hash)
|
|
47
|
+
self.set(type, regpath, k, v[:val], v[:type])
|
|
48
|
+
else
|
|
49
|
+
raise "Unknown type: #{v.class.to_s}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
hkey = self.const(type)
|
|
54
|
+
hkey.create(regpath)
|
|
55
|
+
hkey.open(regpath, Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
|
56
|
+
reg[key.to_s, self.type(in_type)] = content.to_s
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
class Knj::Win::TightVNC
|
|
2
|
+
def initialize(args)
|
|
3
|
+
@args = ArrayExt.hash_sym(args)
|
|
4
|
+
|
|
5
|
+
@args[:port] = 5900 if !@args[:port]
|
|
6
|
+
@args[:port_http] = 5800 if !@args[:http_port]
|
|
7
|
+
|
|
8
|
+
raise "No path given." if !@args[:path]
|
|
9
|
+
|
|
10
|
+
exefile = @args[:path] + "/WinVNC.exe"
|
|
11
|
+
raise "#{exefile} was not found." if !File.exists?(exefile)
|
|
12
|
+
|
|
13
|
+
@wmi = WIN32OLE.connect("winmgmts://")
|
|
14
|
+
processes = @wmi.ExecQuery("SELECT * FROM win32_process")
|
|
15
|
+
ended = false
|
|
16
|
+
for process in processes do
|
|
17
|
+
if process.Name == "WinVNC.exe"
|
|
18
|
+
process.Terminate
|
|
19
|
+
ended = true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
sleep 1 if ended
|
|
24
|
+
|
|
25
|
+
#print Win::Registry.get(:cur_user, 'Software\ORL\WinVNC3', 'Password', :sz).unpack('H*')[0] + "\n"
|
|
26
|
+
#print ["160e9d46f26586ca"].pack('H*').unpack('H*')[0] + "\n"
|
|
27
|
+
#exit
|
|
28
|
+
|
|
29
|
+
Win::Registry.set(:cur_user, 'Software\ORL\WinVNC3', [
|
|
30
|
+
["AutoPortSelect", 1, :dword],
|
|
31
|
+
["BlankScreen", 0, :dword],
|
|
32
|
+
["DontSetHooks", 0, :dword],
|
|
33
|
+
["DontUseDriver", 0, :dword],
|
|
34
|
+
["DriverDirectAccess", 1, :dword],
|
|
35
|
+
["EnableFileTransfers", 1, :dword],
|
|
36
|
+
["HTTPPortNumber", @args[:port_http], :dword],
|
|
37
|
+
["IdleTimeout", 0, :dword],
|
|
38
|
+
["InputsEnabled", 1, :dword],
|
|
39
|
+
["LocalInputsDisabled", 0, :dword],
|
|
40
|
+
["LocalInputsPriority", 0, :dword],
|
|
41
|
+
["LocalInputsPriorityTime", 3, :dword],
|
|
42
|
+
["LockSetting", 0, :dword],
|
|
43
|
+
["OnlyPollConsole", 1, :dword],
|
|
44
|
+
["OnlyPollOnEvent", 0, :dword],
|
|
45
|
+
["PollForeground", 1, :dword],
|
|
46
|
+
["PollFullScreen", 0, :dword],
|
|
47
|
+
["PollingCycle", 300, :dword],
|
|
48
|
+
["PollUnderCursor", 0, :dword],
|
|
49
|
+
["PollUnderCursor", @args[:port], :dword],
|
|
50
|
+
["QueryAccept", 0, :dword],
|
|
51
|
+
["QueryAllowNoPass", 0, :dword],
|
|
52
|
+
["QuerySetting", 2, :dword],
|
|
53
|
+
["QueryTimeout", 30, :dword],
|
|
54
|
+
["RemoveWallpaper", 0, :dword],
|
|
55
|
+
["SocketConnect", 1, :dword],
|
|
56
|
+
["Password", ["160e9d46f26586ca"].pack('H*'), :bin],
|
|
57
|
+
["PasswordViewOnly", ["160e9d46f26586ca"].pack('H*'), :bin]
|
|
58
|
+
])
|
|
59
|
+
Win::Registry.set(:local_machine, 'Software\ORL\WinVNC3', [
|
|
60
|
+
["AllowLoopback", 1, :dword],
|
|
61
|
+
["LoopbackOnly", 0, :dword]
|
|
62
|
+
])
|
|
63
|
+
#password is of this moment only 'kaspernj'.
|
|
64
|
+
|
|
65
|
+
@wmi = WIN32OLE.connect("winmgmts://")
|
|
66
|
+
processes = @wmi.ExecQuery("SELECT * FROM win32_process")
|
|
67
|
+
ended = false
|
|
68
|
+
for process in processes do
|
|
69
|
+
if process.Name == "WinVNC.exe"
|
|
70
|
+
process.Terminate
|
|
71
|
+
ended = true
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
sleep 1 if ended
|
|
76
|
+
|
|
77
|
+
Knj::Thread.new do
|
|
78
|
+
IO.popen(exefile) do |process|
|
|
79
|
+
#nothing
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
sleep 1
|
|
84
|
+
|
|
85
|
+
@processes = @wmi.ExecQuery("SELECT * FROM win32_process")
|
|
86
|
+
for process in @processes do
|
|
87
|
+
if process.Name == "WinVNC.exe"
|
|
88
|
+
@process = process
|
|
89
|
+
break
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
raise "Could not start WinVNC.exe." if !@process
|
|
94
|
+
|
|
95
|
+
Kernel.at_exit do
|
|
96
|
+
self.close
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def open?
|
|
101
|
+
begin
|
|
102
|
+
@process.GetOwner
|
|
103
|
+
return true
|
|
104
|
+
rescue Exception => e
|
|
105
|
+
return false
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def close
|
|
110
|
+
return nil if !@process
|
|
111
|
+
|
|
112
|
+
begin
|
|
113
|
+
@process.Terminate
|
|
114
|
+
rescue Exception => e
|
|
115
|
+
if e.class.to_s == "WIN32OLERuntimeError" and e.message.index("Terminate") != nil
|
|
116
|
+
#do nothing.
|
|
117
|
+
else
|
|
118
|
+
raise e
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
@process = nil
|
|
123
|
+
@args = nil
|
|
124
|
+
@wmi = nil
|
|
125
|
+
@processes = nil
|
|
126
|
+
end
|
|
127
|
+
end
|
data/lib/knj/x11vnc.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
class Knj::X11VNC
|
|
2
|
+
def initialize(args = {})
|
|
3
|
+
@args = ArrayExt.hash_sym(args)
|
|
4
|
+
@open = true
|
|
5
|
+
|
|
6
|
+
cmd = "x11vnc -q"
|
|
7
|
+
cmd += " -shared" if @args[:shared] or !@args.has_key?(:shared)
|
|
8
|
+
cmd += " -forever" if @args[:forever] or !@args.has_key?(:forever)
|
|
9
|
+
cmd += " -rfbport #{@args[:port]}" if @args[:port]
|
|
10
|
+
cmd += " -nolookup" if @args[:nolookup] or !@args.has_key?(:nolookup)
|
|
11
|
+
|
|
12
|
+
print cmd + "\n"
|
|
13
|
+
|
|
14
|
+
@thread = Knj::Thread.new do
|
|
15
|
+
IO.popen(cmd) do |process|
|
|
16
|
+
@pid = process.pid
|
|
17
|
+
process.sync
|
|
18
|
+
|
|
19
|
+
while read = process.read
|
|
20
|
+
break if read.length == 0
|
|
21
|
+
#print read
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@open = false
|
|
25
|
+
@pid = nil
|
|
26
|
+
@thread = nil
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Kernel.at_exit do
|
|
31
|
+
self.close
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def open?
|
|
36
|
+
return @open
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def close
|
|
40
|
+
return nil if !@thread
|
|
41
|
+
|
|
42
|
+
Process.kill("HUP", @pid) if @pid
|
|
43
|
+
@thread.exit if @thread
|
|
44
|
+
@thread = nil
|
|
45
|
+
@open = false
|
|
46
|
+
@pid = nil
|
|
47
|
+
end
|
|
48
|
+
end
|
data/lib/knj/youtube.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
class Knj::YouTube
|
|
2
|
+
def self.all_videos(data, params = {}, opts = {})
|
|
3
|
+
params[:per_page] = 50
|
|
4
|
+
|
|
5
|
+
ret_arr = []
|
|
6
|
+
go_through_pages = true
|
|
7
|
+
page = 1
|
|
8
|
+
while go_through_pages
|
|
9
|
+
print "Getting page #{page.to_s}\n"
|
|
10
|
+
|
|
11
|
+
newparams = Marshal.load(Marshal.dump(params))
|
|
12
|
+
newparams[:page] = page
|
|
13
|
+
videos = data["youtube"].videos_by(newparams)
|
|
14
|
+
|
|
15
|
+
videos.videos.each do |video|
|
|
16
|
+
if data["check_stop"] and data["check_stop"].respond_to?("check_stop_parsing")
|
|
17
|
+
if data["check_stop"].check_stop_parsing(video)
|
|
18
|
+
go_through_pages = false
|
|
19
|
+
break
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ret_arr << video
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
status = videos.next_page
|
|
27
|
+
break if !status
|
|
28
|
+
|
|
29
|
+
page += 1
|
|
30
|
+
|
|
31
|
+
if data["pages"] and page > data["pages"].to_i
|
|
32
|
+
break
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
return ret_arr
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/knjrbfw.rb
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "Knjrbfw" do
|
|
4
|
+
it "should be able to generate a sample SQLite database and add a sample table, with sample columns and with a sample index to it" do
|
|
5
|
+
require "knjrbfw"
|
|
6
|
+
require "knj/autoload"
|
|
7
|
+
require "tmpdir"
|
|
8
|
+
|
|
9
|
+
db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
db = Knj::Db.new(
|
|
13
|
+
:type => "sqlite3",
|
|
14
|
+
:path => db_path,
|
|
15
|
+
:return_keys => "symbols",
|
|
16
|
+
:index_append_table_name => true
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
db.tables.create("Project", {
|
|
20
|
+
"columns" => [
|
|
21
|
+
{"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
|
22
|
+
{"name" => "category_id", "type" => "int"},
|
|
23
|
+
{"name" => "name", "type" => "varchar"}
|
|
24
|
+
],
|
|
25
|
+
"indexes" => [
|
|
26
|
+
{"name" => "category_id", "columns" => ["category_id"]}
|
|
27
|
+
]
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
db.tables.create("Task", {
|
|
31
|
+
"columns" => [
|
|
32
|
+
{"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
|
33
|
+
{"name" => "project_id", "type" => "int"},
|
|
34
|
+
{"name" => "user_id", "type" => "int"},
|
|
35
|
+
{"name" => "name", "type" => "varchar"}
|
|
36
|
+
],
|
|
37
|
+
"indexes" => [
|
|
38
|
+
{"name" => "project_id", "columns" => ["project_id"]}
|
|
39
|
+
]
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
db.tables.create("User", {
|
|
43
|
+
"columns" => [
|
|
44
|
+
{"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
|
|
45
|
+
{"name" => "name", "type" => "varchar"}
|
|
46
|
+
]
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
table = db.tables["Project"]
|
|
50
|
+
|
|
51
|
+
indexes = table.indexes
|
|
52
|
+
raise "Could not find the sample-index 'category_id' that should have been created." if !indexes["category_id"]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
#If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
|
|
56
|
+
db.insert("Project", {
|
|
57
|
+
"name" => "Test project"
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
db.q("SELECT * FROM Project") do |d|
|
|
61
|
+
raise "Somehow name was not 'Test project'" if d[:name] != "Test project"
|
|
62
|
+
raise "ID was not set?" if d[:id].to_i <= 0
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
$db = db
|
|
66
|
+
rescue => e
|
|
67
|
+
File.unlink(db_path) if File.exists?(db_path)
|
|
68
|
+
raise e
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should be able to parse various date formats." do
|
|
73
|
+
date = Knj::Datet.in("2011-07-09 00:00:00 UTC")
|
|
74
|
+
date = Knj::Datet.in("1985-06-17 01:00:00")
|
|
75
|
+
date = Knj::Datet.in("1985-06-17")
|
|
76
|
+
date = Knj::Datet.in("17/06 1985")
|
|
77
|
+
|
|
78
|
+
raise "Couldnt register type 1 nullstamp." if !Knj::Datet.is_nullstamp?("0000-00-00")
|
|
79
|
+
raise "Couldnt register type 2 nullstamp." if !Knj::Datet.is_nullstamp?("0000-00-00 00:00:00")
|
|
80
|
+
raise "Registered nullstamp on valid date." if Knj::Datet.is_nullstamp?("1985-06-17")
|
|
81
|
+
raise "Registered nullstamp on valid date." if Knj::Datet.is_nullstamp?("1985-06-17 10:30:00")
|
|
82
|
+
|
|
83
|
+
date = Knj::Datet.in("2011-07-09 13:05:04 +0200")
|
|
84
|
+
if date.time.localtime.to_s != "2011-07-09 15:05:04 +0200"
|
|
85
|
+
raise "Datet didnt return expected result: '#{date.time.localtime}'."
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "should be able to automatic generate methods on datarow-classes (has_many, has_one)." do
|
|
90
|
+
class Project < Knj::Datarow
|
|
91
|
+
has_many [
|
|
92
|
+
{:class => :Task, :col => :project_id, :depends => true}
|
|
93
|
+
]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
class Task < Knj::Datarow
|
|
97
|
+
has_one [
|
|
98
|
+
{:class => :User, :required => true},
|
|
99
|
+
:Project
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
def self.list(d)
|
|
103
|
+
sql = "SELECT * FROM Task WHERE 1=1"
|
|
104
|
+
|
|
105
|
+
ret = list_helper(d)
|
|
106
|
+
d.args.each do |key, val|
|
|
107
|
+
raise sprintf("Invalid key: %s.", key)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
sql += ret[:sql_where]
|
|
111
|
+
sql += ret[:sql_order]
|
|
112
|
+
sql += ret[:sql_limit]
|
|
113
|
+
|
|
114
|
+
return d.ob.list_bysql(:Task, sql)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
class User < Knj::Datarow
|
|
119
|
+
has_one [:Project]
|
|
120
|
+
|
|
121
|
+
def html
|
|
122
|
+
return self[:name]
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
$ob = Knj::Objects.new(:db => $db, :datarow => true, :require => false)
|
|
127
|
+
|
|
128
|
+
$ob.add(:User, {
|
|
129
|
+
:name => "Kasper"
|
|
130
|
+
})
|
|
131
|
+
$ob.add(:Task, {
|
|
132
|
+
:name => "Test task",
|
|
133
|
+
:user_id => 1,
|
|
134
|
+
:project_id => 1
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
project = $ob.get(:Project, 1)
|
|
138
|
+
|
|
139
|
+
tasks = project.tasks
|
|
140
|
+
raise "No tasks were found on project?" if tasks.empty?
|
|
141
|
+
|
|
142
|
+
user = tasks[0].user
|
|
143
|
+
project_second = tasks[0].project
|
|
144
|
+
|
|
145
|
+
raise "Returned object was not a user on task." if !user.is_a?(User)
|
|
146
|
+
raise "Returned object was not a project on task." if !project_second.is_a?(Project)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
#Check that has_many-depending is actually working.
|
|
150
|
+
begin
|
|
151
|
+
$ob.delete(project)
|
|
152
|
+
raise "It was possible to delete project 1 even though task 1 depended on it!"
|
|
153
|
+
rescue
|
|
154
|
+
#this should happen - it should not possible to delete project 1 because task 1 depends on it."
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "should be able to connect to objects 'no-html' callback and test it." do
|
|
159
|
+
task = $ob.get(:Task, 1)
|
|
160
|
+
$ob.events.connect(:no_html) do |event, classname|
|
|
161
|
+
"[no #{classname.to_s.downcase}]"
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
raise "Unexpected user_html from task (should have been 'Kasper')." if task.user_html != "Kasper"
|
|
165
|
+
task.update(:user_id => 0)
|
|
166
|
+
raise "Unexpected user_html from task (should have been '[no user]')." if task.user_html != "[no user]"
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it "should delete the temp database again." do
|
|
170
|
+
db_path = "#{Dir.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
|
|
171
|
+
File.unlink(db_path) if File.exists?(db_path)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "should be able to execute various Knj::Php functions correctly." do
|
|
175
|
+
str = "Kasper Johansen"
|
|
176
|
+
|
|
177
|
+
#substr
|
|
178
|
+
teststr = Knj::Php.substr(str, 7, 8)
|
|
179
|
+
if teststr != "Johansen"
|
|
180
|
+
raise "substr did not return expected result: '#{teststr}'"
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
teststr = Knj::Php.substr(str, -8, 8)
|
|
184
|
+
if teststr != "Johansen"
|
|
185
|
+
raise "substr did not returned expected result when using negative positions: '#{teststr}'."
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
#strtoupper
|
|
189
|
+
teststr = Knj::Php.strtoupper(str)
|
|
190
|
+
if teststr != "KASPER JOHANSEN"
|
|
191
|
+
raise "strtoupper did not return expected result: '#{teststr}'."
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
#strtolower
|
|
195
|
+
teststr = Knj::Php.strtolower(str)
|
|
196
|
+
if teststr != "kasper johansen"
|
|
197
|
+
raise "strtolower did not return expected result: '#{teststr}'."
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "should be able to join arrays with callbacks." do
|
|
202
|
+
res = Knj::ArrayExt.join(:arr => [1, 2, 3], :sep => ",", :callback => proc{|value| "'#{value}'"})
|
|
203
|
+
raise "Unexpected result from ArrayExt." if res != "'1','2','3'"
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it "should be able to generate valid SQL based on arrays." do
|
|
207
|
+
ret = $ob.sqlhelper({
|
|
208
|
+
"test_col" => [1, 2, 3]
|
|
209
|
+
},{
|
|
210
|
+
:cols_str => ["test_col"]
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
raise "Unexpected SQL for generating based on array: '#{ret[:sql_where]}'" if ret[:sql_where] != " AND `test_col` IN ('1','2','3')"
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it "should be able to execute various forms of Web.input methods." do
|
|
217
|
+
html = Knj::Web.inputs([{
|
|
218
|
+
:title => "Test 1",
|
|
219
|
+
:name => :textest1,
|
|
220
|
+
:type => :text,
|
|
221
|
+
:default => "hmm",
|
|
222
|
+
:value => "trala"
|
|
223
|
+
},{
|
|
224
|
+
:title => "Test 2",
|
|
225
|
+
:name => :chetest2,
|
|
226
|
+
:type => :checkbox,
|
|
227
|
+
:default => true
|
|
228
|
+
},{
|
|
229
|
+
:title => "Test 3",
|
|
230
|
+
:name => :seltest3,
|
|
231
|
+
:type => :select,
|
|
232
|
+
:default => 1,
|
|
233
|
+
:opts => $ob.list_optshash(:Task)
|
|
234
|
+
},{
|
|
235
|
+
:title => "Test 4",
|
|
236
|
+
:name => :textest4,
|
|
237
|
+
:type => :textarea,
|
|
238
|
+
:height => 300,
|
|
239
|
+
:default => "Hmm",
|
|
240
|
+
:value => "Trala"
|
|
241
|
+
},{
|
|
242
|
+
:title => "Test 5",
|
|
243
|
+
:name => :filetest5,
|
|
244
|
+
:type => :file
|
|
245
|
+
},{
|
|
246
|
+
:title => "Test 6",
|
|
247
|
+
:type => :info,
|
|
248
|
+
:value => "Argh"
|
|
249
|
+
}])
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it "should be able to use alert and back." do
|
|
253
|
+
Knj::Web.alert("Trala")
|
|
254
|
+
|
|
255
|
+
begin
|
|
256
|
+
Knj::Web.back
|
|
257
|
+
raise "It should have called exit which it didnt."
|
|
258
|
+
rescue SystemExit
|
|
259
|
+
#ignore.
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
begin
|
|
263
|
+
Knj::Web.redirect("?show=test")
|
|
264
|
+
raise "It should have called exit which it didnt."
|
|
265
|
+
rescue SystemExit
|
|
266
|
+
#ignore.
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
3
|
+
require 'rspec'
|
|
4
|
+
require 'knjrbfw'
|
|
5
|
+
|
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
|
7
|
+
# in ./support/ and its subdirectories.
|
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
9
|
+
|
|
10
|
+
RSpec.configure do |config|
|
|
11
|
+
|
|
12
|
+
end
|