LSL HTTP server/examples/kellys stupid web status updater: Difference between revisions
Kelly Linden (talk | contribs) |
Kelly Linden (talk | contribs) |
||
| Line 53: | Line 53: | ||
== status.lsl == | == status.lsl == | ||
<lsl> | <lsl> | ||
string header = "My Status:\n"; | |||
string updater_url = "http://mywebsite.com/cgi-bin/post.cgi"; | |||
string url; | |||
integer CHANGED_URL = 1792; | |||
setup() | |||
{ | |||
llSetObjectName("HTTP Server: Status Updates"); | |||
llRequestURL(); | |||
} | |||
debug(key id, string method, string body) | |||
{ | |||
llOwnerSay(method + ": " + body); | |||
list headers = ["x-script-url","x-path-info","x-query-string","x-remote-ip","user-agent"]; | |||
integer i; | |||
for (i=0;i<5;++i) | |||
{ | |||
llOwnerSay(llList2String(headers,i) + ": " + llGetHTTPHeader(id,llList2String(headers,i))); | |||
} | |||
} | |||
default | default | ||
{ | { | ||
state_entry() { setup(); } | |||
on_rez(integer n) { setup(); } | |||
changed(integer c) { if (c & (CHANGED_URL) ) setup(); } | |||
http_request(key id, string method, string body) | |||
{ | |||
// debug(id, method, body); | |||
if (method == URL_REQUEST_GRANTED) | |||
{ | |||
llHTTPRequest(updater_url + "?URL=" + body + "/",[],""); | |||
} | |||
else if (method == URL_REQUEST_DENIED) | |||
{ | |||
llSay(0, "Something went wrong, no url. " + body); | |||
} | |||
else if (method == "GET") | |||
{ | |||
string t = llGetHTTPHeader(id,"x-query-string"); | |||
list l = llParseString2List(t,["?","=","&"],[]); | |||
integer i = llListFindList(l,["Message"]) + 1; | |||
if (i > 0) | |||
{ | |||
llSetText(header + llUnescapeURL(llList2String(l,i)),<1,1,0>,1); | |||
llHTTPResponse(id,200,"OK"); | |||
} | |||
else | |||
{ | |||
llHTTPResponse(id,400,"Must Specify a message!"); | |||
} | |||
} | |||
else | |||
{ | |||
llHTTPResponse(id,405,"Method unsupported"); | |||
} | |||
} | |||
} | } | ||
</lsl> | </lsl> | ||
Revision as of 13:00, 21 July 2009
What
This is a dead stupid, insecure and simple system that will update the floating text above a prim according to what is entered in the web form. Uses html forms, python and LSL.
index.html
A simple webform that sends the input to our cgi. <html4strict><html>
<body>
<form ACTION="cgi-bin/post.cgi" METHOD="GET"> <textarea name="Message" rows="5" cols="40" onfocus="this.value=; this.onfocus=null;">Enter your status update here.</textarea>
<INPUT TYPE="submit" title="FOO"> </form>
<body>
</html></html4strict>
post.cgi
A simple CGI that takes GETs and looks for two parameters:
- URL: if found will write the value to a file
- Message: if found will read from the file and send the contents to the url in the file
Bugs:
- Entering no text in the form will cause the cgi to error.
<python>
- !/usr/bin/python
import cgi, urllib2, urllib import cgitb cgitb.enable()
file_name = "my_url"
form = cgi.FieldStorage() if (form.has_key("Message")):
print "Status: 302 Moved"
print "Location: http://www.myurl.com/path/to/form"
print
f = open(file_name,'r')
base_url = f.read()
message = form["Message"].value
args = "?Message=%s" % urllib.quote(message)
response = urllib2.urlopen(base_url + args)
if (form.has_key("URL")):
print form["URL"].value
f = open(file_name,'w')
f.write(form["URL"].value)
print "Content-Type: text/html"
print
print "OK"
</python>
status.lsl
<lsl> string header = "My Status:\n"; string updater_url = "http://mywebsite.com/cgi-bin/post.cgi"; string url; integer CHANGED_URL = 1792;
setup() {
llSetObjectName("HTTP Server: Status Updates");
llRequestURL();
}
debug(key id, string method, string body) {
llOwnerSay(method + ": " + body);
list headers = ["x-script-url","x-path-info","x-query-string","x-remote-ip","user-agent"];
integer i;
for (i=0;i<5;++i)
{
llOwnerSay(llList2String(headers,i) + ": " + llGetHTTPHeader(id,llList2String(headers,i)));
}
}
default {
state_entry() { setup(); }
on_rez(integer n) { setup(); }
changed(integer c) { if (c & (CHANGED_URL) ) setup(); }
http_request(key id, string method, string body)
{
// debug(id, method, body);
if (method == URL_REQUEST_GRANTED)
{
llHTTPRequest(updater_url + "?URL=" + body + "/",[],"");
}
else if (method == URL_REQUEST_DENIED)
{
llSay(0, "Something went wrong, no url. " + body);
}
else if (method == "GET")
{
string t = llGetHTTPHeader(id,"x-query-string");
list l = llParseString2List(t,["?","=","&"],[]);
integer i = llListFindList(l,["Message"]) + 1;
if (i > 0)
{
llSetText(header + llUnescapeURL(llList2String(l,i)),<1,1,0>,1);
llHTTPResponse(id,200,"OK");
}
else
{
llHTTPResponse(id,400,"Must Specify a message!");
}
}
else
{
llHTTPResponse(id,405,"Method unsupported");
}
}
} </lsl>