Advanced Features > Lua Language

Navigation: Advanced Features > Lua Language |

About Lua

Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.

Wing FTP Server includes support for the Lua scripting language. Lua scripts can be used in several cases, such as task scheduler, event manager, and administration console. It will help you to complete a complex scheduler task or a useful FTP LOGIN event or just a simple console command.

You can write Lua scripts simply by using standard Lua libraries and Wing FTP Server's Lua API. For example, if you want to add a user to the server, you can call c_AddUser(...) API to implement it, then if you want to delete the user, just call c_DeleteUser(...). It is simple yet powerful.

Simple example (a daily scheduler task for removing inactive users in domain "default" that have not logged in within 15 days)

do
local strUserlist = c_GetUserList("default")
local userlist = Split(strUserlist,"\n")
for _,username in pairs(userlist) do
local user = c_GetUser("default",username)
local logintime = user.last_logintime
local logintime_t = c_TranslateTime(logintime)
if (os.time() - logintime_t) >= 3600*24*15 then
c_DeleteUser("default",username)
end
end
end

RESTful web service

Wing FTP Server also provides a RESTful web service for administration, and you can call it to execute lua script in any programming language.

The RESTful web service URL may look like this: http://127.0.0.1:5466/admin_webservice.html?admin=demo&pass=demo123&cmd=xxxxx

There are three URL parameters in the above URL, the first parameter "admin" means the administrator's username, the second parameter "pass" means the administrator's password, and the third parameter "cmd" means the lua script with URL encoded.

If the web service call fails, it will return a string starting with "[ERROR RESULT]."

Here we will present an example in some programming languages. This example is very simple, just for calculating the number of all the domains' online sessions.

PHP example:

$strUrl = "http://127.0.0.1:5466/admin_webservice.html";
$strUrlParam = "?admin=demo&pass=demo123&cmd=";
$strLuaScript = <<<EOT
local nSessionCnt = 0
for _,domain in pairs(c_GetDomainList()) do
nSessionCnt = nSessionCnt + c_GetSessionCount(domain)
end
print(nSessionCnt)
EOT;
$strResult = file_get_contents($strUrl.$strUrlParam.rawurlencode($strLuaScript));

VB script/ASP example:

Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP")
strUrl = "http://127.0.0.1:5466/admin_webservice.html"
strUrlParam = "?admin=demo&pass=demo123&cmd="
strLuaScript = "local nSessionCnt = 0 "_
&"for _,domain in pairs(c_GetDomainList()) do "_
&" nSessionCnt = nSessionCnt + c_GetSessionCount(domain) "_
&"end "_
&"print(nSessionCnt)"
xmlHttp.open "GET", strUrl&strUrlParam&URLEncode(strLuaScript), False
xmlHttp.send
strResult = xmlHttp.responseText
Function URLEncode(strInput)
For i = 1 To Len(strInput)
intAscii = Asc(Mid(strInput, i, 1))
If ((intAscii < 58) And (intAscii > 47)) Or ((intAscii < 91) And (intAscii > 64)) Or ((intAscii < 123) And (intAscii > 96)) Then
strOutput = strOutput & Chr(intAscii)
Else
If intAscii < 16 Then
strOutput = strOutput & "%0" & Trim(Hex(intAscii))
Else
strOutput = strOutput & "%" & Trim(Hex(intAscii))
End If
End If
Next
URLEncode = strOutput
End Function

JAVA example:

import java.io.*;
import java.net.*;
class GetUrlContent {
public static void main(String[] args) throws IOException {
String strUrl = "http://127.0.0.1:5466/admin_webservice.html";
String strUrlParam = "admin=demo&pass=demo123&cmd=";
String strLuaScript = "local nSessionCnt = 0 "+
"for _,domain in pairs(c_GetDomainList()) do "+
" nSessionCnt = nSessionCnt + c_GetSessionCount(domain) "+
"end "+
"print(nSessionCnt)";

String strResult = SendGetRequest(strUrl, strUrlParam+java.net.URLEncoder.encode(strLuaScript, "UTF-8").replaceAll("\\+", "%20"));
}
public static String SendGetRequest(String url, String param) {
String result = "";
try {
String urlName = url + "?" + param;
URL U = new URL(urlName);
URLConnection connection = U.openConnection();
connection.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
in.close();
} catch (Exception e) {
result = "";
}
return result;
}
}