From 375bcc56959abe6b53899c6edf45aa5ff7e559d7 Mon Sep 17 00:00:00 2001 From: Pedro Rosario Date: Thu, 27 Jun 2019 10:46:17 -0400 Subject: [PATCH 1/3] Change user of page metadata from object to id string --- lib/bootstrap.js | 4 ++-- lib/services/metadata.js | 41 +++++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/lib/bootstrap.js b/lib/bootstrap.js index 9699b630..2557d011 100644 --- a/lib/bootstrap.js +++ b/lib/bootstrap.js @@ -9,8 +9,8 @@ const path = require('path'), dbOps = require('./services/db-operations'), siteService = require('./services/sites'), references = require('./services/references'), + { createUserUri } = require('./services/metadata'), highland = require('highland'), - { encode } = require('./services/buffer'), locals = require('./locals'); var log = require('./services/logger').setup({ file: __filename, @@ -221,7 +221,7 @@ function load(data, site) { ).then(_.flatten); }); promisePagesOps = saveObjects(`${prefix}/_pages/`, compData._pages, (name, item) => [getPutOperation(name, item)]); - promiseUsersOps = saveObjects('', compData._users, (name, item) => [getPutOperation(`/_users/${encode(`${item.username}@${item.provider}`)}`, item)]); + promiseUsersOps = saveObjects('', compData._users, (name, item) => [getPutOperation(`/_users/${createUserUri(item)}`, item)]); /* eslint max-params: ["error", 5] */ return bluebird.join(promiseComponentsOps, promisePagesOps, promiseUrisOps, promiseListsOps, promiseUsersOps, function (componentsOps, pagesOps, urisOps, listsOps, userOps) { diff --git a/lib/services/metadata.js b/lib/services/metadata.js index 468f97b9..45bbd4e0 100644 --- a/lib/services/metadata.js +++ b/lib/services/metadata.js @@ -2,10 +2,23 @@ const _ = require('lodash'), bus = require('./bus'), + { encode } = require('./buffer'), { replaceVersion } = require('clayutils'), sitesService = require('./sites'); var db = require('./db'); +/** + * Creates the id for a user + * + * @param {Object} user + * @param {string} user.username + * @param {string} user.provider + * @returns {string} + */ +function createUserUri({ username = '', provider = '' }) { + return encode(`${username}@${provider}`); +} + /** * Either return the user object or * the system for a specific action @@ -14,18 +27,19 @@ var db = require('./db'); * @returns {Object} */ function userOrRobot(user) { - if (user && _.get(user, 'username') && _.get(user, 'provider')) { - return user; - } else { - // no actual user, this was an api key - return { - username: 'robot', - provider: 'clay', - imageUrl: 'clay-avatar', // kiln will supply a clay avatar - name: 'Clay', - auth: 'admin' - }; - } + const output = user && _.get(user, 'username') && _.get(user, 'provider') + ? user + : { username: 'robot', provider: 'clay' }; + + return createUserUri(output); + // TODO: Save the following data in `/_users/${btoa('robot@clay')}` + // return { + // username: 'robot', + // provider: 'clay', + // imageUrl: 'clay-avatar', // kiln will supply a clay avatar + // name: 'Clay', + // auth: 'admin' + // }; } /** @@ -71,7 +85,7 @@ function createPage(ref, user) { title: '', authors: [], users, - history: [{action: 'create', timestamp: NOW, users }], + history: [{ action: 'create', timestamp: NOW, users }], siteSlug: sitesService.getSiteFromPrefix(ref.substring(0, ref.indexOf('/_pages'))).slug }; @@ -283,6 +297,7 @@ module.exports.publishLayout = publishLayout; module.exports.unpublishPage = unpublishPage; module.exports.userOrRobot = userOrRobot; module.exports.checkProps = checkProps; +module.exports.createUserUri = createUserUri; // For testing module.exports.setDb = mock => db = mock; From 8d54790f430404ad554d3ed97139244071ccbb97 Mon Sep 17 00:00:00 2001 From: Jordan Paulino Date: Tue, 9 Jul 2019 14:00:15 -0400 Subject: [PATCH 2/3] Modify bootstrap function --- lib/services/metadata.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/services/metadata.js b/lib/services/metadata.js index 45bbd4e0..b492afcd 100644 --- a/lib/services/metadata.js +++ b/lib/services/metadata.js @@ -27,19 +27,15 @@ function createUserUri({ username = '', provider = '' }) { * @returns {Object} */ function userOrRobot(user) { - const output = user && _.get(user, 'username') && _.get(user, 'provider') + const { username, provider } = user && _.get(user, 'username') && _.get(user, 'provider') ? user : { username: 'robot', provider: 'clay' }; - return createUserUri(output); - // TODO: Save the following data in `/_users/${btoa('robot@clay')}` - // return { - // username: 'robot', - // provider: 'clay', - // imageUrl: 'clay-avatar', // kiln will supply a clay avatar - // name: 'Clay', - // auth: 'admin' - // }; + return { + id: createUserUri({ username, provider }), + username, + provider + }; } /** From a66c5115404a516648ec8c9e9b6e2d97f046aa5d Mon Sep 17 00:00:00 2001 From: Jordan Paulino Date: Thu, 11 Jul 2019 14:52:36 -0400 Subject: [PATCH 3/3] Add tests --- lib/services/metadata.js | 1 + lib/services/metadata.test.js | 19 +++++++++++++++++++ package-lock.json | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/services/metadata.js b/lib/services/metadata.js index b492afcd..b91ff6f7 100644 --- a/lib/services/metadata.js +++ b/lib/services/metadata.js @@ -296,4 +296,5 @@ module.exports.checkProps = checkProps; module.exports.createUserUri = createUserUri; // For testing +module.exports.userOrRobot = userOrRobot; module.exports.setDb = mock => db = mock; diff --git a/lib/services/metadata.test.js b/lib/services/metadata.test.js index c153a7b4..db0854d6 100644 --- a/lib/services/metadata.test.js +++ b/lib/services/metadata.test.js @@ -257,6 +257,25 @@ describe(_.startCase(filename), function () { expect(resp).to.eql(errMsg); }); }); + }); + + describe('userOrRobot', function () { + const fn = lib[this.title]; + + it('should return the user object', function () { + const username = 'pizza@everyday', + provider = 'doesntmatter', + userOrRobot = fn({ username, provider }), + expectedValue = { id: 'cGl6emFAZXZlcnlkYXlAZG9lc250bWF0dGVy', username, provider }; + expect(userOrRobot).to.eql(expectedValue); + }); + + it('should return the system user (robot) object', function () { + const userOrRobot = fn(), + expectedValue = { id: 'cm9ib3RAY2xheQ==', username: 'robot', provider: 'clay' }; + + expect(userOrRobot).to.eql(expectedValue); + }); }); }); diff --git a/package-lock.json b/package-lock.json index 818e75f3..d19ea16f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2182,7 +2182,7 @@ "dependencies": { "commander": { "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true },