#region start #include-once #include Global $Webdebug = False $AuCGI_version = EnvGet ("AUCGI_VERS") Global $session = 0 Global $is_rss = False Global $_MULTIPART = False $PostContentLength = EnvGet ("CONTENT_LENGTH") If $PostContentLength <> "" Then Global $_POST_raw = ConsoleRead ($PostContentLength) EndIf Global $_GET_raw = EnvGet("QUERY_STRING") Global $_Cookie_Raw = EnvGet("HTTP_COOKIE") #endregion #region useful vars Global $_REMOTE_ADDR = EnvGet ('REMOTE_ADDR') Global $_ACCEPT_LANGUAGE = EnvGet ('HTTP_ACCEPT_LANGUAGE') Global $_HOST = EnvGet ('HTTP_HOST') Global $_ACCEPT_CHARSET = EnvGet ('HTTP_ACCEPT_CHARSET') Global $_USER_AGENT = EnvGet ('HTTP_USER_AGENT') Global $_SERVER_SOFTWARE = EnvGet ('SERVER_SOFTWARE') Global $_SERVER_NAME = EnvGet ('SERVER_NAME') Global $_SERVER_PROTOCOL = EnvGet ('SERVER_PROTOCOL') Global $_SERVER_PORT = EnvGet ('SERVER_PORT') Global $_SCRIPT_NAME = EnvGet ('SCRIPT_NAME') Global $_HTTPS = EnvGet ('HTTPS') Global $_DOCUMENT_ROOT = EnvGet('DOCUMENT_ROOT') ; The root directory of your server Global $_HTTP_REFERER = EnvGet('HTTP_REFERER') ; The URL of the page that called your program Global $_PATH = EnvGet('PATH') ; The system path your server is running under Global $_REMOTE_HOST = EnvGet('REMOTE_HOST') ; The hostname of the visitor (if your server has reverse-name-lookups on; otherwise this is the IP address again) Global $_REMOTE_PORT = EnvGet('REMOTE_PORT') ; The port the visitor is connected to on the web server Global $_REMOTE_USER = EnvGet('REMOTE_USER') ; The visitor's username (for .htaccess-protected pages) Global $_REQUEST_METHOD = EnvGet('REQUEST_METHOD') ; GET or POST Global $_REQUEST_URI = EnvGet('REQUEST_URI') ; The interpreted pathname of the requested document or CGI (relative to the document root) Global $_SCRIPT_FILENAME = EnvGet('SCRIPT_FILENAME') ; The full pathname of the current CGI Global $_SERVER_ADMIN = EnvGet('SERVER_ADMIN') ; The email address for your server's webmaster #endregion #region funcs ;=============================================================================== ; ; Description: Sends the http header to the browser for web-based applications. ; Parameter(s): $sTitle - The title of the web page to start. ; $sCookie - If you want to specify a cookie, do it here. ; Use the format name=value. "" by default. ; $sContent_type - lets you specify a different content type ; other than text/html. ; Requirement(s): None ; Return Value(s): On Success - 0 ; On Failure - 0 and Set @error to 1 if unable to ConsoleWrite ; Author(s): Matt Roth (theguy0000) ; Note(s): Must go at the top of all web-based applications. ; ;=============================================================================== Func _StartWebApp ($sTitle="", $sCookie = "", $sContent_type="text/html") Local $error = 0 if $sCookie <> "" then ConsoleWrite("Content-Type: "&$sContent_type & Chr(13) & Chr(10) & "Set-Cookie: " & $sCookie & Chr(13) & Chr(10) & Chr(13) & Chr(10)) If @error then $error = 1 else ConsoleWrite("Content-Type: "&$sContent_type & Chr(13) & Chr(10) & Chr(13) & Chr(10)) If @error then $error = 1 endif If $sTitle <> "" Then ConsoleWrite(""&$sTitle&"") If @error then $error = 1 SetError ($error) Return 0 EndFunc ;=============================================================================== ; ; Description: Sends text to be displayed in the web browser. ; Parameter(s): $sText - The text to display. ; Requirement(s): None ; Return Value(s): On Success - 0 ; On Failure - 0 and Set @error to 1 if unable to ConsoleWrite ; Author(s): Matt Roth (theguy0000) ; Note(s): The text can include html. ; ;=============================================================================== Func echo($sText, $sTag="") Local $error Local $tagsplit = StringSplit ($sTag, " ") If $sTag <> "" Then ConsoleWrite("<"&$sTag&">"&$sText&"" & @crlf) Else ConsoleWrite ($sText & @crlf) EndIf If @error then $error = 1 SetError ($error) Return 0 EndFunc Func echol($sText, $sTag="") Local $error Local $tagsplit = StringSplit ($sTag, " ") If $sTag <> "" Then ConsoleWrite("<"&$sTag&">"&$sText&"
" & @crlf) Else ConsoleWrite ($sText&"
" & @crlf) EndIf If @error then $error = 1 SetError ($error) Return 0 EndFunc ;=============================================================================== ; ; Description: Gets the value of a POST variable sent to the page. ; Parameter(s): $sVar - The name of the variable to retrieve ; Requirement(s): None ; Return Value(s): On Success - The value of the requested variable. ; On Failure - "" if the requested variable doesn't exist. ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _Post($sVar) Local $varstring, $num, $vars, $var_array $varstring = $_POST_raw If Not StringInStr($varstring, $sVar&"=") Then Return "" $num = __StringFindOccurances($varstring, "=") Local $vars[$num+1] $vars = StringSplit ($varstring, "&") For $i=1 To $vars[0] $var_array = StringSplit ($vars[$i], "=") If $var_array[0] < 2 Then Return "error" If $var_array[1] = $sVar Then Return _URLDecode($var_array[2]) Next Return "" EndFunc ;=============================================================================== ; ; Description: Gets the value of a GET variable sent to the page. ; Parameter(s): $sVar - The name of the variable to retrieve ; Requirement(s): None ; Return Value(s): On Success - The value of the requested variable. (or returns True. see notes) ; On Failure - "" if the requested variable doesn't exist. ; Author(s): Matt Roth (theguy0000) ; Note(s): If $iVarType is 1, it uses variables without values, like script.auw?myvar ; then you could use _Get("myvar", 1) and it would return true. ; ;=============================================================================== Func _Get($sVar, $iVarType=0) Local $varstring, $num, $vars, $var_array $varstring = $_GET_raw If Not StringInStr($varstring, $sVar&"=") Then Return "" $num = __StringFindOccurances($varstring, "=") Local $vars[$num+1] $vars = StringSplit ($varstring, "&") For $i=1 To $vars[0] If $iVarType Then If $vars[$i] = $sVar Then Return True Else $var_array = StringSplit ($vars[$i], "=") If $var_array[0] < 2 Then Return "error" If $var_array[1] = $sVar Then Return _URLDecode($var_array[2]) EndIf Next If $iVarType Then Return False Return True EndFunc Func _GetDP($sVar, $iVarType=0) Local $varstring, $num, $vars, $var_array $varstring = $_GET_raw If Not StringInStr($varstring, $sVar&":") Then Return "" $num = __StringFindOccurances($varstring, ":") Local $vars[$num+1] $vars = StringSplit ($varstring, "&") For $i=1 To $vars[0] If $iVarType Then If $vars[$i] = $sVar Then Return True Else $var_array = StringSplit ($vars[$i], ":") If $var_array[0] < 2 Then Return "error" If $var_array[1] = $sVar Then Return _URLDecode($var_array[2]) EndIf Next If $iVarType Then Return False Return True EndFunc ;=============================================================================== ; ; Description: Gets the value of a cookie. ; Parameter(s): $sVar - The name of the variable to retrieve ; Requirement(s): None ; Return Value(s): On Success - The value of the requested cookie. ; On Failure - "" if the requested cookie doesn't exist. ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _Cookie($sVar) Local $varstring, $num, $vars, $var_array $varstring = $_Cookie_Raw If Not StringInStr($varstring, $sVar&"=") Then Return "" $num = __StringFindOccurances($varstring, "=") Local $vars[$num+1] $vars = StringSplit ($varstring, "&") For $i=1 To $vars[0] $var_array = StringSplit ($vars[$i], "=") If $var_array[0] < 2 Then Return "error" If $var_array[1] = $sVar Then Return $var_array[2] Next Return "" EndFunc ;=============================================================================== ; ; Description: Gets a file that was submitted form, or the value of an input ; in a multipart form. ; Parameter(s): $sVar - The name of the input where the file was ; submitted. ; Requirement(s): None ; Return Value(s): On Success - ; IF THE REQUESTED VARIABLE IS A FILE: ; An array: ; [0] - Name of the file - example: hello.txt ; [1] - Content type of the retrieved file - Example: text/plain ; [2] - Contents of the file. ; IF THE REQUESTED VARIABLE IS NOT A FILE: ; Value of the variable ; On Failure - 0 ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _PostMultipart ($sVar) Local $ret[3] $split = StringSplit ($_POST_raw, "-----------------------------", 1) For $i = 1 To $split[0] $temp_split = StringSplit ($split[$i], @CRLF, 1) If $temp_split[0] < 4 Then ContinueLoop ;~ _ArrayDisplay ($temp_split, "") _ArrayDelete ($temp_split, 0) ;~ _ArrayDisplay ($temp_split, "") If StringInStr ($temp_split[1], '; filename="') Then $name_pos = StringInStr ($temp_split[1], '; name="') $name = StringRight ($temp_split[1], StringLen($temp_split[1])-($name_pos+7)) $quote_pos = StringInStr ($name, '"') $name = StringLeft ($name, (StringLen($name)-(StringLen($name)-$quote_pos))-1) ;~ MsgBox (0, "", $name) If $name <> $sVar Then ContinueLoop $pos = StringInStr ($temp_split[1], '; filename="') $ret[0] = StringRight ($temp_split[1], StringLen($temp_split[1])-($pos+11)) $ret[0] = StringTrimRight ($ret[0], 1) _ArrayDelete ($temp_split, 1) $ret[1] = StringRight($temp_split[1], StringLen($temp_split[1])-14) _ArrayDelete ($temp_split, 1) _ArrayDelete ($temp_split, 1) _ArrayDelete ($temp_split, 0) _ArrayDelete ($temp_split, UBound($temp_split)-1) $ret[2] = _ArrayToString($temp_split, @CRLF) ;~ _ArrayDisplay ($temp_split, "") Return $ret Else $name_pos = StringInStr ($temp_split[1], '; name="') $name = StringRight ($temp_split[1], StringLen($temp_split[1])-($name_pos+7)) $quote_pos = StringInStr ($name, '"') $name = StringLeft ($name, (StringLen($name)-(StringLen($name)-$quote_pos))-1) ;~ MsgBox (0, "", $name) If $name <> $sVar Then ContinueLoop Return $temp_split[3] EndIf Next Return 0 EndFunc ;=============================================================================== ; ; Description: echo's a string telling the user their visitor number. ; Parameter(s): $sCounterMsg - The text to be echo'd. % will be replaced ; with the visitor number. ; $sCounter - Optional path to the file where the visitor ; number will be stored/retrieved. ; Requirement(s): None ; Return Value(s): On Success - the visitor number ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _WebCounter($sCounterMsg='You are Visitor Number % to this page', $sCounter='') If $sCounter = '' Then $sCounter = "C:\count_"&$_SCRIPT_NAME&".txt" If Not FileExists ($sCounter) Then FileWriteLine ($sCounter, 0) Dim $i Dim $line = FileRead($sCounter) Dim $ending $i = $line + $i If $i = 1 Then $ending = "st" ElseIf $i = 2 Then $ending = "nd" ElseIf $i = 3 Then $ending = "rd" Else $ending = "th" EndIf echo (StringReplace (StringReplace($sCounterMsg,"!",$ending), "%", $i)) FileDelete($sCounter) FileWriteLine($sCounter,$i) Return $i EndFunc Func __StringFindOccurances($sStr1, $sStr2) ; NOT BY ME For $i = 1 to StringLen($sStr1) If not StringInStr($sStr1, $sStr2, 1, $i) Then ExitLoop Next Return $i EndFunc ;=============================================================================== ; ; Description: Displays a message box on the user's computer. ; Parameter(s): $sCounterMsg - The text to be echo'd. % will be replaced ; with the visitor number. ; $sCounter - Optional path to the file where the visitor ; number will be stored/retrieved. ; Requirement(s): Javascript enabled on the user's browser ; Return Value(s): On Success - the visitor number ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _MsgBox($sText) echo('") EndFunc ;=============================================================================== ; ; Description: optionally echo's a string of text then exits the script. ; Parameter(s): $sText - The optional text to be echo'd before exiting. ; Requirement(s): None ; Return Value(s): 0 ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func die ($sText="") echo ($sText) Exit EndFunc ;=============================================================================== ; ; Description: Sends the http header to the browser with session variables enabled. ; Parameter(s): $sTitle - The title of the web page to start. ; $sContent_type - lets you specify a different content type ; other than text/html. ; Requirement(s): Javascript enabled on the user's browser ; Return Value(s): 0 ; Author(s): Matt Roth (theguy0000) ; Note(s): If you want to use session variables, you should use this instead ; of _StartWebApp ; ;=============================================================================== Func _StartWebApp_Session ($sTitle="", $sContent_type="text/html") $session = 1 If _GetSID()>11110 Then ConsoleWrite("Content-Type: " & $sContent_type & Chr(13) & Chr(10) & "Set-Cookie: sid="&_GenerateSID() & Chr(13) & Chr(10) & Chr(13) & Chr(10)) If $sTitle <> "" Then ConsoleWrite(""&$sTitle&"") $_Cookie_Raw = EnvGet ("HTTP_COOKIE") Else _StartWebApp ($sTitle) EndIf EndFunc Func _GenerateSID () Local $ret Do $ret = Random (11111, 99999, 1) Until IniRead ("sessions.ini", "list", $ret, "no") = "no" IniWrite ("sessions.ini", "list", $ret, "yes") Return $ret EndFunc ;=============================================================================== ; ; Description: gets the current user's Session ID. ; Parameter(s): None ; Requirement(s): None ; Return Value(s): On Success - The user's SID ; On Failure - "" ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _GetSID ( ) Return _Cookie ("sid") EndFunc ;=============================================================================== ; ; Description: Sets a session variable ; Parameter(s): $sName - The name of the variable to set ; $sValue - The value of the new variable. ; Requirement(s): _StartWebApp_Session at the beginning of the script ; Return Value(s): On Success - 1 ; On Failure - 0 If the ini file is read-only or sessions aren't enabled. ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _Session_set ($sName, $sValue) If Not $session Then Return 0 Return IniWrite ("sessions.ini", _GetSID (), $sName, $sValue) EndFunc ;=============================================================================== ; ; Description: gets the value of a session variable. ; Parameter(s): $sName - the name of the variable to retrieve. ; Requirement(s): _StartWebApp_Session at the beginning of the script ; Return Value(s): On Success - The value of ; On Failure - "" ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _Session ($sName) If Not $session Then Return 0 Return IniRead ("sessions.ini", _GetSID(), $sName, "") EndFunc ;=============================================================================== ; ; Description: Create an ActiveX Object for use later. ; Parameter(s): $sObj - the object to create, for example, SAPI.SpVoice ; $sObjName - could be anything to identify it to you, but must ; adhere to the following standards ; -they cannot be any of the words found here: http://www.javascriptkit.com/jsref/reserved.shtml ; -they are case sensitive ; -they can begin with a letter or underscore, NOT a numeral ; -no spaces... ; Requirement(s): _StartWebApp_Session at the beginning of the script ; Return Value(s): On Success - The value of ; On Failure - "" ; Author(s): Matt Roth (theguy0000) ; Note(s): Does not work if javascript is not enabled, and even if it is, ; security settings sometimes stop it. ; ;=============================================================================== Func WebObjCreate($sObj, $sObjName) Local $out=''&@CRLF echo ($out) return $out EndFunc ;=============================================================================== ; ; Description: starts a web page that will be used as an RSS Feed. ; Parameter(s): $sTitle - The name of the channel. It's how people refer to ; your service. If you have an HTML website that ; contains the same information as your RSS file, the ; title of your channel should be the same as the title ; of your website. ; $sLink - The URL to the HTML website corresponding to the channel. ; $sDescription - Phrase or sentence describing the channel. ; $sLanguage - [optional] the language your RSS feed is in. Default is en-us. Set as an empty string to omit. ; $sCopyright - [optional] Copyright notice for content in the channel. Default is a blank string ; $sEditor - [optional] Email address for person responsible for editorial content. Default is a blank string. ; $sMaster - [optional] Email address for person responsible for technical issues relating to channel. ; Requirement(s): None. ; Return Value(s): On Success - True ; On Failure - False ; Author(s): Matt Roth (theguy0000) ; Note(s): If you use this, do not use _StartWebApp () or _StartWebApp_Session () ; ;=============================================================================== Func _StartRssFeed ($sTitle, $sLink, $sDescription, $sLanguage="en-us", $sCopyright="", $sEditor="", $sMaster="") $error = False Global $is_rss = True _StartWebApp () If @error Then Return SetError (1, @error, False) echo ('') If @error Then Return SetError (2, @error, False) echo ('') If @error Then Return SetError (3, @error, False) echo ('') If @error Then Return SetError (4, @error, False) echo (''&$sTitle&'') If @error Then Return SetError (5, @error, False) echo (''&$sLink&'') If @error Then Return SetError (6, @error, False) echo (''&$sDescription&'') If @error Then Return SetError (7, @error, False) If $sLanguage <> "" Then echo (''&$sLanguage&'') If @error Then Return SetError (8, @error, False) If $sCopyright <> "" Then echo (''&$sCopyright&'') If @error Then Return SetError (9, @error, False) If $sEditor <> "" Then echo (''&$sEditor&'') If @error Then Return SetError (10, @error, False) If $sMaster <> "" Then echo (''&$sMaster&'') If @error Then Return SetError (11, @error, False) echo ('AutoIt '&@AutoItVersion&'') If @error Then Return SetError (12, @error, False) echo ('http://validator.w3.org/feed/docs/rss2.html') If @error Then Return SetError (13, @error, False) Return True EndFunc ;=============================================================================== ; ; Description: Adds an Item to the current RSS Feed ; Parameter(s): $sTitle - The title of the item. ; $sDescription - The item synopsis. ; $sLink - [optional] The URL of the item. Leave blank to omit. ; $sAuthor - [optional] Email address of the author of the item. ; Leave blank to omit. ; $sCategory - [optional] Includes the item in one or more ; categories. Leave blank to omit. ; $sGuid - [optional] A string that uniquely identifies the item. ; There are no syntax rules. Leave blank to omit. ; $sPubDate - [optional] Indicates when the item was published. ; Leave blank to omit. Must be in the format: ; WWW, DD MMM YYYY HH:MM:SS GMT ; Example: ; Sun, 19 Aug 2002 15:21:36 GMT ; Requirement(s): _StartRssFeed () ; Return Value(s): On Success - True ; On Failure - False ; Author(s): Matt Roth (theguy0000) ; Note(s): None. ; ;=============================================================================== Func _RssAddItem ($sTitle, $sDescription, $sLink="", $sAuthor="", $sCategory="", $sGuid="", $sPubDate="") If Not $is_rss Then Return SetError( -1, "", False) echo ('') If @error Then Return SetError (1, @error, False) echo (''&$sTitle&'') If @error Then Return SetError (2, @error, False) echo (''&$sDescription&'') If @error Then Return SetError (3, @error, False) If $sLink <> "" then echo (''&$sLink&'') If @error Then Return SetError (4, @error, False) If $sAuthor <> "" then echo (''&$sAuthor&'') If @error Then Return SetError (5, @error, False) If $sCategory <> "" then echo (''&$sCategory&'') If @error Then Return SetError (6, @error, False) If $sGuid <> "" then echo (''&$sGuid&'') If @error Then Return SetError (7, @error, False) If $sPubDate <> "" then echo (''&$sPubDate&'') If @error Then Return SetError (8, @error, False) echo ('') If @error Then Return SetError (9, @error, False) Return True EndFunc ;=============================================================================== ; ; Description: ends the RSS Feed ; Parameter(s): None. ; Requirement(s): None. ; Return Value(s): On Success - True ; On Failure - False ; Author(s): Matt Roth (theguy0000) ; Note(s): This will exit the script. You cannot do anything else after using this function. ; ;=============================================================================== Func _EndRssFeed () If Not $is_rss Then Return SetError( -1, "", False) echo ('') If @error Then Return SetError (1, @error, False) echo ('') If @error Then Return SetError (2, @error, False) Return True EndFunc #endregion #region helper funcs ;=============================================================================== ; _URLEncode() ; Description: : Encodes a string to be URL-friendly ; Parameter(s): : $toEncode - The String to Encode ; : $encodeType = 0 - Practical Encoding (Encode only what is necessary) ; : = 1 - Encode everything ; : = 2 - RFC 1738 Encoding - http://www.ietf.org/rfc/rfc1738.txt ; Return Value(s): : The URL encoded string ; Author(s): : nfwu ; Note(s): : - ; ;=============================================================================== Func _URLEncode($toEncode, $encodeType = 0) Local $strHex = "", $iDec Local $aryChar = StringSplit($toEncode, "") If $encodeType = 1 Then;;Encode EVERYTHING For $i = 1 To $aryChar[0] $strHex = $strHex & "%" & Hex(Asc($aryChar[$i]), 2) Next Return $strHex ElseIf $encodeType = 0 Then;;Practical Encoding For $i = 1 To $aryChar[0] $iDec = Asc($aryChar[$i]) if $iDec <= 32 Or $iDec = 37 Then $strHex = $strHex & "%" & Hex($iDec, 2) Else $strHex = $strHex & $aryChar[$i] EndIf Next Return $strHex ElseIf $encodeType = 2 Then;;RFC 1738 Encoding For $i = 1 To $aryChar[0] If Not StringInStr("$-_.+!*'(),;/?:@=&abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", $aryChar[$i]) Then $strHex = $strHex & "%" & Hex(Asc($aryChar[$i]), 2) Else $strHex = $strHex & $aryChar[$i] EndIf Next Return $strHex EndIf EndFunc ;=============================================================================== ; _URLDecode() ; Description: : Tranlates a URL-friendly string to a normal string ; Parameter(s): : $toDecode - The URL-friendly string to decode ; Return Value(s): : The URL decoded string ; Author(s): : nfwu ; Note(s): : - ; ;=============================================================================== Func _URLDecode($toDecode) local $strChar = "", $iOne, $iTwo Local $aryHex = StringSplit($toDecode, "") For $i = 1 to $aryHex[0] If $aryHex[$i] = "%" Then $i = $i + 1 $iOne = $aryHex[$i] $i = $i + 1 $iTwo = $aryHex[$i] $strChar = $strChar & Chr(Dec($iOne & $iTwo)) Else $strChar = $strChar & $aryHex[$i] EndIf Next Return StringReplace($strChar, "+", " ") EndFunc #endregion func __ConsoleWrite($data) if $Webdebug then echo($data) EndFunc