From 25359ee88df36b86e779f40258aee84d217ab202 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 22 Jan 2018 16:11:13 -0700 Subject: [PATCH 1/4] Moderation Refactor --- graph/connectors.js | 2 + graph/mutators/comment.js | 282 +------------------ models/asset.js | 12 +- services/moderation/index.js | 130 +++++++++ services/moderation/phases/assetClosed.js | 9 + services/moderation/phases/commentLength.js | 31 ++ services/moderation/phases/index.js | 7 + services/moderation/phases/karma.js | 33 +++ services/moderation/phases/links.js | 26 ++ services/moderation/phases/premod.js | 15 + services/moderation/phases/staff.js | 10 + services/moderation/phases/wordlist.js | 56 ++++ test/server/graph/mutations/createComment.js | 7 +- 13 files changed, 346 insertions(+), 274 deletions(-) create mode 100644 services/moderation/index.js create mode 100644 services/moderation/phases/assetClosed.js create mode 100644 services/moderation/phases/commentLength.js create mode 100644 services/moderation/phases/index.js create mode 100644 services/moderation/phases/karma.js create mode 100644 services/moderation/phases/links.js create mode 100644 services/moderation/phases/premod.js create mode 100644 services/moderation/phases/staff.js create mode 100644 services/moderation/phases/wordlist.js diff --git a/graph/connectors.js b/graph/connectors.js index a27b9d38c..976f05b71 100644 --- a/graph/connectors.js +++ b/graph/connectors.js @@ -24,6 +24,7 @@ const Limit = require('../services/limit'); const Mailer = require('../services/mailer'); const Metadata = require('../services/metadata'); const Migration = require('../services/migration'); +const Moderation = require('../services/moderation'); const Mongoose = require('../services/mongoose'); const Passport = require('../services/passport'); const Plugins = require('../services/plugins'); @@ -62,6 +63,7 @@ const connectors = { Mailer, Metadata, Migration, + Moderation, Mongoose, Passport, Plugins, diff --git a/graph/mutators/comment.js b/graph/mutators/comment.js index 6106f819c..7e0607287 100644 --- a/graph/mutators/comment.js +++ b/graph/mutators/comment.js @@ -1,13 +1,11 @@ const errors = require('../../errors'); const ActionModel = require('../../models/action'); -const AssetsService = require('../../services/assets'); const ActionsService = require('../../services/actions'); const TagsService = require('../../services/tags'); const CommentsService = require('../../services/comments'); const KarmaService = require('../../services/karma'); const merge = require('lodash/merge'); -const linkify = require('linkify-it')().tlds(require('tlds')); -const Wordlist = require('../../services/wordlist'); + const { CREATE_COMMENT, SET_COMMENT_STATUS, @@ -15,10 +13,6 @@ const { EDIT_COMMENT, } = require('../../perms/constants'); const debug = require('debug')('talk:graph:mutators:comment'); -const { - DISABLE_AUTOFLAG_SUSPECT_WORDS, - IGNORE_FLAGS_AGAINST_STAFF, -} = require('../../config'); const resolveTagsForComment = async ( { user, loaders: { Tags } }, @@ -188,279 +182,27 @@ const createComment = async ( return comment; }; -/** - * Filters the comment object and outputs wordlist results. - * @param {Object} context graphql context - * @param {String} body body of a comment - * @param {String} [asset_id] id of asset comment is posted on - * @return {Object} resolves to the wordlist results - */ -const filterNewComment = async (context, { body, asset_id }) => { - // Load the settings. - const [settings, asset] = await Promise.all([ - context.loaders.Settings.load(), - context.loaders.Assets.getByID.load(asset_id), - ]); - - // Create a new instance of the Wordlist. - const wl = new Wordlist(); - - // Load the wordlist. - wl.upsert(settings.wordlist); - - // Load the wordlist and filter the comment content. - return [ - // Scan the word. - wl.scan('body', body), - - // Return the asset's settings. - await AssetsService.rectifySettings(asset, settings), - ]; -}; - -/** - * moderationPhases is an array of phases carried out in order until a status is - * returned. - */ -const moderationPhases = [ - // This phase checks to see if the comment is long enough. - (context, comment) => { - // Check to see if the body is too short, if it is, then complain about it! - if (comment.body.length < 2) { - throw errors.ErrCommentTooShort; - } - }, - - // This phase checks to see if the asset being processed is closed or not. - (context, comment, { asset }) => { - // Check to see if the asset has closed commenting... - if (asset.isClosed) { - throw new errors.ErrAssetCommentingClosed(asset.closedMessage); - } - }, - - // This phase checks the comment against the wordlist. - (context, comment, { wordlist }) => { - // Decide the status based on whether or not the current asset/settings - // has pre-mod enabled or not. If the comment was rejected based on the - // wordlist, then reject it, otherwise if the moderation setting is - // premod, set it to `premod`. - if (wordlist.banned) { - // Add the flag related to Trust to the comment. - return { - status: 'REJECTED', - actions: [ - { - action_type: 'FLAG', - user_id: null, - group_id: 'BANNED_WORD', - metadata: {}, - }, - ], - }; - } - - // If the comment has a suspect word or a link, we need to add a - // flag to it to indicate that it needs to be looked at. - // Otherwise just return the new comment. - - // If the wordlist has matched the suspect word filter and we haven't disabled - // auto-flagging suspect words, then we should flag the comment! - if (wordlist.suspect && !DISABLE_AUTOFLAG_SUSPECT_WORDS) { - // TODO: this is kind of fragile, we should refactor this to resolve - // all these const's that we're using like 'COMMENTS', 'FLAG' to be - // defined in a checkable schema. - return { - actions: [ - { - action_type: 'FLAG', - user_id: null, - group_id: 'SUSPECT_WORD', - metadata: {}, - }, - ], - }; - } - }, - - // This phase checks to see if the comment's length exceeds maximum. - (context, comment, { assetSettings: { charCountEnable, charCount } }) => { - // Reject if the comment is too long - if (charCountEnable && comment.body.length > charCount) { - // Add the flag related to Trust to the comment. - return { - status: 'REJECTED', - actions: [ - { - action_type: 'FLAG', - user_id: null, - group_id: 'BODY_COUNT', - metadata: { - count: comment.body.length, - }, - }, - ], - }; - } - }, - - // If a given user is a staff member, always approve their comment. - context => { - if (IGNORE_FLAGS_AGAINST_STAFF && context.user && context.user.isStaff()) { - return { - status: 'ACCEPTED', - }; - } - }, - - // This phase checks the comment if it has any links in it if the check is - // enabled. - (context, comment, { assetSettings: { premodLinksEnable } }) => { - if (premodLinksEnable && linkify.test(comment.body)) { - // Add the flag related to Trust to the comment. - return { - status: 'SYSTEM_WITHHELD', - actions: [ - { - action_type: 'FLAG', - user_id: null, - group_id: 'LINKS', - metadata: { - links: comment.body, - }, - }, - ], - }; - } - }, - - // This phase checks to see if the user making the comment is allowed to do so - // considering their reliability (Trust) status. - context => { - if (context.user && context.user.metadata) { - // If the user is not a reliable commenter (passed the unreliability - // threshold by having too many rejected comments) then we can change the - // status of the comment to `SYSTEM_WITHHELD`, therefore pushing the user's - // comments away from the public eye until a moderator can manage them. This of - // course can only be applied if the comment's current status is `NONE`, - // we don't want to interfere if the comment was rejected. - if ( - KarmaService.isReliable('comment', context.user.metadata.trust) === - false - ) { - // Add the flag related to Trust to the comment. - return { - status: 'SYSTEM_WITHHELD', - actions: [ - { - action_type: 'FLAG', - user_id: null, - group_id: 'TRUST', - metadata: { - trust: context.user.metadata.trust, - }, - }, - ], - }; - } - } - }, - - // This phase checks to see if the comment was already prescribed a status. - (context, comment) => { - // If the status was already defined, don't redefine it. It's only defined - // when specific external conditions exist, we don't want to override that. - if (comment.status && comment.status.length > 0) { - return { - status: comment.status, - }; - } - }, - - // This phase checks to see if the settings have premod enabled, if they do, - // the comment is premod, otherwise, it's just none. - (context, comment, { assetSettings: { moderation } }) => { - // If the settings say that we're in premod mode, then the comment is in - // premod status. - if (moderation === 'PRE') { - return { - status: 'PREMOD', - }; - } - - return { - status: 'NONE', - }; - }, -]; - -/** - * This resolves a given comment's status and actions. - * @param {Object} context graphql context - * @param {String} body body of the comment - * @param {String} [asset_id] asset for the comment - * @param {Object} [wordlist={}] the results of the wordlist scan - * @return {Promise} resolves to the comment's status and actions - */ -const resolveCommentModeration = async (context, comment) => { - // First we filter the comment contents to ensure that we note any validation - // issues. - let [wordlist, settings] = await filterNewComment(context, comment); - - // Get the asset from the loader. - const asset = await context.loaders.Assets.getByID.load(comment.asset_id); - if (!asset) { - // And leave now if this asset wasn't found. - throw errors.ErrNotFound; - } - - // Combine the asset and the settings to get the asset settings. - const assetSettings = await AssetsService.rectifySettings(asset, settings); - - let actions = comment.actions || []; - - // Loop over all the moderation phases and see if we've resolved the status. - for (const phase of moderationPhases) { - const result = await phase(context, comment, { - asset, - assetSettings, - settings, - wordlist, - }); - - if (result) { - if (result.actions) { - actions.push(...result.actions); - } - - // If this result contained a status, then we've finished resolving - // phases! - if (result.status) { - return { status: result.status, actions }; - } - } - } -}; - /** * createPublicComment is designed to create a comment from a public source. It * validates the comment, and performs some automated moderator actions based on * the settings. - * @param {Object} context the graphql context + * @param {Object} ctx the graphql context * @param {Object} commentInput the new comment to be created * @return {Promise} resolves to a new comment */ -const createPublicComment = async (context, comment) => { +const createPublicComment = async (ctx, comment) => { + const { connectors: { services: { Moderation } } } = ctx; + // We then take the wordlist and the comment into consideration when // considering what status to assign the new comment, and resolve the new // status to set the comment to. - let { actions, status } = await resolveCommentModeration(context, comment); + let { actions, status } = await Moderation.process(ctx, comment); // Assign status to comment. comment.status = status; // Then we actually create the comment with the new status. - const result = await createComment(context, comment); + const result = await createComment(ctx, comment); // Create all the actions that were determined during the moderation check // phase. @@ -522,18 +264,20 @@ const setStatus = async ({ user, loaders: { Comments } }, { id, status }) => { * @param {Object} edit describes how to edit the comment * @param {String} edit.body the new Comment body */ -const edit = async (context, { id, asset_id, edit: { body } }) => { +const edit = async (ctx, { id, asset_id, edit: { body } }) => { + const { connectors: { services: { Moderation } } } = ctx; + // Build up the new comment we're setting. We need to check this with // moderation now. let comment = { id, asset_id, body }; // Determine the new status of the comment. - const { actions, status } = await resolveCommentModeration(context, comment); + const { actions, status } = await Moderation.process(ctx, comment); // Execute the edit. comment = await CommentsService.edit({ id, - author_id: context.user.id, + author_id: ctx.user.id, body, status, }); @@ -543,7 +287,7 @@ const edit = async (context, { id, asset_id, edit: { body } }) => { await createActions(comment.id, actions); // Publish the edited comment via the subscription. - context.pubsub.publish('commentEdited', comment); + ctx.pubsub.publish('commentEdited', comment); return comment; }; diff --git a/models/asset.js b/models/asset.js index 68ca08bbf..6fdea3b78 100644 --- a/models/asset.js +++ b/models/asset.js @@ -2,6 +2,7 @@ const mongoose = require('../services/mongoose'); const Schema = mongoose.Schema; const uuid = require('uuid'); const TagLinkSchema = require('./schema/tag_link'); +const get = require('lodash/get'); const AssetSchema = new Schema( { @@ -45,8 +46,8 @@ const AssetSchema = new Schema( // the base settings from the base Settings object. This is to be accessed // always after running `rectifySettings` against it. settings: { - type: Schema.Types.Mixed, default: {}, + type: Object, }, // Tags are added by the self or by administrators. @@ -85,9 +86,12 @@ AssetSchema.index( * Returns true if the asset is closed, false else. */ AssetSchema.virtual('isClosed').get(function() { - return Boolean( - this.closedAt && this.closedAt.getTime() <= new Date().getTime() - ); + const closedAt = get(this, 'closedAt', null); + if (closedAt === null) { + return false; + } + + return closedAt.getTime() <= new Date().getTime(); }); const Asset = mongoose.model('Asset', AssetSchema); diff --git a/services/moderation/index.js b/services/moderation/index.js new file mode 100644 index 000000000..4d87e190f --- /dev/null +++ b/services/moderation/index.js @@ -0,0 +1,130 @@ +const errors = require('../../errors'); +const get = require('lodash/get'); + +// Load in the phases to use. +const { + wordlist, + commentLength, + assetClosed, + karma, + staff, + links, + premod, +} = require('./phases'); + +// This phase checks to see if the comment was already prescribed a status. This +// essentially provides a hook for plugins to inject their own comments. +const applyPreexisting = (ctx, comment) => { + const status = get(comment, 'status'); + + // If the status was already defined, don't redefine it. It's only defined + // when specific external conditions exist, we don't want to override that. + if (status) { + return { + status, + }; + } +}; + +// Applies the defaulted status. +const applyStatus = status => () => ({ status }); + +/** + * phases is an array of moderation phases carried out in order until a status is + * returned. + */ +const phases = [ + commentLength, + assetClosed, + wordlist, + staff, + links, + karma, + applyPreexisting, + premod, + applyStatus('NONE'), +]; + +/** + * compose will create a moderation pipeline for which is executable with the + * passed actions. + * + * @param {Array} phases the set of moderation phases to pass the comment and + * their options through. + */ +const compose = phases => async (ctx, comment, options) => { + const actions = get(comment, 'actions', []); + + // Loop over all the moderation phases and see if we've resolved the status. + for (const phase of phases) { + const result = await phase(ctx, comment, options); + if (result) { + if (result.actions) { + actions.push(...result.actions); + } + + // If this result contained a status, then we've finished resolving + // phases! + if (result.status) { + return { status: result.status, actions }; + } + } + } +}; + +/** + * fetchOptions will generate the options used by the moderation service to + * determine the end status. + * + * @param {Object} ctx graph context + * @param {Object} comment comment object to use + */ +const fetchOptions = async (ctx, comment) => { + const { + connectors: { services: { Assets: AssetsService } }, + loaders: { Settings, Assets }, + } = ctx; + + // Load the settings. + const settings = await Settings.load(); + + // Pull the asset id out of the comment. + const assetID = get(comment, 'asset_id', null); + if (assetID === null) { + // And leave now if this asset wasn't found. + throw errors.ErrNotFound; + } + + // Load the asset. + const asset = await Assets.getByID.load(assetID); + if (!asset) { + // And leave now if this asset wasn't found. + throw errors.ErrNotFound; + } + + // Combine the asset and the settings to get the asset settings. + asset.settings = await AssetsService.rectifySettings(asset, settings); + + // Create the options that will be consumed by the phases. + return { + asset, + settings, + }; +}; + +/** + * process the comment and return moderation details. + * + * @param {Object} ctx graphql context + * @param {Object} comment comment to perform the moderation phases on + */ +const process = async (ctx, comment) => { + // Fetch the options to use for the moderation phases. + const options = await fetchOptions(ctx, comment); + + // Compose a moderation pipeline from the moderation phases and execute it on + // the comment. + return compose(phases)(ctx, comment, options); +}; + +module.exports.process = process; diff --git a/services/moderation/phases/assetClosed.js b/services/moderation/phases/assetClosed.js new file mode 100644 index 000000000..075028764 --- /dev/null +++ b/services/moderation/phases/assetClosed.js @@ -0,0 +1,9 @@ +const { ErrAssetCommentingClosed } = require('../../../errors'); + +// This phase checks to see if the asset being processed is closed or not. +module.exports = (ctx, comment, { asset }) => { + // Check to see if the asset has closed commenting... + if (asset.isClosed) { + throw new ErrAssetCommentingClosed(asset.closedMessage); + } +}; diff --git a/services/moderation/phases/commentLength.js b/services/moderation/phases/commentLength.js new file mode 100644 index 000000000..925115326 --- /dev/null +++ b/services/moderation/phases/commentLength.js @@ -0,0 +1,31 @@ +const { ErrCommentTooShort } = require('../../../errors'); + +// This phase checks to see if the comment is long enough. +module.exports = ( + ctx, + comment, + { asset: { settings: { charCountEnable, charCount } } } +) => { + // Check to see if the body is too short, if it is, then complain about it! + if (comment.body.length < 2) { + throw ErrCommentTooShort; + } + + // Reject if the comment is too long + if (charCountEnable && comment.body.length > charCount) { + // Add the flag related to Trust to the comment. + return { + status: 'REJECTED', + actions: [ + { + action_type: 'FLAG', + user_id: null, + group_id: 'BODY_COUNT', + metadata: { + count: comment.body.length, + }, + }, + ], + }; + } +}; diff --git a/services/moderation/phases/index.js b/services/moderation/phases/index.js new file mode 100644 index 000000000..a1c2e7bf5 --- /dev/null +++ b/services/moderation/phases/index.js @@ -0,0 +1,7 @@ +module.exports.wordlist = require('./wordlist'); +module.exports.commentLength = require('./commentLength'); +module.exports.assetClosed = require('./assetClosed'); +module.exports.karma = require('./karma'); +module.exports.staff = require('./staff'); +module.exports.links = require('./links'); +module.exports.premod = require('./premod'); diff --git a/services/moderation/phases/karma.js b/services/moderation/phases/karma.js new file mode 100644 index 000000000..ad55b37a7 --- /dev/null +++ b/services/moderation/phases/karma.js @@ -0,0 +1,33 @@ +const get = require('lodash/get'); + +// This phase checks to see if the user making the comment is allowed to do so +// considering their reliability (Trust) status. +module.exports = ctx => { + const { connectors: { services: { Karma } } } = ctx; + const trust = get(ctx, 'user.metadata.trust', null); + + if (trust !== null) { + // If the user is not a reliable commenter (passed the unreliability + // threshold by having too many rejected comments) then we can change the + // status of the comment to `SYSTEM_WITHHELD`, therefore pushing the user's + // comments away from the public eye until a moderator can manage them. This of + // course can only be applied if the comment's current status is `NONE`, + // we don't want to interfere if the comment was rejected. + if (Karma.isReliable('comment', trust) === false) { + // Add the flag related to Trust to the comment. + return { + status: 'SYSTEM_WITHHELD', + actions: [ + { + action_type: 'FLAG', + user_id: null, + group_id: 'TRUST', + metadata: { + trust, + }, + }, + ], + }; + } + } +}; diff --git a/services/moderation/phases/links.js b/services/moderation/phases/links.js new file mode 100644 index 000000000..0aed4ecd9 --- /dev/null +++ b/services/moderation/phases/links.js @@ -0,0 +1,26 @@ +const linkify = require('linkify-it')().tlds(require('tlds')); + +// This phase checks the comment if it has any links in it if the check is +// enabled. +module.exports = ( + ctx, + comment, + { asset: { settings: { premodLinksEnable } } } +) => { + if (premodLinksEnable && linkify.test(comment.body)) { + // Add the flag related to Trust to the comment. + return { + status: 'SYSTEM_WITHHELD', + actions: [ + { + action_type: 'FLAG', + user_id: null, + group_id: 'LINKS', + metadata: { + links: comment.body, + }, + }, + ], + }; + } +}; diff --git a/services/moderation/phases/premod.js b/services/moderation/phases/premod.js new file mode 100644 index 000000000..cbd3627b1 --- /dev/null +++ b/services/moderation/phases/premod.js @@ -0,0 +1,15 @@ +// This phase checks to see if the settings have premod enabled, if they do, +// the comment is premod, otherwise, it's just none. +module.exports = (ctx, comment, { asset: { settings: { moderation } } }) => { + // If the settings say that we're in premod mode, then the comment is in + // premod status. + if (moderation === 'PRE') { + return { + status: 'PREMOD', + }; + } + + return { + status: 'NONE', + }; +}; diff --git a/services/moderation/phases/staff.js b/services/moderation/phases/staff.js new file mode 100644 index 000000000..4b6b74946 --- /dev/null +++ b/services/moderation/phases/staff.js @@ -0,0 +1,10 @@ +const { IGNORE_FLAGS_AGAINST_STAFF } = require('../../../config'); + +// If a given user is a staff member, always approve their comment. +module.exports = ctx => { + if (IGNORE_FLAGS_AGAINST_STAFF && ctx.user && ctx.user.isStaff()) { + return { + status: 'ACCEPTED', + }; + } +}; diff --git a/services/moderation/phases/wordlist.js b/services/moderation/phases/wordlist.js new file mode 100644 index 000000000..b71e0361e --- /dev/null +++ b/services/moderation/phases/wordlist.js @@ -0,0 +1,56 @@ +const { DISABLE_AUTOFLAG_SUSPECT_WORDS } = require('../../../config'); + +// This phase checks the comment against the wordlist. +module.exports = async (ctx, comment, { settings }) => { + const { connectors: { services: { Wordlist } } } = ctx; + + // Create a new instance of the Wordlist. + const wl = new Wordlist(); + + // Load the wordlist. + wl.upsert(settings.wordlist); + + // Scan the comment body for wordlist violations. + const { banned = null, suspect = null } = wl.scan('body', comment.body); + + // Decide the status based on whether or not the current asset/settings + // has pre-mod enabled or not. If the comment was rejected based on the + // wordlist, then reject it, otherwise if the moderation setting is + // premod, set it to `premod`. + if (banned) { + // Add the flag related to Trust to the comment. + return { + status: 'REJECTED', + actions: [ + { + action_type: 'FLAG', + user_id: null, + group_id: 'BANNED_WORD', + metadata: {}, + }, + ], + }; + } + + // If the comment has a suspect word or a link, we need to add a + // flag to it to indicate that it needs to be looked at. + // Otherwise just return the new comment. + + // If the wordlist has matched the suspect word filter and we haven't disabled + // auto-flagging suspect words, then we should flag the comment! + if (suspect && !DISABLE_AUTOFLAG_SUSPECT_WORDS) { + // TODO: this is kind of fragile, we should refactor this to resolve + // all these const's that we're using like 'COMMENTS', 'FLAG' to be + // defined in a checkable schema. + return { + actions: [ + { + action_type: 'FLAG', + user_id: null, + group_id: 'SUSPECT_WORD', + metadata: {}, + }, + ], + }; + } +}; diff --git a/test/server/graph/mutations/createComment.js b/test/server/graph/mutations/createComment.js index 8a5a98aa1..720297e12 100644 --- a/test/server/graph/mutations/createComment.js +++ b/test/server/graph/mutations/createComment.js @@ -49,6 +49,9 @@ describe('graph.mutations.createComment', () => { return graphql(schema, query, {}, context).then( ({ data, errors }) => { + if (errors) { + console.error(errors); + } expect(errors).to.be.undefined; if (error) { expect(data.createComment).to.have.property('comment').null; @@ -98,7 +101,9 @@ describe('graph.mutations.createComment', () => { async () => { const context = new Context({ user }); const { data, errors } = await graphql(schema, query, {}, context); - + if (errors) { + console.error(errors); + } expect(errors).to.be.undefined; if (error) { expect(data.createComment).to.have.property('comment').null; From b36c70acc1d5965ee9d490c9c67df87d78d39aba Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Mon, 22 Jan 2018 16:16:04 -0700 Subject: [PATCH 2/4] replaced pre-git with pre-commit --- package.json | 24 +-- yarn.lock | 502 +++++++-------------------------------------------- 2 files changed, 68 insertions(+), 458 deletions(-) diff --git a/package.json b/package.json index 90abdf2e7..17af19867 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,7 @@ "mocha-junit-reporter": "^1.12.1", "nightwatch": "^0.9.16", "nodemon": "^1.11.0", - "pre-git": "^3.16.0", + "pre-commit": "^1.2.2", "selenium-standalone": "^6.11.0", "sinon": "^3.2.1", "sinon-chai": "^2.13.0", @@ -220,24 +220,8 @@ "engines": { "node": "^8" }, - "config": { - "pre-git": { - "pre-commit": [ - "yarn lint", - "yarn test:client", - "yarn test:server" - ], - "pre-push": [ - "yarn lint", - "yarn test:client", - "yarn test:server" - ], - "post-commit": [], - "post-checkout": [], - "post-merge": [] - } - }, - "release": { - "analyzeCommits": "simple-commit-message" + "pre-commit": { + "silent": false, + "run": ["lint", "test:client", "test:server"] } } diff --git a/yarn.lock b/yarn.lock index 4d5d3f52d..38f5963ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -212,14 +212,6 @@ alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" -always-error@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/always-error/-/always-error-1.0.0.tgz#95c84042cfa86f38c86ca6c2cc42c0a0103441b2" - -am-i-a-dependency@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/am-i-a-dependency/-/am-i-a-dependency-1.1.2.tgz#f9d3422304d6f642f821e4c407565035f6167f1f" - amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -230,10 +222,6 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - ansi-escapes@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" @@ -242,10 +230,6 @@ ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" -ansi-regex@^1.0.0, ansi-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz#41c847194646375e6a1a5d10c3ca054ef9fc980d" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -447,7 +431,7 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0, asap@~2.0.3: +asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1249,15 +1233,11 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@2.9.24: - version "2.9.24" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.9.24.tgz#14a2e75f0548323dc35aa440d92007ca154e967c" - bluebird@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" -bluebird@3.5.1, bluebird@^3.0.6, bluebird@^3.3.4, bluebird@^3.4.6, bluebird@^3.5.0: +bluebird@^3.0.6, bluebird@^3.3.4, bluebird@^3.4.6, bluebird@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -1629,14 +1609,6 @@ chain-function@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" -chalk@2.3.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1647,6 +1619,14 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -1665,32 +1645,10 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -chdir-promise@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/chdir-promise/-/chdir-promise-0.4.1.tgz#1888bb33719699c9fb72138c07556503c4913e85" - dependencies: - check-more-types "2.24.0" - debug "2.6.8" - lazy-ass "1.6.0" - q "1.5.0" - spots "0.5.0" - check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" -check-more-types@2.23.0: - version "2.23.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.23.0.tgz#6226264d30b1095aa1c0a5b874edbdd5d2d0a66f" - -check-more-types@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - -check-more-types@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.3.0.tgz#b8397c69dc92a3e645f18932c045b09c74419ec4" - cheerio@^0.20.0: version "0.20.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35" @@ -1779,28 +1737,18 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" -cli-table@0.3.1, cli-table@^0.3.1: +cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" dependencies: colors "1.0.3" -cli-width@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1911,14 +1859,10 @@ colors@1.0.3, colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" -colors@1.1.2, colors@^1.1.2, colors@~1.1.2: +colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -colors@~0.6.0-1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -1931,10 +1875,6 @@ combined-stream@~0.0.4: dependencies: delayed-stream "0.0.5" -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - commander@2.8.x: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -1951,10 +1891,6 @@ commander@^2.11.0, commander@^2.9.0: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" -commander@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" - commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -2072,19 +2008,6 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -conventional-commit-message@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/conventional-commit-message/-/conventional-commit-message-1.1.0.tgz#ece8c661a168e983692e1d5a14875acb59510f6a" - dependencies: - check-more-types "2.3.0" - cz-conventional-changelog "1.1.5" - lazy-ass "1.3.0" - word-wrap "1.1.0" - -conventional-commit-types@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz#5db95739d6c212acbe7b6f656a11b940baa68946" - convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -2374,26 +2297,6 @@ cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" -cz-conventional-changelog@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-1.1.5.tgz#0a4d1550c4e2fb6a3aed8f6cd858c21760e119b8" - dependencies: - word-wrap "^1.0.3" - -cz-conventional-changelog@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz#2f4bc7390e3244e4df293e6ba351e4c740a7c764" - dependencies: - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^1.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" - -d3-helpers@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/d3-helpers/-/d3-helpers-0.3.0.tgz#4b31dce4a2121a77336384574d893fbed5fb293d" - d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -3156,10 +3059,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -3317,13 +3216,6 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -3400,16 +3292,6 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@2.1.0, find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3417,12 +3299,11 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -findup@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/findup/-/findup-0.1.5.tgz#8ad929a3393bac627957a7e5de4623b06b0e2ceb" +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: - colors "~0.6.0-1" - commander "~2.1.0" + locate-path "^2.0.0" flat-cache@^1.2.1: version "1.3.0" @@ -3683,57 +3564,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -ggit@1.23.1: - version "1.23.1" - resolved "https://registry.yarnpkg.com/ggit/-/ggit-1.23.1.tgz#e513c2f222a6249a46e4d0df354b8604b5baeedb" - dependencies: - always-error "1.0.0" - bluebird "3.5.0" - chdir-promise "0.4.1" - check-more-types "2.24.0" - cli-table "0.3.1" - colors "1.1.2" - commander "2.11.0" - d3-helpers "0.3.0" - debug "2.6.8" - find-up "2.1.0" - glob "7.1.2" - lazy-ass "1.6.0" - lodash "3.10.1" - moment "2.18.1" - optimist "0.6.1" - pluralize "6.0.0" - q "2.0.3" - quote "0.4.0" - ramda "0.24.1" - semver "5.4.1" - -ggit@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/ggit/-/ggit-2.4.0.tgz#b99d981f3ede2a3a8a8e4bbff578bc277d400588" - dependencies: - always-error "1.0.0" - bluebird "3.5.1" - chdir-promise "0.4.1" - check-more-types "2.24.0" - cli-table "0.3.1" - colors "1.1.2" - commander "2.11.0" - d3-helpers "0.3.0" - debug "3.1.0" - find-up "2.1.0" - glob "7.1.2" - lazy-ass "1.6.0" - lodash "4.17.4" - moment "2.19.1" - moment-timezone "0.5.13" - optimist "0.6.1" - pluralize "7.0.0" - q "2.0.3" - quote "0.4.0" - ramda "0.25.0" - semver "5.4.1" - git-up@^2.0.0: version "2.0.9" resolved "https://registry.yarnpkg.com/git-up/-/git-up-2.0.9.tgz#219bfd27c82daeead8495beb386dc18eae63636d" @@ -3797,17 +3627,6 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -3818,6 +3637,17 @@ glob@^5.0.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -4204,10 +4034,6 @@ hpkp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz#10e142264e76215a5d30c44ec43de64dee6d1672" -hr@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/hr/-/hr-0.1.3.tgz#d9aa30f5929dabfd0b65ba395938a3e184dbcafe" - hsts@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hsts/-/hsts-2.1.0.tgz#cbd6c918a2385fee1dd5680bfb2b3a194c0121cc" @@ -4418,44 +4244,6 @@ inquirer-autocomplete-prompt@^0.12.1: inquirer "3.2.0" run-async "^2.3.0" -inquirer-confirm@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/inquirer-confirm/-/inquirer-confirm-0.2.2.tgz#6f406d037bf9d9e455ef0f953929f357fe9a8848" - dependencies: - bluebird "2.9.24" - inquirer "0.8.2" - -inquirer@0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - -inquirer@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.8.2.tgz#41586548e1c5d9b3f81df7325034baacab6f58ab" - dependencies: - ansi-regex "^1.1.1" - chalk "^1.0.0" - cli-width "^1.0.1" - figures "^1.3.5" - lodash "^3.3.1" - readline2 "^0.1.1" - rx "^2.4.3" - through "^2.3.6" - inquirer@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.0.tgz#45b44c2160c729d7578c54060b3eed94487bb42b" @@ -4475,7 +4263,7 @@ inquirer@3.2.0: strip-ansi "^4.0.0" through "^2.3.6" -inquirer@3.3.0, inquirer@^3.0.6, inquirer@^3.2.2: +inquirer@^3.0.6, inquirer@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: @@ -5417,31 +5205,12 @@ kue@0.11.6: optionalDependencies: reds "^0.2.5" -largest-semantic-change@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/largest-semantic-change/-/largest-semantic-change-1.0.0.tgz#25dc538bdaaa8bbdc30276b1ebf902d47a34bf0e" - dependencies: - check-more-types "2.23.0" - lazy-ass "1.5.0" - latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" dependencies: package-json "^4.0.0" -lazy-ass@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.3.0.tgz#7d0d14eef3ec9702c6f30c60ea81f1a8d3f900fb" - -lazy-ass@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.5.0.tgz#ca15be243c7c475b8565cdbfa0f9c2f374f2a01d" - -lazy-ass@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -5732,10 +5501,6 @@ lodash.keysin@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-4.2.0.tgz#8cc3fb35c2d94acc443a1863e02fa40799ea6f28" -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -5796,11 +5561,7 @@ lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" -lodash@3.10.1, lodash@^3.3.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@4.17.4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.6, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.16.6, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -6115,24 +5876,14 @@ mocha@^3.1.2: mkdirp "0.5.1" supports-color "3.1.2" -moment-timezone@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90" - dependencies: - moment ">= 2.9.0" - -moment@2.18.1: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" - -moment@2.19.1, moment@^2.10.3: - version "2.19.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" - -moment@2.x.x, "moment@>= 2.9.0": +moment@2.x.x: version "2.19.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.4.tgz#17e5e2c6ead8819c8ecfad83a0acccb312e94682" +moment@^2.10.3: + version "2.19.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" + moment@^2.18.1: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" @@ -6232,14 +5983,6 @@ murmurhash-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" -mute-stream@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -6678,10 +6421,6 @@ once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -6728,6 +6467,10 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-shim@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -7038,21 +6781,13 @@ platform@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd" -pluralize@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-6.0.0.tgz#d9b51afad97d3d51075cc1ddba9b132cacccb7ba" - -pluralize@7.0.0, pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" -pop-iterate@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pop-iterate/-/pop-iterate-1.0.1.tgz#ceacfdab4abf353d7a0f2aaa2c1fc7b3f9413ba3" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" popsicle@^6.2.0: version "6.2.2" @@ -7477,24 +7212,13 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^4.4.0" -pre-git@^3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/pre-git/-/pre-git-3.16.0.tgz#a7656bc5f277185fd213c78f39f24f2cb603eb61" +pre-commit@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" dependencies: - bluebird "3.5.1" - chalk "2.3.0" - check-more-types "2.24.0" - conventional-commit-message "1.1.0" - cz-conventional-changelog "2.1.0" - debug "2.6.9" - ggit "2.4.0" - inquirer "3.3.0" - lazy-ass "1.6.0" - require-relative "0.8.7" - shelljs "0.7.8" - simple-commit-message "3.3.2" - validate-commit-msg "2.14.0" - word-wrap "1.2.3" + cross-spawn "^5.0.1" + spawn-sync "^1.0.15" + which "1.2.x" prebuild-install@^2.3.0: version "2.3.0" @@ -7785,18 +7509,10 @@ q@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -q@1.5.0, q@^1.1.2: +q@^1.1.2: version "1.5.0" resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" -q@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/q/-/q-2.0.3.tgz#75b8db0255a1a5af82f58c3f3aaa1efec7d0d134" - dependencies: - asap "^2.0.0" - pop-iterate "^1.0.1" - weak-map "^1.0.5" - qs@6.5.1, qs@^6.1.0, qs@^6.2.0, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -7832,10 +7548,6 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -quote@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/quote/-/quote-0.4.0.tgz#10839217f6c1362b89194044d29b233fd7f32f01" - raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" @@ -7846,14 +7558,10 @@ railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" -ramda@0.24.1, ramda@^0.24.1: +ramda@^0.24.1: version "0.24.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" -ramda@0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" - randexp@^0.4.2: version "0.4.6" resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" @@ -8159,21 +7867,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz#99443ba6e83b830ef3051bfd7dc241a82728d568" - dependencies: - mute-stream "0.0.4" - strip-ansi "^2.0.1" - -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -8425,10 +8118,6 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-relative@0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" - require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" @@ -8467,13 +8156,6 @@ resolve@^1.1.7: dependencies: path-parse "^1.0.5" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -8495,10 +8177,6 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -right-pad@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" - rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" @@ -8525,12 +8203,6 @@ rst-selector-parser@^2.2.3: lodash.flattendeep "^4.4.0" nearley "^2.7.10" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - run-async@^2.2.0, run-async@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -8553,14 +8225,6 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - -rx@^2.4.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/rx/-/rx-2.5.3.tgz#21adc7d80f02002af50dae97fd9dbf248755f566" - safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -8640,15 +8304,11 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -semver-regex@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" - "semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -semver@5.4.1, semver@^5.0.3, semver@^5.1.0, semver@^5.4.1: +semver@^5.0.3, semver@^5.1.0, semver@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -8764,7 +8424,7 @@ shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shelljs@0.7.8, shelljs@^0.7.0: +shelljs@^0.7.0: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: @@ -8780,22 +8440,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -simple-commit-message@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/simple-commit-message/-/simple-commit-message-3.3.2.tgz#52bdadb7f4f680d8b29c07af1826a6611f7ee783" - dependencies: - am-i-a-dependency "1.1.2" - check-more-types "2.24.0" - debug "2.6.9" - ggit "1.23.1" - hr "0.1.3" - inquirer "0.12.0" - inquirer-confirm "0.2.2" - largest-semantic-change "1.0.0" - lazy-ass "1.6.0" - semver "5.4.1" - word-wrap "1.2.3" - simple-get@^1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb" @@ -8956,6 +8600,13 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +spawn-sync@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" + dependencies: + concat-stream "^1.4.7" + os-shim "^0.1.2" + spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" @@ -8976,10 +8627,6 @@ split@0.3: dependencies: through "2" -spots@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/spots/-/spots-0.5.0.tgz#b7aa0f1ac389a5a6d57c21e98da1d53839405fe1" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9108,12 +8755,6 @@ stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz#df62c1aa94ed2f114e1d0f21fd1d50482b79a60e" - dependencies: - ansi-regex "^1.0.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -9738,15 +9379,6 @@ v8flags@^2.1.1: dependencies: user-home "^1.1.1" -validate-commit-msg@2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz#e5383691012cbb270dcc0bc2a4effebe14890eac" - dependencies: - conventional-commit-types "^2.0.0" - find-parent-dir "^0.3.0" - findup "0.1.5" - semver-regex "1.0.0" - validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -9807,10 +9439,6 @@ watchpack@^1.4.0: chokidar "^1.7.0" graceful-fs "^4.1.2" -weak-map@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb" - webidl-conversions@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" @@ -9898,6 +9526,12 @@ which@1, which@^1.2.12, which@^1.2.9: dependencies: isexe "^2.0.0" +which@1.2.x: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" @@ -9940,14 +9574,6 @@ with@^5.0.0: acorn "^3.1.0" acorn-globals "^3.0.0" -word-wrap@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.1.0.tgz#356153d61d10610d600785c5d701288e0ae764a6" - -word-wrap@1.2.3, word-wrap@^1.0.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" From e4834027b09b0af94f52a1c33d59cddace9fdd1d Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 23 Jan 2018 11:03:53 -0700 Subject: [PATCH 3/4] Auth Callback Regression --- client/coral-auth-callback/src/index.js | 14 ++++++++++ public/javascripts/admin.js | 8 ------ public/javascripts/auth-callback.js | 4 --- views/admin/confirm-email.ejs | 10 +++++++- views/admin/password-reset.ejs | 9 +++++++ views/auth-callback.ejs | 2 +- webpack.config.js | 34 +++++++++++++++++++------ 7 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 client/coral-auth-callback/src/index.js delete mode 100644 public/javascripts/admin.js delete mode 100644 public/javascripts/auth-callback.js diff --git a/client/coral-auth-callback/src/index.js b/client/coral-auth-callback/src/index.js new file mode 100644 index 000000000..b7f3ed226 --- /dev/null +++ b/client/coral-auth-callback/src/index.js @@ -0,0 +1,14 @@ +document.addEventListener('DOMContentLoaded', () => { + // Get the auth element and parse it as JSON by decoding it. + const auth = document.getElementById('auth'); + const doc = document.implementation.createHTMLDocument(''); + doc.body.innerHTML = auth.innerText; + + // Set the item in localStorage. + localStorage.setItem('auth', doc.body.textContent); + + // Close the window. + setTimeout(() => { + window.close(); + }, 50); +}); diff --git a/public/javascripts/admin.js b/public/javascripts/admin.js deleted file mode 100644 index 2c8b7c42a..000000000 --- a/public/javascripts/admin.js +++ /dev/null @@ -1,8 +0,0 @@ -function showError(error) { - try { - let err = JSON.parse(error); - $('.error-console').text(err.message).addClass('active'); - } catch (err) { - $('.error-console').text(error).addClass('active'); - } -} diff --git a/public/javascripts/auth-callback.js b/public/javascripts/auth-callback.js deleted file mode 100644 index f91f4d743..000000000 --- a/public/javascripts/auth-callback.js +++ /dev/null @@ -1,4 +0,0 @@ -document.addEventListener('DOMContentLoaded', function(event) { - localStorage.setItem('auth', document.getElementById('auth').innerText); - setTimeout(function() { window.close(); }, 50); -}); \ No newline at end of file diff --git a/views/admin/confirm-email.ejs b/views/admin/confirm-email.ejs index 0bc54990b..f8f6c62f2 100644 --- a/views/admin/confirm-email.ejs +++ b/views/admin/confirm-email.ejs @@ -20,9 +20,17 @@ - - + diff --git a/webpack.config.js b/webpack.config.js index d46c2cb7d..3367727f5 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -19,7 +19,11 @@ const targetPlugins = manager.section('targets').plugins; debug(`Using ${pluginsPath} as the plugin configuration path`); -const buildTargets = ['coral-admin', 'coral-docs']; +const buildTargets = [ + 'coral-admin', + 'coral-docs', + { name: 'coral-auth-callback', disablePolyfill: true }, +]; const buildEmbeds = ['stream']; @@ -156,9 +160,14 @@ const config = { modules: [ path.resolve(__dirname, 'plugins'), path.resolve(__dirname, 'client'), - ...buildTargets.map(target => - path.join(__dirname, 'client', target, 'src') - ), + ...buildTargets.map(target => { + if (typeof target !== 'string') { + target = target.name; + } + + return path.join(__dirname, 'client', target, 'src'); + }), + ...buildEmbeds.map(embed => path.join(__dirname, 'client', `coral-embed-${embed}`, 'src') ), @@ -276,10 +285,19 @@ module.exports = [ // All framework targets/embeds/plugins. applyConfig([ // Load in all the targets. - ...buildTargets.map(target => ({ - name: `${target}/bundle`, - path: path.join(__dirname, 'client/', target, '/src/index'), - })), + ...buildTargets.map(target => { + let disablePolyfill = false; + if (typeof target !== 'string') { + disablePolyfill = target.disablePolyfill; + target = target.name; + } + + return { + name: `${target}/bundle`, + path: path.join(__dirname, 'client/', target, '/src/index'), + disablePolyfill, + }; + }), // Load in all the embeds. ...buildEmbeds.map(embed => ({ From 366f40a6e4df2adc9f7ecac50c0246265841a181 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Wed, 24 Jan 2018 10:09:33 -0700 Subject: [PATCH 4/4] applied fix to template --- views/admin/password-reset.ejs | 1 - 1 file changed, 1 deletion(-) diff --git a/views/admin/password-reset.ejs b/views/admin/password-reset.ejs index b8edb18af..c5bb4ef90 100644 --- a/views/admin/password-reset.ejs +++ b/views/admin/password-reset.ejs @@ -30,7 +30,6 @@ -