-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.js
110 lines (94 loc) · 3.39 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
var config = require("./config");
var fs = require("fs");
var pgp = require("node-pgp");
var imagemagick = require("imagemagick");
function encodePassword(password) {
return pgp.utils.hash(password, "sha256", "base64").substring(0, 43);
}
/**
* Encodes the PGP key to the specified format. The format is one from the select box that is generated by the
* gnewpg.ui.exportFormats template.
*/
function encodeToFormat(data, format) {
if(!(data instanceof pgp.BufferedStream))
data = new pgp.BufferedStream(data);
switch(format) {
case "binary":
return data;
case "ascii":
default:
return pgp.formats.enarmor(data, pgp.consts.ARMORED_MESSAGE.PUBLIC_KEY);
}
}
/**
* Gets the file extension for the specified format. The format is one from the select box that is generated by the
* gnewpg.ui.exportFormats template.
*/
function getInfoForFormat(format) {
switch(format) {
case "binary":
return { extension: ".bexpk", mimetype: "application/octet-stream" };
case "ascii":
default:
return { extension: ".asc", mimetype: "application/pgp-keys" };
}
}
function formatFingerprint(str) {
var ret = [ ];
for(var i = 0; i<str.length; i+=4)
ret.push(str.substr(i, 4));
return { contentKind : 0, content : "<span class=\"fingerprint\">"+ret.join(" ")+"</span>", toString: function() { return ret.join("\u00a0"); } };
}
function formatKeyId(keyId) {
var p1 = keyId.substr(0, 8);
var p2 = keyId.substr(8, 16);
return { contentKind : 0, content : "<span class=\"keyid\">"+p1+" <strong>"+p2+"</strong></span>", toString: function(){ return p1+"\u2009"+p2; } };
}
function scaleImage(imgData, maxWidth, maxHeight, callback) {
imagemagick.identify({ data: imgData }, function(err, imgInfo) {
if(err)
return callback(err);
var newHeight = imgInfo.height;
var newWidth = imgInfo.width;
if(maxWidth != null && imgInfo.width > maxWidth) {
newWidth = maxWidth;
newHeight = Math.round(imgInfo.height * (newWidth / imgInfo.width));
}
if(maxHeight != null && imgInfo.height > maxHeight) {
newHeight = maxHeight;
newWidth = Math.round(imgInfo.width * (newHeight / imgInfo.height));
}
if(newWidth == imgInfo.width && newHeight == imgInfo.height)
return callback(null, imgData, newWidth, newHeight);
imagemagick.resize({ srcData: imgData, width: newWidth, height: newHeight }, function(err, resized) {
callback(err, new Buffer(resized, "binary"), newWidth, newHeight);
});
});
}
function quoteRegexp(regexp) {
return (regexp+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
}
function checkReferrer(req, res, next) {
var referrer = req.get("Referer") || "";
if(config.baseurl && referrer.substr(0, config.baseurl.length+1) == config.baseurl+"/")
return next();
else if(!config.baseurl && referrer.match(new RegExp("^https?://"+quoteRegexp(req.host)+"[:/]")))
return next();
res.send(403, "Invalid referrer.");
}
function normaliseArrayParam(param) {
var ret = param ? Array.isArray(param) ? param : [ param ] : [ ];
for(var i=0; i<ret.length; i++)
ret[i] = ""+ret[i];
return ret;
}
exports.extend = pgp.utils.extend;
exports.encodePassword = encodePassword;
exports.encodeToFormat = encodeToFormat;
exports.getInfoForFormat = getInfoForFormat;
exports.formatFingerprint = formatFingerprint;
exports.formatKeyId = formatKeyId;
exports.scaleImage = scaleImage;
exports.quoteRegexp = quoteRegexp;
exports.checkReferrer = checkReferrer;
exports.normaliseArrayParam = normaliseArrayParam;