Upload logo: fix issue and add button to restore default logo

This commit is contained in:
yflory 2024-03-15 16:38:06 +01:00
parent 056073983c
commit 21025c317f
3 changed files with 58 additions and 12 deletions

View File

@ -917,6 +917,11 @@ var deleteInvitation = (Env, Server, cb, data) => {
};
const MAX_LOGO_SIZE = 200*1024; // 200KB
var removeLogo = (Env, Server, cb) => {
Fse.unlink('./customize/CryptPad_logo_hero.svg', (err) => {
cb(err);
});
};
var uploadLogo = (Env, Server, cb, data, unsafeKey) => {
const args = Array.isArray(data) && data[1];
if (!args || typeof(args) !== 'object') { return void cb("EINVAL"); }
@ -1031,6 +1036,7 @@ var commands = {
UPDATE_KNOWN_USER: updateKnownUser,
UPLOAD_LOGO: uploadLogo,
REMOVE_LOGO: removeLogo,
};
// addFirstAdmin is an anon_rpc command

View File

@ -684,13 +684,16 @@ app.get('/api/profiling', function (req, res) {
});
app.get('/api/logo', function (req, res) {
let path = Path.resolve('./customize/CryptPad_logo.svg');
let base = Path.resolve('./customize.dist/CryptPad_logo.svg');
let path = Path.resolve('./customize/CryptPad_logo_hero.svg');
let base = Path.resolve('./customize.dist/CryptPad_logo_hero.svg');
Fs.exists(path, function (exists) {
let mime = Env.logoMimeType || 'image/svg+xml';
res.setHeader('Content-Type', mime + '; charset=utf-8');
if (exists) { return Fs.createReadStream(path).pipe(res); }
Fs.createReadStream(base).pipe(res);
res.setHeader('Content-Disposition', 'inline');
if (exists) {
let mime = Env.logoMimeType || 'image/svg+xml';
res.setHeader('Content-Type', mime);
return res.sendFile(path);
}
res.sendFile(base);
});
});

View File

@ -3898,22 +3898,39 @@ Example
return $div;
};
// XXX
Messages.admin_logoTitle = "Upload Logo";
Messages.admin_logoHint = "Max 200KB, svg, png or jpg";
Messages.admin_logoButton = "Upload";
Messages.admin_logoButton = "Upload new";
Messages.admin_logoRemoveButton = "Restore default";
create['logo'] = function () {
var key = 'logo';
var $div = makeBlock(key, true); // Msg.admin_emailHint, Msg.admin_emailTitle
let $button = $div.find('button');
var $div = makeBlock(key, false); // Msg.admin_emailHint, Msg.admin_emailTitle
var input = h('input', {
type: 'file',
accept: 'image/*',
'aria-labelledby': 'cp-admin-logo'
});
$(h('div', input)).insertBefore($button);
var currentContainer = h('div');
let redraw = () => {
var current = h('img', {src: '/api/logo?'+(+new Date())});
$(currentContainer).empty().append(current);
};
redraw();
var upload = h('button.btn.btn-primary', Messages.admin_logoButton);
var remove = h('button.btn.btn-danger', Messages.admin_logoRemoveButton);
$div.append([
currentContainer,
h('div', input),
h('nav', [upload, remove])
]);
let $button = $(upload);
let $remove = $(remove);
var spinner = UI.makeSpinner($div);
Util.onClickEnter($button, function () {
@ -3931,17 +3948,37 @@ Example
$button.removeAttr('disabled');
if (err) {
UI.warn(Messages.error);
$input.val('');
$(input).val('');
console.error(err, response);
spinner.hide();
return;
}
redraw();
spinner.done();
UI.log(Messages.saved);
});
};
reader.readAsDataURL(files[0]);
});
UI.confirmButton($remove, {
classes: 'btn-danger',
multiple: true
}, function () {
spinner.spin();
$remove.attr('disabled', 'disabled');
sframeCommand('REMOVE_LOGO', {}, (err, response) => {
$remove.removeAttr('disabled');
if (err) {
UI.warn(Messages.error);
console.error(err, response);
spinner.hide();
return;
}
redraw();
spinner.done();
UI.log(Messages.saved);
});
});
return $div;
};