mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-30 20:10:28 +00:00
244 lines
6.5 KiB
JavaScript
244 lines
6.5 KiB
JavaScript
/*\
|
|
title: $:/plugins/tiddlywiki/aws/command.js
|
|
type: application/javascript
|
|
module-type: command
|
|
|
|
--aws command
|
|
|
|
\*/
|
|
(function(){
|
|
|
|
/*jslint node: true, browser: true */
|
|
/*global $tw: false */
|
|
"use strict";
|
|
|
|
var async,
|
|
awsUtils;
|
|
|
|
exports.info = {
|
|
name: "aws",
|
|
synchronous: false
|
|
};
|
|
|
|
var Command = function(params,commander,callback) {
|
|
async = require("$:/plugins/tiddlywiki/async/async.js");
|
|
awsUtils = require("$:/plugins/tiddlywiki/aws/utils.js");
|
|
this.params = params;
|
|
this.commander = commander;
|
|
this.callback = callback;
|
|
};
|
|
|
|
Command.prototype.execute = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
subCommand = this.params[0],
|
|
fn = this.subCommands[subCommand];
|
|
if(!fn) {
|
|
return this.callback("AWS: Unknown subcommand")
|
|
}
|
|
fn.bind(this)();
|
|
return null;
|
|
};
|
|
|
|
Command.prototype.subCommands = {};
|
|
|
|
// Set credentials profile
|
|
Command.prototype.subCommands["profile"] = function() {
|
|
var AWS = require("aws-sdk"),
|
|
profile = this.params[1],
|
|
credentials = new AWS.SharedIniFileCredentials({profile: profile});
|
|
AWS.config.update({credentials: credentials});
|
|
this.callback(null);
|
|
};
|
|
|
|
// Load tiddlers from files in an S3 bucket
|
|
Command.prototype.subCommands["s3-load"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
region = this.params[1],
|
|
bucket = this.params[2],
|
|
filepaths = this.params.slice(3);
|
|
// Check parameters
|
|
if(!region || !bucket) {
|
|
self.callback("Missing parameters");
|
|
}
|
|
async.eachLimit(
|
|
filepaths,
|
|
20,
|
|
function(filepath,callback) {
|
|
awsUtils.getFile(region,bucket,filepath,function(err,data) {
|
|
if(err) {
|
|
return callback(err);
|
|
}
|
|
var tiddlers = self.commander.wiki.deserializeTiddlers(data.type,data.body,{});
|
|
$tw.utils.each(tiddlers,function(tiddler) {
|
|
self.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));
|
|
});
|
|
callback(null);
|
|
});
|
|
},
|
|
function(err,results) {
|
|
self.callback(err,results);
|
|
}
|
|
);
|
|
return null;
|
|
};
|
|
|
|
// Render a tiddler to an S3 bucket
|
|
Command.prototype.subCommands["s3-rendertiddler"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
title = this.params[1],
|
|
region = this.params[2],
|
|
bucket = this.params[3],
|
|
filename = this.params[4],
|
|
type = this.params[5] || "text/html",
|
|
template = this.params[6],
|
|
zipfilename = this.params[7],
|
|
saveType = this.params[8] || type,
|
|
variables = {};
|
|
// Check parameters
|
|
if(!title || !region || !bucket || !filename) {
|
|
throw "Missing parameters";
|
|
}
|
|
// Process the template if present
|
|
if(template) {
|
|
variables.currentTiddler = title;
|
|
title = template;
|
|
}
|
|
// Render the tiddler
|
|
var text = this.commander.wiki.renderTiddler(type,title,{variables: variables}),
|
|
type = "text/plain",
|
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding;
|
|
// Zip it if needed
|
|
if(zipfilename) {
|
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js"),
|
|
zip = new JSZip();
|
|
zip.file(filename,new Buffer(text,encoding));
|
|
text = zip.generate({type: "base64"});
|
|
type = "application/zip";
|
|
filename = zipfilename;
|
|
}
|
|
// Save the file
|
|
async.series([
|
|
awsUtils.putFile.bind(null,region,bucket,filename,text,saveType)
|
|
],
|
|
function(err,results){
|
|
self.callback(err,results);
|
|
});
|
|
return null;
|
|
};
|
|
|
|
Command.prototype.subCommands["s3-rendertiddlers"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
filter = this.params[1],
|
|
template = this.params[2],
|
|
region = this.params[3],
|
|
bucket = this.params[4],
|
|
filenameFilter = this.params[5],
|
|
type = this.params[6] || "text/html",
|
|
saveTypeFilter = this.params[7] || "[[" + type + "]]",
|
|
tiddlers = wiki.filterTiddlers(filter);
|
|
// Check parameters
|
|
if(!filter || !region || !bucket || !filenameFilter) {
|
|
throw "Missing parameters";
|
|
}
|
|
async.eachLimit(
|
|
tiddlers,
|
|
20,
|
|
function(title,callback) {
|
|
var parser = wiki.parseTiddler(template || title),
|
|
widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),
|
|
container = $tw.fakeDocument.createElement("div");
|
|
widgetNode.render(container,null);
|
|
var text = type === "text/html" ? container.innerHTML : container.textContent,
|
|
filename = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0],
|
|
saveType = wiki.filterTiddlers(saveTypeFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0];
|
|
awsUtils.putFile(region,bucket,filename,text,saveType,callback);
|
|
},
|
|
function(err,results) {
|
|
self.callback(err,results);
|
|
}
|
|
);
|
|
return null;
|
|
};
|
|
|
|
// Save a tiddler to an S3 bucket
|
|
Command.prototype.subCommands["s3-savetiddler"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
title = this.params[1],
|
|
region = this.params[2],
|
|
bucket = this.params[3],
|
|
filename = this.params[4],
|
|
zipfilename = this.params[5],
|
|
saveType = this.params[6],
|
|
tiddler = wiki.getTiddler(title),
|
|
text = tiddler.fields.text,
|
|
type = tiddler.fields.type,
|
|
encoding = ($tw.config.contentTypeInfo[type] || {encoding: "utf8"}).encoding;
|
|
// Check parameters
|
|
if(!title || !region || !bucket || !filename) {
|
|
throw "Missing parameters";
|
|
}
|
|
// Zip it if needed
|
|
if(zipfilename) {
|
|
var JSZip = require("$:/plugins/tiddlywiki/jszip/jszip.js"),
|
|
zip = new JSZip();
|
|
zip.file(filename,new Buffer(text,encoding));
|
|
text = zip.generate({type: "base64"});
|
|
type = "application/zip";
|
|
filename = zipfilename;
|
|
}
|
|
// Save the file
|
|
async.series([
|
|
awsUtils.putFile.bind(null,region,bucket,filename,text,saveType || type)
|
|
],
|
|
function(err,results){
|
|
self.callback(err,results);
|
|
});
|
|
return null;
|
|
};
|
|
|
|
// Save a tiddler to an S3 bucket
|
|
Command.prototype.subCommands["s3-savetiddlers"] = function() {
|
|
var self = this,
|
|
wiki = this.commander.wiki,
|
|
filter = this.params[1],
|
|
region = this.params[2],
|
|
bucket = this.params[3],
|
|
filenameFilter = this.params[4],
|
|
saveTypeFilter = this.params[5] || "[is[tiddler]get[type]]",
|
|
tiddlers = wiki.filterTiddlers(filter);
|
|
// Check parameters
|
|
if(!filter || !region || !bucket || !filenameFilter) {
|
|
throw "Missing parameters";
|
|
}
|
|
async.eachLimit(
|
|
tiddlers,
|
|
20,
|
|
function(title,callback) {
|
|
var tiddler = wiki.getTiddler(title);
|
|
if(tiddler) {
|
|
var text = tiddler.fields.text || "",
|
|
type = tiddler.fields.type || "text/vnd.tiddlywiki",
|
|
filename = wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0],
|
|
saveType = wiki.filterTiddlers(saveTypeFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0];
|
|
awsUtils.putFile(region,bucket,filename,text,saveType || type,callback);
|
|
} else {
|
|
process.nextTick(callback,null);
|
|
}
|
|
},
|
|
function(err,results) {
|
|
self.callback(err,results);
|
|
}
|
|
);
|
|
return null;
|
|
};
|
|
|
|
exports.Command = Command;
|
|
|
|
})();
|
|
|