ただ、セキュリティ考えれば、サーバに入れて公開してはいけません。
あくまでローカルで、node.jsの動作確認用です。ご注意を!(当たり前ですね)
index.ejs (viewsディレクトリに入れる)
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>kcmd</title>
<script type="text/javascript">
<!--
var cwd;
function check(){
cwd = document.getElementById('cwd');
cwd.value = cwd.value;
return true; // 「OK」時は送信を実行
}
// -->
</script>
</head>
<body>
<form name="kform" method="GET" action="/command" onSubmit="return check()">
作業ディレクトリ:<input type="text" id="cwd" name="kcwd" value="/users"><p>
UNIXコマンドを入力してください: 例 ls -l<p>
$<input type="text" name="kcmdline" size="80">
<input type="submit" id="kcmdbtn" value="コマンド実行"><p>
</form>
<div id="dbs">実行結果</div><p>
<h2 style="color:green;background-color:black">
<% if (message) { %>
<pre><%= message %></pre>
<% } %>
</h2>
</body>
</html>
app.js ( $node app で起動する)
var app = require('express').createServer();
app.set('view options', { layout: false });
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index.ejs', {
locals: {
message: ''
}
});
});
//コマンド実行サブミット処理
app.get("/command", function(req, res){
var cmdstr;
var util = require('util'),
exec = require('child_process').exec,
child;
var kcwd = req.param("kcwd");
var kcmdline = req.param("kcmdline");
console.log('input command is:' + kcmdline);
console.log('at:' + kcwd);
child = exec(kcmdline,
{ encoding: 'utf8',
timeout: 0,
maxBuffer: 200*1024,
killSignal: 'SIGTERM',
cwd: kcwd,
env: null },
function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
cmdstr = stdout;
console.log('stderr: ' + stderr);
res.render('index.ejs', {
locals: {
message: cmdstr
}
});
if (error !== null) {
console.log('exec error: ' + error);
}
}
);
});
app.listen(8124);
console.log('kcmd: Server running at http://127.0.0.1:8124/');
node.js 手軽でツールとしても面白いね!
0 件のコメント:
コメントを投稿