diff --git a/package.json b/package.json index d0a643c..c7f7e9e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ }, "dependencies": { "@babel/polyfill": "^7.0.0", - "blueimp-md5": "^2.10.0", "body-parser": "latest", "codex.editor": "^2.1.3", "codex.editor.header": "^2.0.5", diff --git a/src/controllers/pages.js b/src/controllers/pages.js index 9e06e78..39a21f0 100644 --- a/src/controllers/pages.js +++ b/src/controllers/pages.js @@ -1,7 +1,7 @@ const Model = require('../models/page'); const Alias = require('../models/alias'); const aliasTypes = require('../constants/aliasTypes'); -const md5 = require('blueimp-md5'); +const md5 = require('../utils/md5'); /** * @class Pages @@ -15,7 +15,7 @@ class Pages { * @returns {['title', 'body']} */ static get REQUIRED_FIELDS() { - return ['body']; + return [ 'body' ]; } /** diff --git a/src/models/alias.js b/src/models/alias.js index 07381cb..4eb669a 100644 --- a/src/models/alias.js +++ b/src/models/alias.js @@ -1,5 +1,5 @@ const {aliases: aliasesDb} = require('../utils/database/index'); -const md5 = require('blueimp-md5'); +const md5 = require('../utils/md5'); /** * @typedef {Object} AliasData * @property {string} _id - alias id diff --git a/src/models/page.js b/src/models/page.js index 33a3fb9..23ce92f 100644 --- a/src/models/page.js +++ b/src/models/page.js @@ -148,29 +148,14 @@ class Page { * @returns {Promise} */ async save() { - let newUri = this.uri; - let pageWithSameUri = await Page.getByUri(newUri); - let pageWithSameUriCount = 0; - - while (pageWithSameUri._id && pageWithSameUri._id !== this._id) { - pageWithSameUriCount++; - pageWithSameUri = await Page.getByUri(newUri + `-${pageWithSameUriCount}`); - } - - this.uri = pageWithSameUriCount ? newUri + `-${pageWithSameUriCount}` : newUri; + this.uri = await this.composeUri(this.uri); if (!this._id) { - const insertedRow = await pagesDb.insert({ - ...this.data, - uri: this.uri - }); + const insertedRow = await pagesDb.insert(this.data); this._id = insertedRow._id; } else { - await pagesDb.update({_id: this._id}, { - ...this.data, - uri: this.uri - }); + await pagesDb.update({_id: this._id}, this.data); } return this; @@ -189,6 +174,23 @@ class Page { return this; } + /** + * Find and return available uri + * + * @returns {Promise} + */ + async composeUri(uri) { + let pageWithSameUri = await Page.getByUri(uri); + let pageWithSameUriCount = 0; + + while (pageWithSameUri._id && pageWithSameUri._id !== this._id) { + pageWithSameUriCount++; + pageWithSameUri = await Page.getByUri(uri + `-${pageWithSameUriCount}`); + } + + return pageWithSameUriCount ? uri + `-${pageWithSameUriCount}` : uri; + } + /** * Return readable page data * diff --git a/src/utils/md5.js b/src/utils/md5.js new file mode 100644 index 0000000..dff38a6 --- /dev/null +++ b/src/utils/md5.js @@ -0,0 +1,12 @@ +const crypto = require('crypto'); + +/** + * Create binary md5 + * @param stringToHash - string to hash + * @returns {string} - binary hash of argument + */ +module.exports = function md5(stringToHash) { + return crypto.createHash('md5') + .update(stringToHash) + .digest('binary'); +}; diff --git a/yarn.lock b/yarn.lock index 526f9fb..de40920 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1162,11 +1162,6 @@ bluebird@^3.5.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== -blueimp-md5@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.10.0.tgz#02f0843921f90dca14f5b8920a38593201d6964d" - integrity sha512-EkNUOi7tpV68TqjpiUz9D9NcT8um2+qtgntmMbi5UKssVX2m/2PLqotcric0RE63pB3HPN/fjf3cKHN2ufGSUQ== - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"