mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-26 01:50:28 +00:00
12f1847475
The default behaviour is unchanged, but if you write "yes" to $:/UploadWithUrlOnly then it will assume it's possible to upload with a blank username and password, as long as the host is set. The motivation is to support a upload plugin compatible upload service that uses some method to authenticate other than the legacy upload plugin user/password params. Without this patch, the user would need to enter something random in the user and password fields for TW to decide the upload plugin can be used.
112 lines
3.3 KiB
JavaScript
112 lines
3.3 KiB
JavaScript
/*\
|
|
title: $:/core/modules/savers/upload.js
|
|
type: application/javascript
|
|
module-type: saver
|
|
|
|
Handles saving changes via upload to a server.
|
|
|
|
Designed to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
/*
|
|
Select the appropriate saver module and set it up
|
|
*/
|
|
var UploadSaver = function(wiki) {
|
|
this.wiki = wiki;
|
|
};
|
|
|
|
UploadSaver.prototype.save = function(text,method,callback) {
|
|
// Get the various parameters we need
|
|
var backupDir = this.wiki.getTextReference("$:/UploadBackupDir") || ".",
|
|
username = this.wiki.getTextReference("$:/UploadName"),
|
|
password = $tw.utils.getPassword("upload"),
|
|
uploadDir = this.wiki.getTextReference("$:/UploadDir") || ".",
|
|
uploadFilename = this.wiki.getTextReference("$:/UploadFilename") || "index.html",
|
|
uploadWithUrlOnly = this.wiki.getTextReference("$:/UploadWithUrlOnly") || "no",
|
|
url = this.wiki.getTextReference("$:/UploadURL");
|
|
// Bail out if we don't have the bits we need
|
|
if (uploadWithUrlOnly === "yes") {
|
|
// The url is good enough. No need for a username and password.
|
|
// Assume the server uses some other kind of auth mechanism.
|
|
if(!url || url.toString().trim() === "") {
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
// Require username and password to be present.
|
|
// Assume the server uses the standard UploadPlugin username/password.
|
|
if(!username || username.toString().trim() === "" || !password || password.toString().trim() === "") {
|
|
return false;
|
|
}
|
|
}
|
|
// Construct the url if not provided
|
|
if(!url) {
|
|
url = "http://" + username + ".tiddlyspot.com/store.cgi";
|
|
}
|
|
// Assemble the header
|
|
var boundary = "---------------------------" + "AaB03x";
|
|
var uploadFormName = "UploadPlugin";
|
|
var head = [];
|
|
head.push("--" + boundary + "\r\nContent-disposition: form-data; name=\"UploadPlugin\"\r\n");
|
|
head.push("backupDir=" + backupDir + ";user=" + username + ";password=" + password + ";uploaddir=" + uploadDir + ";;");
|
|
head.push("\r\n" + "--" + boundary);
|
|
head.push("Content-disposition: form-data; name=\"userfile\"; filename=\"" + uploadFilename + "\"");
|
|
head.push("Content-Type: text/html;charset=UTF-8");
|
|
head.push("Content-Length: " + text.length + "\r\n");
|
|
head.push("");
|
|
// Assemble the tail and the data itself
|
|
var tail = "\r\n--" + boundary + "--\r\n",
|
|
data = head.join("\r\n") + text + tail;
|
|
// Do the HTTP post
|
|
var http = new XMLHttpRequest();
|
|
http.open("POST",url,true,username,password);
|
|
http.setRequestHeader("Content-Type","multipart/form-data; charset=UTF-8; boundary=" + boundary);
|
|
http.onreadystatechange = function() {
|
|
if(http.readyState == 4 && http.status == 200) {
|
|
if(http.responseText.substr(0,4) === "0 - ") {
|
|
callback(null);
|
|
} else {
|
|
callback(http.responseText);
|
|
}
|
|
}
|
|
};
|
|
try {
|
|
http.send(data);
|
|
} catch(ex) {
|
|
return callback($tw.language.getString("Error/Caption") + ":" + ex);
|
|
}
|
|
$tw.notifier.display("$:/language/Notifications/Save/Starting");
|
|
return true;
|
|
};
|
|
|
|
/*
|
|
Information about this saver
|
|
*/
|
|
UploadSaver.prototype.info = {
|
|
name: "upload",
|
|
priority: 2000,
|
|
capabilities: ["save", "autosave"]
|
|
};
|
|
|
|
/*
|
|
Static method that returns true if this saver is capable of working
|
|
*/
|
|
exports.canSave = function(wiki) {
|
|
return true;
|
|
};
|
|
|
|
/*
|
|
Create an instance of this saver
|
|
*/
|
|
exports.create = function(wiki) {
|
|
return new UploadSaver(wiki);
|
|
};
|
|
|
|
})();
|