Genshi example
From OpenSimulator
(Difference between revisions)
												
			 (Replacing page with '<source lang=php> <?php function foo($bar) { echo "yes, genshi works!"; } ?> </source>')  | 
			|||
| Line 1: | Line 1: | ||
| − | <source lang=php>  | + | <source lang="lsl">  | 
| − | <?php  | + | //*********************  | 
| − | + | //****from notecard****  | |
| − | + | //*********************  | |
| + | integer intchannel;  | ||
| + | integer paramchannel;  | ||
| + | integer scanrate;  | ||
| + | integer scanrange;  | ||
| + | integer salt;  | ||
| + | integer certificate;  | ||
| + | float logrange;   | ||
| + | float lograngewarning;   | ||
| + | string url;  | ||
| + | string sitetitle;  | ||
| + | vector textcolor;  | ||
| + | //*********************  | ||
| + | |||
| + | |||
| + | //*********************  | ||
| + | //*****avatar vars*****  | ||
| + | //*********************  | ||
| + | key av_key;  | ||
| + | string username;   | ||
| + | string av_name;   | ||
| + | string av_surname;   | ||
| + | string av_created;  | ||
| + | string av_payinfo;  | ||
| + | //*********************  | ||
| + | |||
| + | |||
| + | //*********************  | ||
| + | //******menu vars******  | ||
| + | //*********************  | ||
| + | list menuAdmin = ["Settings", "My Account", "Website","Logoff"];  | ||
| + | list menuRegistered = ["My Account", "Website", "Logoff"];  | ||
| + | list menuInactive = ["Website", "About", "Logoff"];  | ||
| + | list menuNewUser = ["Register", "Website", "About","Logoff"];  | ||
| + | //*********************  | ||
| + | |||
| + | |||
| + | //*********************  | ||
| + | //*****http id's*******  | ||
| + | //*********************  | ||
| + | string item_request_id;  | ||
| + | string authenticate_request_id;  | ||
| + | string register_request_id;  | ||
| + | string logoff_request_id;  | ||
| + | string x_request_id;  | ||
| + | string account_request_id;  | ||
| + | //*********************  | ||
| + | |||
| + | |||
| + | //*********************  | ||
| + | //*****dataserver******  | ||
| + | //*********************  | ||
| + | key settingsDS;   | ||
| + | key payinfoDS;   | ||
| + | key bornDS;   | ||
| + | //*********************  | ||
| + | |||
| + | |||
| + | //*********************  | ||
| + | //******handlers*******  | ||
| + | //*********************  | ||
| + | string settingsFileName="jSLplus Settings";  | ||
| + | integer settingsEntry;  | ||
| + | integer defaultSalt=666;  | ||
| + | integer online=-2;  | ||
| + | string settingsNotify;  | ||
| + | string sid;  | ||
| + | string menu;  | ||
| + | list objectSpecs;  | ||
| + | string secretWord;  | ||
| + | string status;    | ||
| + | string itemName;  | ||
| + | //*********************  | ||
| + | //Settings Notecard stuff  | ||
| + | init() {   | ||
| + |     if (llGetInventoryType(settingsFileName) == INVENTORY_NOTECARD) {  | ||
| + |     online=-1;      | ||
| + |     readSettings();      | ||
| + |     }  | ||
| + |     else {  | ||
| + |     llOwnerSay("===ERROR===\nNo settings-notecard found!");  | ||
| + |     }  | ||
| + | }  | ||
| + | //Settings Notecard stuff  | ||
| + | readSettings() {  | ||
| + | llOwnerSay("Initializing settings. Please wait...");  | ||
| + | settingsEntry = 0;  | ||
| + | settingsNotify="===SETUP SETTINGS===";  | ||
| + | settingsDS = llGetNotecardLine(settingsFileName, settingsEntry) ;  | ||
| + | }  | ||
| + | |||
| + | checkSettings(string entry) {  | ||
| + |     if((entry != "") && (llGetSubString(entry, 0, 1) != "//")) {  | ||
| + |     list Details = llParseString2List(entry, ["="], []);  | ||
| + |     string keyname = llList2String(Details, 0);  | ||
| + |     string contents = llList2String(Details, 1);  | ||
| + |         if ((keyname != "") && (contents != "")) {  | ||
| + |             if(keyname=="url") {url=contents;settingsNotify+="\nURL: "+contents;}  | ||
| + |             if(keyname=="ssl") {if((integer)contents==1) {url="https://"+url;settingsNotify+="\nSSL: enabled";}  | ||
| + |             else if((integer)contents==0){url="http://"+url;settingsNotify+="\nSSL: disabled (NOT recommended)";}   | ||
| + |             }    | ||
| + |             else if(keyname=="certificate") {  | ||
| + |             certificate=(integer)contents;       | ||
| + |                 if(certificate==0) {settingsNotify+="\nCertificate: not required";}  | ||
| + |                 else if(certificate==1) {settingsNotify+="\nCertificate: required";}  | ||
| + |             }                              | ||
| + |             else if(keyname=="sitetitle") {sitetitle=contents;settingsNotify+="\nSite-title: "+contents;}  | ||
| + |             else if(keyname=="intchannel") {intchannel=(integer)contents;settingsNotify+="\nInternal channel: "+contents;}  | ||
| + |             else if(keyname=="paramchannel") {paramchannel=(integer)contents;settingsNotify+="\nParameter channel: "+contents;}              | ||
| + |             else if(keyname=="salt") {salt=(integer)contents;settingsNotify+="\nHash-Salt: "+contents;}         | ||
| + |             else if(keyname=="scanrate") {scanrate=(integer)contents;settingsNotify+="\nIdle Scan: "+contents+" seconds per scan";}     | ||
| + |             else if(keyname=="scanrange") {scanrange=(integer)contents;settingsNotify+="\nIdle Scanrange: "+contents+" meters";}    | ||
| + |             else if(keyname=="logrange") {logrange=(float)contents;settingsNotify+="\nLogs off: "+contents+" meters from console";}                         | ||
| + |             else if(keyname=="lograngewarning") {lograngewarning=(float)contents;settingsNotify+="\nLogoff warning: "+contents+" meters from console";}     | ||
| + |             else if(keyname=="textcolor") {textcolor=string2vector(contents);settingsNotify+="\nTextcolor: "+contents;}             | ||
| + |         }  | ||
| + |     }  | ||
| + | settingsEntry+=1;      | ||
| + | settingsDS = llGetNotecardLine(settingsFileName, settingsEntry) ;  | ||
| + | }  | ||
| + | |||
| + | vector string2vector(string s) {  | ||
| + | list foo = llCSV2List(s);  | ||
| + | vector v;  | ||
| + | v.x = llList2Float(foo,0);  | ||
| + | v.y = llList2Float(foo,1);  | ||
| + | v.z = llList2Float(foo,2);  | ||
| + | return v;  | ||
| + | }  | ||
| + | |||
| + | //Generates secretWord, and a MD5-hash from secretWord and Salt  | ||
| + | string generatePW(float uniqueness) {  | ||
| + | list primewords = ["alpha","beta","gamma","zulu","bravo","cappa","tango"];  | ||
| + | string randomWord = llList2String(primewords,(integer)llFrand(llGetListLength(primewords)));   | ||
| + | string randomNumber = (string)llRound(llFrand(uniqueness));   | ||
| + | secretWord = randomWord+randomNumber;     | ||
| + | return llMD5String(secretWord,salt);    | ||
| + | }  | ||
| + | |||
| + | returnDialog(string returnMenu) {  | ||
| + |     if(returnMenu == "MENU_UNREGISTERED") {  | ||
| + |     llDialog( av_key, "Select an option...", menuNewUser, intchannel);     | ||
| + |     }  | ||
| + |     else if(returnMenu == "MENU_PROFILE_ACTIVE") {  | ||
| + |     llDialog( av_key, "Select an option...", menuRegistered, intchannel);   | ||
| + |     }      | ||
| + |     else if(returnMenu == "MENU_PROFILE_INACTIVE") {  | ||
| + |     llDialog( av_key, "Select an option...", menuInactive, intchannel);   | ||
| + |     }              | ||
| + |     else if(returnMenu == "MENU_ADMIN") {  | ||
| + |     llDialog( av_key, "Select an option...", menuAdmin, intchannel);   | ||
| + |     }   | ||
| + | }  | ||
| + | |||
| + | httpRequest(string function,list params) {  | ||
| + |     if(function=="login") {  | ||
| + |     authenticate_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=login",  | ||
| + |     [HTTP_METHOD,"POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],  | ||
| + |     "&k="+llList2String(params,0)+"&n="+llList2String(params,1)+"&s="+llList2String(params,2)+"&p="+llList2String(params,3)+"&c="  | ||
| + |     +llList2String(params,4)+"&h="+generatePW(1000)+"&o="+llList2String(params,5)+"&format=raw");  | ||
| + |     }   | ||
| + |     if(function =="logoff") {  | ||
| + |     logoff_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=logoff",   | ||
| + |     [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],  | ||
| + |     "&sid="+llList2String(params,0)+"&format=raw");    | ||
| + |     }       | ||
| + |     if(function=="register") {  | ||
| + |     register_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=register",  | ||
| + |     [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],  | ||
| + |     "&h="+llList2String(params,0)+"&e="+llList2String(params,1)+"&sid="+sid+"&format=raw");             | ||
| + |     }  | ||
| + |     if(function=="additem") {  | ||
| + |     item_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=additem",  | ||
| + |     [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"],  | ||
| + |     "&k="+llList2String(params,0)+"&n="+llList2String(params,1)+"&t="+llList2String(params,2)+"&p="+llList2String(params,3)+llList2String(params,4)+  | ||
| + |     llList2String(params,5)+"&sid="+sid+"&format=raw");   | ||
| + |     }    | ||
| + | }  | ||
| + | |||
| + | login(key id) {  | ||
| + | av_key = id;   | ||
| + | username = llKey2Name(av_key);  | ||
| + | av_surname = llGetSubString(username, llSubStringIndex(username, " ") + 1, -1);  | ||
| + | av_name = llGetSubString(username, 0, llSubStringIndex(username, " "));  | ||
| + | llSetText("Controller: "+username, textcolor, 1);  | ||
| + | llInstantMessage(av_key, "Contacting server. Please wait...");   | ||
| + | bornDS = llRequestAgentData(av_key, DATA_BORN);        | ||
| + | payinfoDS = llRequestAgentData(av_key, DATA_PAYINFO);       | ||
| + | }  | ||
| + | |||
| + | default {  | ||
| + |     on_rez(integer startparam){  | ||
| + |     llResetScript();     | ||
| + |     }  | ||
| + | |||
| + |     state_entry() {  | ||
| + |         if(online==-2) {  | ||
| + |         init();   | ||
| + |         }  | ||
| + |     llAllowInventoryDrop(FALSE);   | ||
| + |         if(online==TRUE || online==FALSE){  | ||
| + |         llSetText("Terminal online...",textcolor,1);      | ||
| + |         }  | ||
| + |         else {  | ||
| + |         llSetText("Terminal offline...",<0,0,0>,1);       | ||
| + |         }  | ||
| + |     }  | ||
| + | |||
| + |     touch_start( integer num ) {  | ||
| + | |||
| + |         if(llDetectedKey(0)!=av_key) {  | ||
| + |         return;  | ||
| + |         }  | ||
| + |         else {  | ||
| + |             if(online==-1) {  | ||
| + |             init();    | ||
| + |             }     | ||
| + |             else {  | ||
| + |             login(llDetectedKey(0));      | ||
| + |             }  | ||
| + |         }  | ||
| + |     }   | ||
| + | |||
| + |     dataserver(key query_id, string data) {   | ||
| + |         if(query_id == bornDS) {      | ||
| + |         av_created=data;  | ||
| + |         }  | ||
| + |         else if (query_id == payinfoDS) {  | ||
| + |         av_payinfo=data;  | ||
| + |         httpRequest("login",[av_key,av_name,av_surname,av_payinfo,av_created,(string)llGetLinkKey(2)]);   | ||
| + |         }  | ||
| + |         else if (query_id == settingsDS) {  | ||
| + |             if (data != EOF) {  | ||
| + |             checkSettings(data) ;  | ||
| + |             return;  | ||
| + |             }  | ||
| + |             else {  | ||
| + |             llOwnerSay("Settings are loaded. Checking content...");  | ||
| + |                 if(salt==defaultSalt) {  | ||
| + |                 llOwnerSay("You didn't setup a unique hash-salt. Please correct the problem...");  | ||
| + |                 state restart_default;   | ||
| + |                 }  | ||
| + |                 else {  | ||
| + |                 llOwnerSay(settingsNotify+"\nSettings ok...\n");  | ||
| + |                 settingsNotify="";  | ||
| + |                 login(llGetOwner());     | ||
| + |                 }  | ||
| + |             }  | ||
| + |         }          | ||
| + |     }  | ||
| + | |||
| + |     //RESPONSE FROM INITIAL HTTP-REQUEST  | ||
| + |     http_response(key request_id, integer httpStatus, list metadata, string body) {  | ||
| + |         if (authenticate_request_id == request_id) {   | ||
| + |         body = llStringTrim(body, STRING_TRIM);   | ||
| + |         list parameters;   | ||
| + |         parameters = llCSV2List(body);  | ||
| + |         status = llList2String(parameters,0);   | ||
| + |         sid = llList2String(parameters,1);  | ||
| + |         string visited = llList2String(parameters,2);  | ||
| + |         //Send link-message to feedback-module(3)  | ||
| + |         llMessageLinked(3,0,status+","+username+","+visited+","+secretWord,av_key);  | ||
| + |         }  | ||
| + |     }  | ||
| + | |||
| + |     //Receives link-messages from feedback-module(3)  | ||
| + |     link_message(integer sender_num, integer lineResponse, string str, key id) {   | ||
| + |         if (sender_num==3) {  | ||
| + |         list input = llCSV2List(str);   | ||
| + |         menu = llList2String(input,0);   | ||
| + |             //Positive message, proceed to logged-in state    | ||
| + |             if(lineResponse==TRUE) {    | ||
| + |             state inuse;   | ||
| + |             }  | ||
| + |             //Reboot when an error-message comes back...  | ||
| + |             else {  | ||
| + |             //Critical error(lineResponse=-1) or non-critical error(lineResponse=0/FALSE)  | ||
| + |             online=lineResponse;  | ||
| + |             state restart_default;     | ||
| + |             }  | ||
| + |         }  | ||
| + |     }  | ||
| + | |||
| + |     changed( integer change ) {   | ||
| + |         if ( change == CHANGED_INVENTORY ) {  | ||
| + |         integer itemCount = llGetInventoryNumber(INVENTORY_ALL);   | ||
| + |         integer i=0;   | ||
| + |             if(itemCount>3) {   | ||
| + |                 for(i=0;i<itemCount;i++) {  | ||
| + |                 string itemName = llGetInventoryName(INVENTORY_ALL, i);     | ||
| + |                     if (itemName != "About" && itemName!="jSLplus Interface" && itemName!="jSLplus Visitor-Tracker" && itemName!="jSLplus Settings") {  | ||
| + |                     llSay(0,"You must be logged in, before you may upload items to the ODS!");  | ||
| + |                     llRemoveInventory(itemName);  | ||
| + |                     }  | ||
| + |                 }  | ||
| + |             }  | ||
| + |             else {  | ||
| + |             llOwnerSay("Settings have been changed. Please wait while the terminal reboots...");      | ||
| + |             online=-2;  | ||
| + |             state restart_default;  | ||
| + |             }  | ||
| + |         }  | ||
| + |     }      | ||
| + | }  | ||
| + | |||
| + | |||
| + | state restart_default {  | ||
| + |     state_entry() {  | ||
| + |     state default;  | ||
| + |     }  | ||
| + | }  | ||
| + | |||
| + | |||
| + | state inuse {    | ||
| + |     state_entry() {   | ||
| + |     llSensorRepeat( "", "", AGENT, scanrange, TWO_PI, scanrate);   | ||
| + |     llListen(intchannel, "", av_key, "" );    | ||
| + |     llListen(paramchannel,"",av_key,"");  | ||
| + |         if(menu=="MENU_PROFILE_ACTIVE" || status=="MENU_ADMIN") {  | ||
| + |         llAllowInventoryDrop(TRUE);  | ||
| + |         string folder = llGetObjectName();  | ||
| + |         }  | ||
| + |     returnDialog(menu);      | ||
| + |     }  | ||
| + | |||
| + |     touch_start( integer number_detected ) {  | ||
| + |     integer i;  | ||
| + |         for( i = 0; i < number_detected; i++ ) {  | ||
| + |             if (llDetectedKey(i) == av_key) {  | ||
| + |             returnDialog(menu);       | ||
| + |             }   | ||
| + |             else {   | ||
| + |             llSay(0,username+" is currently logged into this terminal. Please wait until this user logged off...");      | ||
| + |             }                   | ||
| + |         }  | ||
| + | |||
| + | |||
| + |     }  | ||
| + | |||
| + |     sensor( integer number_detected ) {     | ||
| + |     integer i;   | ||
| + |         for( i = 0; i < number_detected; i++ ) {  | ||
| + |         key detected_key = llDetectedKey(i);       | ||
| + |             if(av_key==detected_key) {  | ||
| + |             vector agentPos = llDetectedPos(i);      | ||
| + |             vector terminalPos = llGetPos();  | ||
| + |             float distance = llVecDist(agentPos, terminalPos);  | ||
| + |                 if (distance > logrange) {  | ||
| + |                 llInstantMessage(av_key, "===NOTICE===\nYou are out of range. logging off now...");    | ||
| + |                 httpRequest("logoff",[]);  | ||
| + |                 llSensorRemove();  | ||
| + |                 }  | ||
| + |                 else if(distance > lograngewarning){  | ||
| + |                 llInstantMessage(av_key, "===NOTICE===\nYou are "+(string)(logrange-distance)+" meters from being logged out.");   | ||
| + |                 }  | ||
| + |             }  | ||
| + |         }  | ||
| + |     }      | ||
| + | |||
| + |     listen( integer chan, string name, key id, string msg ) {  | ||
| + |         if(id == av_key) {  | ||
| + |         msg = llStringTrim(msg, STRING_TRIM);  | ||
| + |         list paramList;  | ||
| + |         string command;  | ||
| + |             if(msg!="") {  | ||
| + |             paramList = llCSV2List(msg);   | ||
| + |             command = llList2String(paramList,0);    | ||
| + |             }                  | ||
| + |             if (command == "Website") {  | ||
| + |             llLoadURL(av_key, sitetitle, url);   | ||
| + |             returnDialog(menu);   | ||
| + |             }      | ||
| + |             else if (command == "About") {  | ||
| + |             llGiveInventory(av_key,"About");  | ||
| + |             returnDialog(menu);   | ||
| + |             }   | ||
| + |             else if (command == "Request") {  | ||
| + |             x_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=request&sid="+sid+  | ||
| + |             "&format=raw", [HTTP_METHOD, "GET"],"");    | ||
| + |             }   | ||
| + |             else if (command == "Logoff") {  | ||
| + |             llSetText(username+" logs out...",textcolor,1);     | ||
| + |             httpRequest("logoff",[sid]);    | ||
| + |             llInstantMessage(av_key,"Preparing to log off...");   | ||
| + |             }     | ||
| + | |||
| + |             if(menu=="MENU_UNREGISTERED") {  | ||
| + |                 if (command == "Register") {  | ||
| + |                 llInstantMessage(av_key,"===NOTICE===\nYou must provide a valid emailaddress.\nType: /"+(string)paramchannel+  | ||
| + |                 " registermail,myemail@address.org' in order to finish the registration process.");   | ||
| + |                 }    | ||
| + |                 if (command == "registermail") {  | ||
| + |                 httpRequest("register",[generatePW(1000),llStringTrim(llList2String(paramList,1), STRING_TRIM)]);  | ||
| + |                 }   | ||
| + |             }  | ||
| + |             else if(menu=="MENU_PROFILE_ACTIVE") {    | ||
| + |                 if (command == "My Account") {  | ||
| + |                 string myAccount = "===MY ACCOUNT===\n";  | ||
| + |                 myAccount += "Avatar-key: "+(string)av_key;  | ||
| + |                 llInstantMessage(av_key,myAccount);  | ||
| + |                 returnDialog(menu);   | ||
| + |                 }   | ||
| + |             }                     | ||
| + |             else if(menu=="MENU_ADMIN") {  | ||
| + |                 if (command == "Settings") {  | ||
| + |                 string terminalSettings = "===SETTINGS===\n";      | ||
| + |                 terminalSettings += "terminal-key: "+(string)llGetKey()+"\n";  | ||
| + |                 terminalSettings += "heap: "+(string)llGetFreeMemory() + " bytes\n";  | ||
| + |                 llInstantMessage(av_key, terminalSettings);     | ||
| + |                 llMessageLinked(2, 0, "settings",av_key);   | ||
| + |                 returnDialog(menu);    | ||
| + |                 }    | ||
| + |                 else if (command == "My Account") {  | ||
| + |                 string myAccount = "===MY ACCOUNT===\n";  | ||
| + |                 account_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=getaccount&sid="+sid+  | ||
| + |                 "&format=raw", [HTTP_METHOD, "GET"],"");      | ||
| + |                 myAccount += "Avatar-key: "+(string)av_key;  | ||
| + |                 llInstantMessage(av_key,myAccount);  | ||
| + |                 returnDialog(menu);   | ||
| + |                 }   | ||
| + |             }    | ||
| + |         }  | ||
| + |     }  | ||
| + | |||
| + |     http_response(key request_id, integer httpStatus, list metadata, string body) {  | ||
| + |     list parameters;  | ||
| + |     body = llStringTrim(body, STRING_TRIM);    | ||
| + |     parameters = llCSV2List(body);  | ||
| + |     status = llList2String(parameters,0);   | ||
| + |         if (request_id == register_request_id) {   | ||
| + |         llMessageLinked(3,0,status+","+username+","+secretWord,av_key);  | ||
| + |         }  | ||
| + |         if (request_id == item_request_id) {  | ||
| + |         llMessageLinked(3,0,status+","+username,av_key);    | ||
| + |         }  | ||
| + | |||
| + |         if (request_id == logoff_request_id) {  | ||
| + |         llMessageLinked(3,0,status+","+username,av_key);  | ||
| + |         }  | ||
| + | |||
| + |         if (request_id == x_request_id) {   | ||
| + |         llMessageLinked(3,0,status+","+username,av_key);    | ||
| + |          }   | ||
| + | |||
| + |         if (request_id == account_request_id) {   | ||
| + |         llMessageLinked(3,0,status+","+username,av_key);    | ||
| + |         }   | ||
| + |     }  | ||
| + | |||
| + |     link_message(integer sender_num, integer lineResponse, string str, key id) {   | ||
| + |     online = lineResponse;   | ||
| + |         if(lineResponse==TRUE) {  | ||
| + |         list input = llCSV2List(str);   | ||
| + |         menu = llList2String(input,0);    | ||
| + |         returnDialog(menu);  | ||
| + |         }  | ||
| + |         else {  | ||
| + |         state default;    | ||
| + |         }  | ||
| + |     }   | ||
| + | |||
| + |     changed( integer change ) {  | ||
| + |         if (change & CHANGED_ALLOWED_DROP) {  | ||
| + |         llOwnerSay("The inventory has changed as a result of a user without mod permissions dropping an item on the prim"+  | ||
| + |         "and it being allowed by the script.");  | ||
| + |         }  | ||
| + | |||
| + |         if ( change == CHANGED_INVENTORY ) {  | ||
| + |         integer itemCount = llGetInventoryNumber(INVENTORY_ALL);     | ||
| + |             if(itemCount>3) {  | ||
| + |             llSay(0,"A new item was submitted!");    | ||
| + |             integer i=0;  | ||
| + |             string newItem;  | ||
| + |             for(i=0;i<itemCount;i++) {  | ||
| + |             string itemName = llGetInventoryName(INVENTORY_ALL, i);     | ||
| + |                 if (itemName != "About" && itemName!="jSLplus Interface" && itemName!="jSLplus Visitor-Tracker" && itemName!="jSLplus Settings") {  | ||
| + |                 newItem = itemName;  | ||
| + |                 }  | ||
| + |             }  | ||
| + |             key itemKey = llGetInventoryKey(newItem);              | ||
| + |             key itemCreatorKey = llGetInventoryCreator(newItem);  | ||
| + |                 if(av_key != itemCreatorKey) {  | ||
| + |                 llSay(0,"Item denied! You must be the creator of the submitted item!");  | ||
| + |                 llRemoveInventory(newItem);  | ||
| + |                 return;     | ||
| + |                 }  | ||
| + |                 else {  | ||
| + |                     if (llStringLength(newItem) <=30) {  | ||
| + |                     llSay(0,"Item accepted. You have been recognised as the creator of this item...");   | ||
| + |                     }  | ||
| + |                     else {  | ||
| + |                     llSay(0,"Item denied! Please shorten the objectname to a maximum of 30 characters...");      | ||
| + |                     llRemoveInventory(newItem);  | ||
| + |                     return;   | ||
| + |                     }  | ||
| + |                 }  | ||
| + |             integer itemType = llGetInventoryType(newItem);  | ||
| + |             integer permCopy; integer permMod; integer permTransfer;  | ||
| + |             string itemSpecs = "\n===Item specifications===\n";  | ||
| + |             itemSpecs+="item-Key: "+(string)itemKey+"\n";  | ||
| + |             itemSpecs+="item-Name: "+newItem+"\n";  | ||
| + |             itemSpecs+="=Permissions=\n";  | ||
| + |                 if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_COPY) {permCopy=1;itemSpecs+="Copy:Yes\n";}  | ||
| + |                 else {permCopy=0;itemSpecs+="Copy:No\n";}  | ||
| + |                 if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_MODIFY) {permMod=1;itemSpecs+="Modify:Yes\n";}  | ||
| + |                 else {permMod=0;itemSpecs+="Modify:No\n";}  | ||
| + |                 if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_TRANSFER) {permTransfer=1;itemSpecs+="Transfer:Yes\n";}  | ||
| + |                 else {permTransfer=0;itemSpecs+="Transfer:No\n";}  | ||
| + |             llSay(0,itemSpecs);         | ||
| + |             llGiveInventory(llGetLinkKey(2), newItem);  | ||
| + |             llRemoveInventory(newItem);  | ||
| + |             llSay(0,"Sending request to ODS-Site...");  | ||
| + |             newItem = llEscapeURL(newItem);  | ||
| + |             httpRequest("additem",[itemKey,newItem,itemType,permCopy,permMod,permTransfer]);  | ||
| + |             }  | ||
| + |         }  | ||
| + |     }            | ||
}  | }  | ||
| − | |||
</source>  | </source>  | ||
Revision as of 06:07, 15 March 2008
//********************* //****from notecard**** //********************* integer intchannel; integer paramchannel; integer scanrate; integer scanrange; integer salt; integer certificate; float logrange; float lograngewarning; string url; string sitetitle; vector textcolor; //********************* //********************* //*****avatar vars***** //********************* key av_key; string username; string av_name; string av_surname; string av_created; string av_payinfo; //********************* //********************* //******menu vars****** //********************* list menuAdmin = ["Settings", "My Account", "Website","Logoff"]; list menuRegistered = ["My Account", "Website", "Logoff"]; list menuInactive = ["Website", "About", "Logoff"]; list menuNewUser = ["Register", "Website", "About","Logoff"]; //********************* //********************* //*****http id's******* //********************* string item_request_id; string authenticate_request_id; string register_request_id; string logoff_request_id; string x_request_id; string account_request_id; //********************* //********************* //*****dataserver****** //********************* key settingsDS; key payinfoDS; key bornDS; //********************* //********************* //******handlers******* //********************* string settingsFileName="jSLplus Settings"; integer settingsEntry; integer defaultSalt=666; integer online=-2; string settingsNotify; string sid; string menu; list objectSpecs; string secretWord; string status; string itemName; //********************* //Settings Notecard stuff init() { if (llGetInventoryType(settingsFileName) == INVENTORY_NOTECARD) { online=-1; readSettings(); } else { llOwnerSay("===ERROR===\nNo settings-notecard found!"); } } //Settings Notecard stuff readSettings() { llOwnerSay("Initializing settings. Please wait..."); settingsEntry = 0; settingsNotify="===SETUP SETTINGS==="; settingsDS = llGetNotecardLine(settingsFileName, settingsEntry) ; } checkSettings(string entry) { if((entry != "") && (llGetSubString(entry, 0, 1) != "//")) { list Details = llParseString2List(entry, ["="], []); string keyname = llList2String(Details, 0); string contents = llList2String(Details, 1); if ((keyname != "") && (contents != "")) { if(keyname=="url") {url=contents;settingsNotify+="\nURL: "+contents;} if(keyname=="ssl") {if((integer)contents==1) {url="https://"+url;settingsNotify+="\nSSL: enabled";} else if((integer)contents==0){url="http://"+url;settingsNotify+="\nSSL: disabled (NOT recommended)";} } else if(keyname=="certificate") { certificate=(integer)contents; if(certificate==0) {settingsNotify+="\nCertificate: not required";} else if(certificate==1) {settingsNotify+="\nCertificate: required";} } else if(keyname=="sitetitle") {sitetitle=contents;settingsNotify+="\nSite-title: "+contents;} else if(keyname=="intchannel") {intchannel=(integer)contents;settingsNotify+="\nInternal channel: "+contents;} else if(keyname=="paramchannel") {paramchannel=(integer)contents;settingsNotify+="\nParameter channel: "+contents;} else if(keyname=="salt") {salt=(integer)contents;settingsNotify+="\nHash-Salt: "+contents;} else if(keyname=="scanrate") {scanrate=(integer)contents;settingsNotify+="\nIdle Scan: "+contents+" seconds per scan";} else if(keyname=="scanrange") {scanrange=(integer)contents;settingsNotify+="\nIdle Scanrange: "+contents+" meters";} else if(keyname=="logrange") {logrange=(float)contents;settingsNotify+="\nLogs off: "+contents+" meters from console";} else if(keyname=="lograngewarning") {lograngewarning=(float)contents;settingsNotify+="\nLogoff warning: "+contents+" meters from console";} else if(keyname=="textcolor") {textcolor=string2vector(contents);settingsNotify+="\nTextcolor: "+contents;} } } settingsEntry+=1; settingsDS = llGetNotecardLine(settingsFileName, settingsEntry) ; } vector string2vector(string s) { list foo = llCSV2List(s); vector v; v.x = llList2Float(foo,0); v.y = llList2Float(foo,1); v.z = llList2Float(foo,2); return v; } //Generates secretWord, and a MD5-hash from secretWord and Salt string generatePW(float uniqueness) { list primewords = ["alpha","beta","gamma","zulu","bravo","cappa","tango"]; string randomWord = llList2String(primewords,(integer)llFrand(llGetListLength(primewords))); string randomNumber = (string)llRound(llFrand(uniqueness)); secretWord = randomWord+randomNumber; return llMD5String(secretWord,salt); } returnDialog(string returnMenu) { if(returnMenu == "MENU_UNREGISTERED") { llDialog( av_key, "Select an option...", menuNewUser, intchannel); } else if(returnMenu == "MENU_PROFILE_ACTIVE") { llDialog( av_key, "Select an option...", menuRegistered, intchannel); } else if(returnMenu == "MENU_PROFILE_INACTIVE") { llDialog( av_key, "Select an option...", menuInactive, intchannel); } else if(returnMenu == "MENU_ADMIN") { llDialog( av_key, "Select an option...", menuAdmin, intchannel); } } httpRequest(string function,list params) { if(function=="login") { authenticate_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=login", [HTTP_METHOD,"POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"], "&k="+llList2String(params,0)+"&n="+llList2String(params,1)+"&s="+llList2String(params,2)+"&p="+llList2String(params,3)+"&c=" +llList2String(params,4)+"&h="+generatePW(1000)+"&o="+llList2String(params,5)+"&format=raw"); } if(function =="logoff") { logoff_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=logoff", [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"], "&sid="+llList2String(params,0)+"&format=raw"); } if(function=="register") { register_request_id = llHTTPRequest(url+"index.php?option=com_jslplus&view=interface&controller=interface&task=register", [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"], "&h="+llList2String(params,0)+"&e="+llList2String(params,1)+"&sid="+sid+"&format=raw"); } if(function=="additem") { item_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=additem", [HTTP_METHOD, "POST",HTTP_VERIFY_CERT,certificate,HTTP_MIMETYPE,"application/x-www-form-urlencoded"], "&k="+llList2String(params,0)+"&n="+llList2String(params,1)+"&t="+llList2String(params,2)+"&p="+llList2String(params,3)+llList2String(params,4)+ llList2String(params,5)+"&sid="+sid+"&format=raw"); } } login(key id) { av_key = id; username = llKey2Name(av_key); av_surname = llGetSubString(username, llSubStringIndex(username, " ") + 1, -1); av_name = llGetSubString(username, 0, llSubStringIndex(username, " ")); llSetText("Controller: "+username, textcolor, 1); llInstantMessage(av_key, "Contacting server. Please wait..."); bornDS = llRequestAgentData(av_key, DATA_BORN); payinfoDS = llRequestAgentData(av_key, DATA_PAYINFO); } default { on_rez(integer startparam){ llResetScript(); } state_entry() { if(online==-2) { init(); } llAllowInventoryDrop(FALSE); if(online==TRUE || online==FALSE){ llSetText("Terminal online...",textcolor,1); } else { llSetText("Terminal offline...",<0,0,0>,1); } } touch_start( integer num ) { if(llDetectedKey(0)!=av_key) { return; } else { if(online==-1) { init(); } else { login(llDetectedKey(0)); } } } dataserver(key query_id, string data) { if(query_id == bornDS) { av_created=data; } else if (query_id == payinfoDS) { av_payinfo=data; httpRequest("login",[av_key,av_name,av_surname,av_payinfo,av_created,(string)llGetLinkKey(2)]); } else if (query_id == settingsDS) { if (data != EOF) { checkSettings(data) ; return; } else { llOwnerSay("Settings are loaded. Checking content..."); if(salt==defaultSalt) { llOwnerSay("You didn't setup a unique hash-salt. Please correct the problem..."); state restart_default; } else { llOwnerSay(settingsNotify+"\nSettings ok...\n"); settingsNotify=""; login(llGetOwner()); } } } } //RESPONSE FROM INITIAL HTTP-REQUEST http_response(key request_id, integer httpStatus, list metadata, string body) { if (authenticate_request_id == request_id) { body = llStringTrim(body, STRING_TRIM); list parameters; parameters = llCSV2List(body); status = llList2String(parameters,0); sid = llList2String(parameters,1); string visited = llList2String(parameters,2); //Send link-message to feedback-module(3) llMessageLinked(3,0,status+","+username+","+visited+","+secretWord,av_key); } } //Receives link-messages from feedback-module(3) link_message(integer sender_num, integer lineResponse, string str, key id) { if (sender_num==3) { list input = llCSV2List(str); menu = llList2String(input,0); //Positive message, proceed to logged-in state if(lineResponse==TRUE) { state inuse; } //Reboot when an error-message comes back... else { //Critical error(lineResponse=-1) or non-critical error(lineResponse=0/FALSE) online=lineResponse; state restart_default; } } } changed( integer change ) { if ( change == CHANGED_INVENTORY ) { integer itemCount = llGetInventoryNumber(INVENTORY_ALL); integer i=0; if(itemCount>3) { for(i=0;i<itemCount;i++) { string itemName = llGetInventoryName(INVENTORY_ALL, i); if (itemName != "About" && itemName!="jSLplus Interface" && itemName!="jSLplus Visitor-Tracker" && itemName!="jSLplus Settings") { llSay(0,"You must be logged in, before you may upload items to the ODS!"); llRemoveInventory(itemName); } } } else { llOwnerSay("Settings have been changed. Please wait while the terminal reboots..."); online=-2; state restart_default; } } } } state restart_default { state_entry() { state default; } } state inuse { state_entry() { llSensorRepeat( "", "", AGENT, scanrange, TWO_PI, scanrate); llListen(intchannel, "", av_key, "" ); llListen(paramchannel,"",av_key,""); if(menu=="MENU_PROFILE_ACTIVE" || status=="MENU_ADMIN") { llAllowInventoryDrop(TRUE); string folder = llGetObjectName(); } returnDialog(menu); } touch_start( integer number_detected ) { integer i; for( i = 0; i < number_detected; i++ ) { if (llDetectedKey(i) == av_key) { returnDialog(menu); } else { llSay(0,username+" is currently logged into this terminal. Please wait until this user logged off..."); } } } sensor( integer number_detected ) { integer i; for( i = 0; i < number_detected; i++ ) { key detected_key = llDetectedKey(i); if(av_key==detected_key) { vector agentPos = llDetectedPos(i); vector terminalPos = llGetPos(); float distance = llVecDist(agentPos, terminalPos); if (distance > logrange) { llInstantMessage(av_key, "===NOTICE===\nYou are out of range. logging off now..."); httpRequest("logoff",[]); llSensorRemove(); } else if(distance > lograngewarning){ llInstantMessage(av_key, "===NOTICE===\nYou are "+(string)(logrange-distance)+" meters from being logged out."); } } } } listen( integer chan, string name, key id, string msg ) { if(id == av_key) { msg = llStringTrim(msg, STRING_TRIM); list paramList; string command; if(msg!="") { paramList = llCSV2List(msg); command = llList2String(paramList,0); } if (command == "Website") { llLoadURL(av_key, sitetitle, url); returnDialog(menu); } else if (command == "About") { llGiveInventory(av_key,"About"); returnDialog(menu); } else if (command == "Request") { x_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=request&sid="+sid+ "&format=raw", [HTTP_METHOD, "GET"],""); } else if (command == "Logoff") { llSetText(username+" logs out...",textcolor,1); httpRequest("logoff",[sid]); llInstantMessage(av_key,"Preparing to log off..."); } if(menu=="MENU_UNREGISTERED") { if (command == "Register") { llInstantMessage(av_key,"===NOTICE===\nYou must provide a valid emailaddress.\nType: /"+(string)paramchannel+ " registermail,myemail@address.org' in order to finish the registration process."); } if (command == "registermail") { httpRequest("register",[generatePW(1000),llStringTrim(llList2String(paramList,1), STRING_TRIM)]); } } else if(menu=="MENU_PROFILE_ACTIVE") { if (command == "My Account") { string myAccount = "===MY ACCOUNT===\n"; myAccount += "Avatar-key: "+(string)av_key; llInstantMessage(av_key,myAccount); returnDialog(menu); } } else if(menu=="MENU_ADMIN") { if (command == "Settings") { string terminalSettings = "===SETTINGS===\n"; terminalSettings += "terminal-key: "+(string)llGetKey()+"\n"; terminalSettings += "heap: "+(string)llGetFreeMemory() + " bytes\n"; llInstantMessage(av_key, terminalSettings); llMessageLinked(2, 0, "settings",av_key); returnDialog(menu); } else if (command == "My Account") { string myAccount = "===MY ACCOUNT===\n"; account_request_id = llHTTPRequest(url + "index.php?option=com_jslplus&view=interface&controller=interface&task=getaccount&sid="+sid+ "&format=raw", [HTTP_METHOD, "GET"],""); myAccount += "Avatar-key: "+(string)av_key; llInstantMessage(av_key,myAccount); returnDialog(menu); } } } } http_response(key request_id, integer httpStatus, list metadata, string body) { list parameters; body = llStringTrim(body, STRING_TRIM); parameters = llCSV2List(body); status = llList2String(parameters,0); if (request_id == register_request_id) { llMessageLinked(3,0,status+","+username+","+secretWord,av_key); } if (request_id == item_request_id) { llMessageLinked(3,0,status+","+username,av_key); } if (request_id == logoff_request_id) { llMessageLinked(3,0,status+","+username,av_key); } if (request_id == x_request_id) { llMessageLinked(3,0,status+","+username,av_key); } if (request_id == account_request_id) { llMessageLinked(3,0,status+","+username,av_key); } } link_message(integer sender_num, integer lineResponse, string str, key id) { online = lineResponse; if(lineResponse==TRUE) { list input = llCSV2List(str); menu = llList2String(input,0); returnDialog(menu); } else { state default; } } changed( integer change ) { if (change & CHANGED_ALLOWED_DROP) { llOwnerSay("The inventory has changed as a result of a user without mod permissions dropping an item on the prim"+ "and it being allowed by the script."); } if ( change == CHANGED_INVENTORY ) { integer itemCount = llGetInventoryNumber(INVENTORY_ALL); if(itemCount>3) { llSay(0,"A new item was submitted!"); integer i=0; string newItem; for(i=0;i<itemCount;i++) { string itemName = llGetInventoryName(INVENTORY_ALL, i); if (itemName != "About" && itemName!="jSLplus Interface" && itemName!="jSLplus Visitor-Tracker" && itemName!="jSLplus Settings") { newItem = itemName; } } key itemKey = llGetInventoryKey(newItem); key itemCreatorKey = llGetInventoryCreator(newItem); if(av_key != itemCreatorKey) { llSay(0,"Item denied! You must be the creator of the submitted item!"); llRemoveInventory(newItem); return; } else { if (llStringLength(newItem) <=30) { llSay(0,"Item accepted. You have been recognised as the creator of this item..."); } else { llSay(0,"Item denied! Please shorten the objectname to a maximum of 30 characters..."); llRemoveInventory(newItem); return; } } integer itemType = llGetInventoryType(newItem); integer permCopy; integer permMod; integer permTransfer; string itemSpecs = "\n===Item specifications===\n"; itemSpecs+="item-Key: "+(string)itemKey+"\n"; itemSpecs+="item-Name: "+newItem+"\n"; itemSpecs+="=Permissions=\n"; if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_COPY) {permCopy=1;itemSpecs+="Copy:Yes\n";} else {permCopy=0;itemSpecs+="Copy:No\n";} if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_MODIFY) {permMod=1;itemSpecs+="Modify:Yes\n";} else {permMod=0;itemSpecs+="Modify:No\n";} if(llGetInventoryPermMask(newItem, MASK_NEXT) & PERM_TRANSFER) {permTransfer=1;itemSpecs+="Transfer:Yes\n";} else {permTransfer=0;itemSpecs+="Transfer:No\n";} llSay(0,itemSpecs); llGiveInventory(llGetLinkKey(2), newItem); llRemoveInventory(newItem); llSay(0,"Sending request to ODS-Site..."); newItem = llEscapeURL(newItem); httpRequest("additem",[itemKey,newItem,itemType,permCopy,permMod,permTransfer]); } } } }