mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-14 12:52:42 +00:00
Add MD5 hash check
This commit is contained in:
@@ -4,6 +4,7 @@ const React = require('react');
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const createClass = require('create-react-class');
|
const createClass = require('create-react-class');
|
||||||
import {makePatches, applyPatches, stringifyPatches, parsePatches} from '@sanity/diff-match-patch';
|
import {makePatches, applyPatches, stringifyPatches, parsePatches} from '@sanity/diff-match-patch';
|
||||||
|
import { md5 } from 'hash-wasm';
|
||||||
|
|
||||||
import request from '../../utils/request-middleware.js';
|
import request from '../../utils/request-middleware.js';
|
||||||
const { Meta } = require('vitreum/headtags');
|
const { Meta } = require('vitreum/headtags');
|
||||||
@@ -263,6 +264,7 @@ const EditPage = createClass({
|
|||||||
brew.pageCount = ((brew.renderer=='legacy' ? brew.text.match(/\\page/g) : brew.text.match(/^\\page$/gm)) || []).length + 1;
|
brew.pageCount = ((brew.renderer=='legacy' ? brew.text.match(/\\page/g) : brew.text.match(/^\\page$/gm)) || []).length + 1;
|
||||||
|
|
||||||
brew.patches = makePatches(this.savedBrew.text, brew.text);
|
brew.patches = makePatches(this.savedBrew.text, brew.text);
|
||||||
|
brew.hash = await md5(this.savedBrew.text);
|
||||||
brew.text = undefined;
|
brew.text = undefined;
|
||||||
brew.textBin = undefined;
|
brew.textBin = undefined;
|
||||||
console.log('Saving Brew', brew);
|
console.log('Saving Brew', brew);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import yaml from 'js-yaml';
|
|||||||
import asyncHandler from 'express-async-handler';
|
import asyncHandler from 'express-async-handler';
|
||||||
import { nanoid } from 'nanoid';
|
import { nanoid } from 'nanoid';
|
||||||
import {makePatches, applyPatches, stringifyPatches, parsePatch} from '@sanity/diff-match-patch';
|
import {makePatches, applyPatches, stringifyPatches, parsePatch} from '@sanity/diff-match-patch';
|
||||||
|
import { md5 } from 'hash-wasm';
|
||||||
import { splitTextStyleAndMetadata,
|
import { splitTextStyleAndMetadata,
|
||||||
brewSnippetsToJSON } from '../shared/helpers.js';
|
brewSnippetsToJSON } from '../shared/helpers.js';
|
||||||
import checkClientVersion from './middleware/check-client-version.js';
|
import checkClientVersion from './middleware/check-client-version.js';
|
||||||
@@ -338,11 +339,12 @@ const api = {
|
|||||||
// Initialize brew from request and body, destructure query params, and set the initial value for the after-save method
|
// Initialize brew from request and body, destructure query params, and set the initial value for the after-save method
|
||||||
const brewFromClient = api.excludePropsFromUpdate(req.body);
|
const brewFromClient = api.excludePropsFromUpdate(req.body);
|
||||||
const brewFromServer = req.brew;
|
const brewFromServer = req.brew;
|
||||||
|
const serverHash = md5(brewFromServer.text);
|
||||||
|
|
||||||
if(brewFromServer.version && brewFromClient.version && brewFromServer.version > brewFromClient.version) {
|
if((brewFromServer?.version !== brewFromClient?.version) || (serverHash !== brewFromClient.hash)) {
|
||||||
console.log(`Version mismatch on brew ${brewFromClient.editId}`);
|
console.log(`Version mismatch on brew ${brewFromClient.editId}`);
|
||||||
res.setHeader('Content-Type', 'application/json');
|
res.setHeader('Content-Type', 'application/json');
|
||||||
return res.status(409).send(JSON.stringify({ message: `The brew has been changed on a different device. Please save your changes elsewhere, refresh, and try again.` }));
|
return res.status(409).send(JSON.stringify({ message: `The server copy is out of sync with the saved brew. Please save your changes elsewhere, refresh, and try again.` }));
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`Brewfromserver: ${JSON.stringify(brewFromServer)}`);
|
console.log(`Brewfromserver: ${JSON.stringify(brewFromServer)}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user