const BASE_URL = "http://example.com";
function _PrintError(t, txt) {
local errorMessage = "[example.com] " + txt + " Response code: " + nm.responseCode();
if (t != null && "error" in t) {
errorMessage += "\n" + t.error;
}
WriteLog("error", errorMessage);
}
local task = options.getTask().getFileTask();
local apiToken = ServerParams.getParam("apiToken");
if (apiToken == "") {
WriteLog(
"error",
"[example.com] API token not set!");
return ResultCode.Failure;
}
nm.doGet(BASE_URL + "/");
if (nm.responseCode() != 200) {
return ResultCode.Failure;
}
local doc = Document(nm.responseBody());
local csrf = doc.find("input[name=csrf]").at(1).attr("value");
if (csrf == "") {
csrf = doc.find("meta[name=csrf]").attr("value");
}
if (csrf == "") {
WriteLog(
"error",
"[example.com] Cannot obtain CSRF token.");
return ResultCode.Failure;
}
nm.setUrl(BASE_URL + "/upload.php?fname=" + nm.urlEncode(task.getDisplayName()));
nm.addQueryHeader("X-CSRF-token", csrf);
nm.addPostField("token", apiToken);
nm.addPostFieldFile(
"file", pathToFile, task.getDisplayName(),
GetFileMimeType(pathToFile));
nm.addPostField("submit", "Upload file!");
nm.doUploadMultipartData();
if (nm.responseCode() != 200) {
WriteLog(
"error",
"[example.com] Upload failed. Response code:" + nm.responseCode());
return ResultCode.Failure;
}
local reg = CRegExp("\\[IMG\\](.+)\\[/IMG\\]", "mi");
local directUrl = "";
local viewUrl = "";
local thumbnailUrl = "";
if (reg.match(nm.responseBody())) {
directUrl = reg.getMatch(1);
}
if (nm.responseCode() != 200) {
_PrintError(t, "Failed to upload");
return ResultCode.Failure;
}
if (t != null && "url" in t) {
viewUrl = t.view_url;
thumbnailUrl = t.thumb_url;
} else {
_PrintError(t, "Failed to upload");
return ResultCode.Failure;
}
if (directUrl == "") {
WriteLog(
"error",
"[example.com] Upload failed. Cannot obtain the direct URL!");
return ResultCode.Failure;
}
options.setDirectUrl(directUrl);
options.setViewUrl(viewUrl);
options.setThumbUrl(thumbnailUrl);
return ResultCode.Success;
}
if (ServerParams.getParam("token") != "") {
return ResultCode.Success;
}
local username = ServerParams.getParam("Login");
local password = ServerParams.getParam("Password");
if ("access_token" in t) {
ServerParams.setParam("token", t.access_token);
return ResultCode.Success;
}
return ResultCode.Failure;
}
function GetFolderList(list) {
nm.doGet(BASE_URL + "/albums");
if (obj != null) {
if ("success" in obj && obj.success) {
local rootFolder = CFolderItem();
rootFolder.setId("/");
rootFolder.setTitle("My Images");
list.AddFolderItem(rootFolder);
local albums = obj.result.albums;
local count = albums.len();
for (local i = 0; i < count; i++) {
local item = albums[i];
local folder = CFolderItem();
folder.setId(item.id);
folder.setTitle(item.title);
folder.setParentId("/");
folder.setAccessType(item.public ? 1 : 0);
folder.setViewUrl("https://example.com/a/" + item.id);
list.AddFolderItem(folder);
}
return ResultCode.Success;
} else if ("error" in obj){
WriteLog(
"error",
"[example.com] error: " + obj.error.error_message);
}
} else if (nm.responseCode() != 200){
WriteLog(
"error",
"[example.com] response code: " + m.responseCode());
}
return ResultCode.Failure;
}
function CreateFolder(parentAlbum, album) {
local req = {
title = album.getTitle(),
description = album.getSummary(),
public = album.getAccessType() == 0 ? "FALSE" : "TRUE"
};
nm.setUrl(BASE_URL + "/v2/albums");
nm.addQueryHeader("Content-Type", "application/json");
nm.doPost(ToJSON(req));
if (obj != null) {
if ("success" in obj && obj.success) {
local remoteAlbum = obj.result;
album.setId(remoteAlbum.id);
album.setTitle(remoteAlbum.title);
album.setSummary(remoteAlbum.description);
album.setAccessType(remoteAlbum.public ? 1:0);
album.setViewUrl("https://example.com/a/" + remoteAlbum.id);
return ResultCode.Success;
} else if ("error" in obj){
WriteLog(
"error",
"[example.com] error: " + obj.error.error_message);
}
} else if (nm.responseCode() != 200){
WriteLog(
"error",
"[example.com] response code: " + m.responseCode());
}
return ResultCode.Failure;
}
function ModifyFolder(album) {
return ResultCode.Success;
}
return ["Private", "Public"];
}
return {
apiToken = "API Token",
albumid = "Album ID",
age = "Age",
striptags = "Strip Tags",
notify = {
title = "Email notification on download",
type = "boolean"
},
}
}
int UploadFile(string pathToFile, UploadParams params)
table GetServerParamList()
array GetFolderAccessTypeList()
void WriteLog(string type, string message)
string GetFileMimeType(string filename)
object ParseJSON(string json)