view http/src/luan/modules/http/shell.luan @ 495:598123096772

rename service() to respond()
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 15 May 2015 18:10:14 -0600
parents 2b9bc97f0439
children 55f9f74f1e55
line wrap: on
line source

local Luan = require "luan:Luan"
local ipairs = Luan.ipairs
local load = Luan.load
local try = Luan.try
local Io = require "luan:Io"
local print = Io.print
local Debug = require "luan:Debug"
local Http = require "luan:http/Http"
local Html = require "luan:Html"

per_session = true

local history = {}
env = {}

function respond()
	if Http.request.parameters.clear ~= nil then
		history = {}
	else
		local cmd = Http.request.parameters.cmd
		if cmd ~= nil then
			Io.stdout = {}
			function Io.stdout.write(...)
				for v in Luan.values(...) do
					history[#history+1] = v
				end
			end
			print( "% "..cmd )
			try {
				function()
					local line = load(cmd,"<web_shell>",env,true)
					Debug.print_if_something( line() )
				end;
				catch = function(e)
					Io.print_to(Io.stderr,e)
					print(e)
				end;
			}
		end
	end

	Io.stdout = Http.response.text_writer()
%>
<html>
	<head>
		<% Html.simply_html_head() %>
		<title>Luan Shell</title>
	</head>
	<body>
		<div container>
			<h3>Luan Shell</h3>
			<p>This is a command shell.  Enter commands below.</p>
			<pre><%
			for _,v in ipairs(history) do
				Io.stdout.write(v)
			end
			%></pre>
			<form name='form0' method='post'>
				% <input name='cmd' size="80" autofocus>
				<input type="submit" value="run" textcolor="white" bgcolor="#337ab7">
				<input type="submit" name="clear" value="clear" textcolor="white" bgcolor="#337ab7">
			</form>
		</div>
		<% Html.simply_html_body_bottom() %>
	</body>
</html>
<%
end