fix blobIds - they shouldn't contain + and / characters

This commit is contained in:
zadam 2023-07-28 15:55:26 +02:00
parent bd22863bb7
commit 72122d0f95
4 changed files with 26 additions and 8 deletions

View File

@ -0,0 +1,14 @@
UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X');
UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE notes SET blobId = REPLACE(blobId, '+', 'X');
UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X');
UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X');
UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE entity_changes SET entityId = REPLACE(blobId, '+', 'X') WHERE entityName = 'blobs';
UPDATE entity_changes SET entityId = REPLACE(blobId, '/', 'Y') WHERE entityName = 'blobs';

View File

@ -4,8 +4,8 @@ const build = require('./build');
const packageJson = require('../../package');
const {TRILIUM_DATA_DIR} = require('./data_dir');
const APP_DB_VERSION = 223;
const SYNC_VERSION = 30;
const APP_DB_VERSION = 224;
const SYNC_VERSION = 31;
const CLIPPER_PROTOCOL_VERSION = "1.0";
module.exports = {

View File

@ -56,10 +56,9 @@ async function sync() {
catch (e) {
proxyToggle = !proxyToggle;
if (e.message &&
(e.message.includes('ECONNREFUSED') ||
e.message.includes('ERR_') || // node network errors
e.message.includes('Bad Gateway'))) {
if (e.message?.includes('ECONNREFUSED') ||
e.message?.includes('ERR_') || // node network errors
e.message?.includes('Bad Gateway')) {
ws.syncFailed();

View File

@ -28,8 +28,13 @@ function hashedBlobId(content) {
// sha512 is faster than sha256
const base64Hash = crypto.createHash('sha512').update(content).digest('base64');
// 20 characters of base64 gives us 120 bit of entropy which is plenty enough
return base64Hash.substr(0, 20);
// we don't want such + and / in the IDs
const kindaBase62Hash = base64Hash
.replace('+', 'X')
.replace('/', 'Y');
// 20 characters of base62 gives us ~120 bit of entropy which is plenty enough
return kindaBase62Hash.substr(0, 20);
}
function toBase64(plainText) {