mirror of
https://github.com/webmin/webmin.git
synced 2026-09-21 04:50:40 +01:00
Finished off ajaxterm module
This commit is contained in:
23
ajaxterm/\
Normal file
23
ajaxterm/\
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Start the Ajaxterm webserver on a random port, then print an iframe for
|
||||
# a URL that proxies to it
|
||||
|
||||
BEGIN { push(@INC, ".."); };
|
||||
use WebminCore;
|
||||
use Socket;
|
||||
&init_config();
|
||||
|
||||
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
|
||||
|
||||
# Check for python
|
||||
if (!&has_command("python")) {
|
||||
&ui_print_endpage(&text('index_epython', "<tt>python</tt>"));
|
||||
}
|
||||
|
||||
# Pick a free port
|
||||
&get_miniserv_config(\%miniserv);
|
||||
|
||||
# Show the iframe
|
||||
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
|
||||
@@ -58,7 +58,7 @@ pre.term span.b5 { background-color: #b0b; }
|
||||
pre.term span.b6 { background-color: #0bb; }
|
||||
pre.term span.b7 { background-color: #bbb; }
|
||||
|
||||
body { background-color: #888; }
|
||||
body { background-color: #ffffff; }
|
||||
#term {
|
||||
float: left;
|
||||
}
|
||||
|
||||
BIN
ajaxterm/ajaxterm/qweb.pyc
Normal file
BIN
ajaxterm/ajaxterm/qweb.pyc
Normal file
Binary file not shown.
1
ajaxterm/config
Normal file
1
ajaxterm/config
Normal file
@@ -0,0 +1 @@
|
||||
timeout=120
|
||||
1
ajaxterm/config.info
Normal file
1
ajaxterm/config.info
Normal file
@@ -0,0 +1 @@
|
||||
timeout=Idle timeout before closing connection,0,5,,seconds
|
||||
@@ -10,7 +10,8 @@ use Socket;
|
||||
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
|
||||
|
||||
# Check for python
|
||||
if (!&has_command("python")) {
|
||||
$python = &has_command("python");
|
||||
if (!$python) {
|
||||
&ui_print_endpage(&text('index_epython', "<tt>python</tt>"));
|
||||
}
|
||||
|
||||
@@ -28,14 +29,24 @@ while(1) {
|
||||
close(TEST);
|
||||
|
||||
# Run the Ajaxterm webserver
|
||||
system("cd $module_root_directory/ajaxterm ; python ajaxterm.py --port $port --log >/tmp/ajaxterm.out 2>&1 </dev/null &");
|
||||
$pid = fork();
|
||||
if (!$pid) {
|
||||
chdir("$module_root_directory/ajaxterm");
|
||||
untie(*STDIN); open(STDIN, "</dev/null");
|
||||
#untie(*STDOUT); open(STDOUT, ">/dev/null");
|
||||
#untie(*STDERR); open(STDERR, ">/dev/null");
|
||||
untie(*STDOUT); open(STDOUT, ">/tmp/ajaxterm.out");
|
||||
untie(*STDERR); open(STDERR, ">/tmp/ajaxterm.out");
|
||||
exec($python, "ajaxterm.py", "--port", $port, "--log");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
# Wait for it to come up
|
||||
$try = 0;
|
||||
while(1) {
|
||||
my $err;
|
||||
&open_socket("localhost", $port, TEST2, \$err);
|
||||
last if ($err);
|
||||
last if (!$err);
|
||||
$try++;
|
||||
if ($try > 30) {
|
||||
&error(&text('index_estart', 30, $port));
|
||||
@@ -45,8 +56,34 @@ while(1) {
|
||||
close(TEST2);
|
||||
|
||||
# Show the iframe
|
||||
print "<center>\n";
|
||||
print "<iframe src=$gconfig{'webprefix'}/$module_name/proxy.cgi/$port/ ",
|
||||
"width=100% height=90%></iframe>\n";
|
||||
"width=580 height=420 frameborder=0></iframe><br>\n";
|
||||
print "<input type=button onClick='window.open(\"proxy.cgi/$port/\", \"ajaxterm\", \"toolbar=no,menubar=no,scrollbars=no,resizable=yes,width=580,height=420\")' value='$text{'index_popup'}'>\n";
|
||||
print "</center>\n";
|
||||
|
||||
# Fork process that checks for inactivity
|
||||
if (!fork()) {
|
||||
untie(*STDIN); close(STDIN);
|
||||
untie(*STDOUT); close(STDOUT);
|
||||
untie(*STDERR); close(STDERR);
|
||||
$statfile = "$ENV{'WEBMIN_VAR'}/$module_name/$port";
|
||||
while(1) {
|
||||
my @st = stat($statfile);
|
||||
if (@st && time() - $st[9] > $config{'timeout'}) {
|
||||
# No activity
|
||||
last;
|
||||
}
|
||||
if (!kill(0, $pid)) {
|
||||
# Dead
|
||||
last;
|
||||
}
|
||||
sleep(10);
|
||||
}
|
||||
unlink($statfile);
|
||||
kill('KILL', $pid);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
|
||||
|
||||
4
ajaxterm/lang/en
Normal file
4
ajaxterm/lang/en
Normal file
@@ -0,0 +1,4 @@
|
||||
index_title=Text Login
|
||||
index_epython=Ajaxterm requires Python to run, but the $1 command was not found on your system.
|
||||
index_estart=Ajaxterm did not start accepting connections on port $2 after $1 seconds.
|
||||
index_popup=Open in separate window ..
|
||||
@@ -1,2 +1,2 @@
|
||||
desc=AJAX Login
|
||||
desc=Text Login
|
||||
name=ajaxterm
|
||||
|
||||
@@ -45,3 +45,11 @@ while($buf = &read_http_connection($con, 1024)) {
|
||||
}
|
||||
&close_http_connection($con);
|
||||
|
||||
# Touch status file to indicate it is still running
|
||||
$statusdir = $ENV{'WEBMIN_VAR'}."/".$module_name;
|
||||
if (!-d $statusdir) {
|
||||
&make_dir($statusdir, 0700);
|
||||
}
|
||||
&open_tempfile(TOUCH, ">$statusdir/$port", 0, 1);
|
||||
&close_tempfile(TOUCH);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user