Mercurial Hosting > luan
view http/src/luan/modules/http/Shell_mod.luan @ 693:ca169567ce07
module URIs must now include ".luan"
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 19 Apr 2016 15:54:11 -0600 |
parents | 24b05963ba62 |
children | b620b8e1010f |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local load = Luan.load or error() local try = Luan.try or error() local Io = require "luan:Io.luan" local print = Io.print or error() local Http = require "luan:http/Http.luan" local M = {} local history = {} M.env = {} function M.respond() if Http.request.parameter.clear ~= nil then Http.clear_session() Http.response.send_redirect(Http.request.path) -- reload page return else local cmd = Http.request.parameter.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>",M.env,true) print( line() ) end; catch = function(e) Io.print_to(Io.stderr,e) print(e) end; } end end Io.stdout = Http.response.text_writer() %> <html> <head> <title>Luan Shell</title> <style> body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 2em 5% 0 5%; } pre { font: inherit; } input[type="text"] { font: inherit; padding: .5em .8em; border-radius: 8px; border-style: groove; } input[type="text"]:focus { border-color: #66afe9; outline: none; } input[type="submit"] { color: white; background: #337ab7; border-color: #337ab7; font: inherit; padding: .5em; border-radius: 4px; } input[type="submit"]:hover { background: #236aa7 !important; } </style> </head> <body> <h2>Luan Shell</h2> <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 type="text" name='cmd' size="80" autofocus> <input type="submit" value="run"> <input type="submit" name="clear" value="clear"> </form> </body> </html> <% end Http.per_session(M.respond) return M