INNER CODE UNIT · JavaScript
doEncrypt
wangshengithub/staticshield · src/server.js:42
async function doEncrypt(body) {
if (!body || typeof body !== 'object') throw new Error('请求体格式错误');
var password = body.password, files = body.files, mode = body.mode || 'single';
if (!password) throw new Error('密码不能为空');
if (!Array.isArray(files) || files.length === 0) throw new Error('未提供任何文件');
var html, stats = {};
if (mode === 'site') {
var siteTmp = fs.mkdtempSync(path.join(os.tmpdir(), 'ss-gui-'));
try {
for (var si = 0; si < files.length; si++) safeWrite(siteTmp, files[si].path, files[si].content, files[si].isDataUri);
var siteRes = await batchEncryptDir(siteTmp, password, { useSha512: !!body.useSha512, hint: body.hint, rememberDays: body.rememberDays, logo: body.logo });
var zipFiles = require('./zip').zipFiles;
var siteItems = siteRes.pages.map(r => ({ path: r.path, data: r.product })).concat(siteRes.assets.map(a => ({ path: a.path, data: a.data })));
var siteZip = zipFiles(siteItems);
var siteAgg = { css: 0, js: 0, img: 0, icon: 0, imp: 0 };
siteRes.pages.forEach(r => { siteAgg.css += r.stats.css || 0; siteAgg.js += r.stats.js || 0; siteAgg.img += r.stats.img || 0; siteAgg.icon += r.stats.icon || 0; siteAgg.imp += r.stats.import || 0; });
return { ok: true, zip: siteZip.toString('base64'), count: siteRes.pages.length, assetCount: siteRes.assets.length, stats: siteAgg };
} finally { try { fs.rmSync(siteTmp, { recursive: true, force: true }); } catch (e) {} }