Genshi example

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(New page: <source lang="lsl"> //********************* //****from notecard**** //********************* integer intchannel; integer paramchannel; integer scanrate; integer scanrange; integer salt; int...)
 
(Replacing page with '<source lang=php> <?php function foo($bar) { echo "yes, genshi works!"; } ?> </source>')
Line 1: Line 1:
<source lang="lsl">
+
<source lang=php>
//*********************
+
<?php
//****from notecard****
+
function foo($bar) {
//*********************
+
echo "yes, genshi works!";
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:00, 15 March 2008

<?php
function foo($bar) {
echo "yes, genshi works!";
}
?>
Personal tools
General
About This Wiki