From 30ba90cb45e2775b39d152f8e07208c8c7ec9f29 Mon Sep 17 00:00:00 2001 From: Steffen Prohaska Date: Sun, 2 Jul 2017 16:55:44 +0200 Subject: [PATCH 01/33] npm-mongo: Upgrade to npm mongo@2.2.29 to fix arbiter login attempts Meteor 1.4.3.2 upgraded npm mongo to 2.2.24 in order to fix an issue with MongoDB arbiter login attempts, see Meteor issue 8449 and Meteor 1.4.3.2 changelog. But the MongoDB upstream fix was incomplete. This commits upgrades npm mongo further to 2.2.29 in order to get the fix for the related arbiter login issue NODE-981 on the MongoDB Jira, which requires `mongo-core@>=2.1.10`, which requires `mongodb@>=2.2.26`; see references below. References: - Meteor issue 8449: . - Meteor 1.4.3.2: - NODE-981 in MongoDB Jira: - mongodb-core 2.1.10 changelog: , - mongodb 2.2.26 changelog: . Signed-off-by: Steffen Prohaska --- .../.npm/package/npm-shrinkwrap.json | 35 +++++++++++-------- packages/npm-mongo/package.js | 4 +-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index d916f66718..a2230b93cf 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -8,7 +8,7 @@ "buffer-shims": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "from": "buffer-shims@>=1.0.0 <2.0.0" + "from": "buffer-shims@>=1.0.0 <1.1.0" }, "core-util-is": { "version": "1.0.2", @@ -31,14 +31,14 @@ "from": "isarray@>=1.0.0 <1.1.0" }, "mongodb": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.24.tgz", - "from": "mongodb@2.2.24" + "version": "2.2.29", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.29.tgz", + "from": "mongodb@2.2.29" }, "mongodb-core": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.8.tgz", - "from": "mongodb-core@2.1.8" + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.13.tgz", + "from": "mongodb-core@2.1.13" }, "process-nextick-args": { "version": "1.0.7", @@ -46,13 +46,13 @@ "from": "process-nextick-args@>=1.0.6 <1.1.0" }, "readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "from": "readable-stream@2.1.5" + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "from": "readable-stream@2.2.7" }, "require_optional": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.0.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "from": "require_optional@>=1.0.0 <1.1.0" }, "resolve-from": { @@ -60,15 +60,20 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "from": "resolve-from@>=2.0.0 <3.0.0" }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "from": "safe-buffer@>=5.1.0 <5.2.0" + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "from": "semver@>=5.1.0 <6.0.0" }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "from": "string_decoder@>=0.10.0 <0.11.0" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "from": "string_decoder@>=1.0.0 <1.1.0" }, "util-deprecate": { "version": "1.0.2", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index a4a7395c5c..a9918983d1 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '2.2.24', + version: '2.2.29', documentation: null }); Npm.depends({ - mongodb: "2.2.24" + mongodb: "2.2.29" }); Package.onUse(function (api) { From 52b60638ffa2e762b581093a79023b15497985ad Mon Sep 17 00:00:00 2001 From: stevenhao Date: Fri, 14 Jul 2017 17:15:26 -0700 Subject: [PATCH 02/33] fix loginExpirationInDays config bug --- packages/accounts-base/accounts_common.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/accounts-base/accounts_common.js b/packages/accounts-base/accounts_common.js index a6688ba492..37ec282985 100644 --- a/packages/accounts-base/accounts_common.js +++ b/packages/accounts-base/accounts_common.js @@ -213,8 +213,14 @@ export class AccountsCommon { } } - _getTokenLifetimeMs() { - return (this._options.loginExpirationInDays || + // The options argument is only used by tests. + _getTokenLifetimeMs(options) { + options = options || this._options; + if (options.loginExpirationInDays === null) { + // We disable login expiration by returning Infinity + return Infinity; + } + return (options.loginExpirationInDays || DEFAULT_LOGIN_EXPIRATION_DAYS) * 24 * 60 * 60 * 1000; } From d5d9ff8434ab6fa8ee7a6e69da720c1ac74883d6 Mon Sep 17 00:00:00 2001 From: stevenhao Date: Fri, 14 Jul 2017 17:28:17 -0700 Subject: [PATCH 03/33] add tests --- packages/accounts-base/accounts_tests.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/accounts-base/accounts_tests.js b/packages/accounts-base/accounts_tests.js index 5857597221..c12144c830 100644 --- a/packages/accounts-base/accounts_tests.js +++ b/packages/accounts-base/accounts_tests.js @@ -13,6 +13,24 @@ Tinytest.add('accounts - config validates keys', function (test) { }); }); +// test the loginExpirationInDays config + +Tinytest.add( 'accounts - config - token limetime', function (test) { + var config = { loginExpirationInDays: 2 }; + test.equal(Accounts._getTokenLifetimeMs(config), 2 * 24 * 60 * 60 * 1000); +}); + +Tinytest.add( 'accounts - config - unexpiring tokens', function (test) { + var config = { loginExpirationInDays: null }; + test.equal(Accounts._getTokenLifetimeMs(config), Infinity); +}); + +Tinytest.add( 'accounts - config - default token limetime', function(test) { + var DEFAULT_LOGIN_EXPIRATION_DAYS = 90; // copied from accounts_common.js + var config1 = {}; + var config2 = { loginExpirationInDays: DEFAULT_LOGIN_EXPIRATION_DAYS }; + test.equal(Accounts._getTokenLifetimeMs(config1), Accounts._getTokenLifetimeMs(config2)); +}); var idsInValidateNewUser = {}; Accounts.validateNewUser(function (user) { From d0e0411f68d7a83da5cf01e869cd0fd5856fef3c Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 19:58:56 -0400 Subject: [PATCH 04/33] Update the modules test app to Meteor 1.5.1. --- tools/tests/apps/modules/.meteor/packages | 10 +++++----- tools/tests/apps/modules/.meteor/release | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tests/apps/modules/.meteor/packages b/tools/tests/apps/modules/.meteor/packages index d620c184cb..625b793b0d 100644 --- a/tools/tests/apps/modules/.meteor/packages +++ b/tools/tests/apps/modules/.meteor/packages @@ -6,22 +6,22 @@ meteor-base@1.1.0 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.18 # The database Meteor supports right now +mongo@1.1.19 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views session@1.1.7 # Client-side reactive dictionary for your app jquery@1.11.10 # Helpful client-side library tracker@1.1.3 # Meteor's client-side reactive programming library es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.8.0 # Enable ECMAScript2015+ syntax in app code +ecmascript@0.8.2 # Enable ECMAScript2015+ syntax in app code coffeescript modules-test-package dispatch:mocha-phantomjs dispatch:mocha-browser standard-minifier-css@1.3.4 -standard-minifier-js@2.1.0 +standard-minifier-js@2.1.1 client-only-ecmascript modules-test-plugin -shell-server@0.2.3 -dynamic-import +shell-server@0.2.4 +dynamic-import@0.1.1 diff --git a/tools/tests/apps/modules/.meteor/release b/tools/tests/apps/modules/.meteor/release index 025f64e707..1e7fc5b564 100644 --- a/tools/tests/apps/modules/.meteor/release +++ b/tools/tests/apps/modules/.meteor/release @@ -1 +1 @@ -METEOR@1.5 +METEOR@1.5.1 From 23eeac122f7985cd3f3c872c71096a32437559ac Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 20:02:50 -0400 Subject: [PATCH 05/33] Update the dynamic-import test app to Meteor 1.5.1. --- tools/tests/apps/dynamic-import/.meteor/packages | 10 +++++----- tools/tests/apps/dynamic-import/.meteor/release | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tests/apps/dynamic-import/.meteor/packages b/tools/tests/apps/dynamic-import/.meteor/packages index 5e0d80da9a..7da6f95217 100644 --- a/tools/tests/apps/dynamic-import/.meteor/packages +++ b/tools/tests/apps/dynamic-import/.meteor/packages @@ -6,21 +6,21 @@ meteor-base@1.1.0 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.18 # The database Meteor supports right now +mongo@1.1.19 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views reactive-var@1.0.11 # Reactive variable for tracker jquery@1.11.10 # Helpful client-side library tracker@1.1.3 # Meteor's client-side reactive programming library standard-minifier-css@1.3.4 # CSS minifier run for production mode -standard-minifier-js@2.1.0 # JS minifier run for production mode +standard-minifier-js@2.1.1 # JS minifier run for production mode es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.8.0 # Enable ECMAScript2015+ syntax in app code -shell-server@0.2.3 # Server-side component of the `meteor shell` command +ecmascript@0.8.2 # Enable ECMAScript2015+ syntax in app code +shell-server@0.2.4 # Server-side component of the `meteor shell` command autopublish@1.0.7 # Publish all data to the clients (for prototyping) insecure@1.0.7 # Allow all DB writes from clients (for prototyping) -dynamic-import +dynamic-import@0.1.1 dispatch:mocha-phantomjs dispatch:mocha-browser lazy-test-package diff --git a/tools/tests/apps/dynamic-import/.meteor/release b/tools/tests/apps/dynamic-import/.meteor/release index 025f64e707..1e7fc5b564 100644 --- a/tools/tests/apps/dynamic-import/.meteor/release +++ b/tools/tests/apps/dynamic-import/.meteor/release @@ -1 +1 @@ -METEOR@1.5 +METEOR@1.5.1 From 08fdc8a6f00d18f1b46d90633edce49c109ab683 Mon Sep 17 00:00:00 2001 From: Jan Owsiany Date: Wed, 12 Jul 2017 11:22:01 +0200 Subject: [PATCH 06/33] Update cordova-lib, cordova-ios, cordova-android and cordova plugins to the latest version --- packages/crosswalk/package.js | 2 +- packages/launch-screen/package.js | 2 +- packages/logging/package.js | 2 +- packages/mobile-status-bar/package.js | 2 +- packages/oauth/package.js | 2 +- packages/webapp/package.js | 4 +-- scripts/dev-bundle-tool-package.js | 2 +- tools/cordova/index.js | 4 +-- tools/cordova/project.js | 44 +++++++++++++-------------- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/crosswalk/package.js b/packages/crosswalk/package.js index 1dc6923f67..2e7d8b382b 100644 --- a/packages/crosswalk/package.js +++ b/packages/crosswalk/package.js @@ -6,5 +6,5 @@ instead of the System WebView on Android", }); Cordova.depends({ - 'cordova-plugin-crosswalk-webview': '2.2.0' + 'cordova-plugin-crosswalk-webview': '2.3.0' }); diff --git a/packages/launch-screen/package.js b/packages/launch-screen/package.js index c027b04e60..c6c0749150 100644 --- a/packages/launch-screen/package.js +++ b/packages/launch-screen/package.js @@ -10,7 +10,7 @@ Package.describe({ }); Cordova.depends({ - 'cordova-plugin-splashscreen': '4.0.1' + 'cordova-plugin-splashscreen': '4.0.3' }); Package.onUse(function(api) { diff --git a/packages/logging/package.js b/packages/logging/package.js index f92fc241ea..85e6423d1e 100644 --- a/packages/logging/package.js +++ b/packages/logging/package.js @@ -12,7 +12,7 @@ Npm.strip({ }); Cordova.depends({ - 'cordova-plugin-console': '1.0.5' + 'cordova-plugin-console': '1.0.7' }); Package.onUse(function (api) { diff --git a/packages/mobile-status-bar/package.js b/packages/mobile-status-bar/package.js index ddf88dc48d..86485b0923 100644 --- a/packages/mobile-status-bar/package.js +++ b/packages/mobile-status-bar/package.js @@ -4,5 +4,5 @@ Package.describe({ }); Cordova.depends({ - 'cordova-plugin-statusbar': '2.2.1' + 'cordova-plugin-statusbar': '2.2.3' }); diff --git a/packages/oauth/package.js b/packages/oauth/package.js index f20389e65b..28b2b0dfbc 100644 --- a/packages/oauth/package.js +++ b/packages/oauth/package.js @@ -57,5 +57,5 @@ Package.onTest(function (api) { }); Cordova.depends({ - 'cordova-plugin-inappbrowser': '1.6.1' + 'cordova-plugin-inappbrowser': '1.7.1' }); diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 74c55b8445..43c6bab104 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -14,8 +14,8 @@ Npm.strip({ }); Cordova.depends({ - 'cordova-plugin-whitelist': '1.3.1', - 'cordova-plugin-wkwebview-engine': '1.1.1', + 'cordova-plugin-whitelist': '1.3.2', + 'cordova-plugin-wkwebview-engine': '1.1.3', 'cordova-plugin-meteor-webapp': '1.4.1' }); diff --git a/scripts/dev-bundle-tool-package.js b/scripts/dev-bundle-tool-package.js index c8bb4c33a8..7b4baf4d5a 100644 --- a/scripts/dev-bundle-tool-package.js +++ b/scripts/dev-bundle-tool-package.js @@ -54,7 +54,7 @@ var packageJson = { pathwatcher: "6.7.1", optimism: "0.3.3", 'lru-cache': '4.0.1', - 'cordova-lib': "6.4.0", + 'cordova-lib': "7.0.1", longjohn: '0.2.11' } }; diff --git a/tools/cordova/index.js b/tools/cordova/index.js index 09837dc13f..4d5281196e 100644 --- a/tools/cordova/index.js +++ b/tools/cordova/index.js @@ -11,8 +11,8 @@ export const CORDOVA_ARCH = "web.cordova"; export const CORDOVA_PLATFORMS = ['ios', 'android']; export const CORDOVA_PLATFORM_VERSIONS = { - 'android': '6.1.1', - 'ios': '4.3.0' + 'android': '6.2.3', + 'ios': '4.4.0' }; const PLATFORM_TO_DISPLAY_NAME_MAP = { diff --git a/tools/cordova/project.js b/tools/cordova/project.js index b9f125d1ac..cecd8853ee 100644 --- a/tools/cordova/project.js +++ b/tools/cordova/project.js @@ -51,29 +51,29 @@ const pinnedPlatformVersions = CORDOVA_PLATFORM_VERSIONS; // Versions are taken from cordova-lib's package.json and should be updated // when we update to a newer version of cordova-lib. const pinnedPluginVersions = { - "cordova-plugin-battery-status": "1.2.2", - "cordova-plugin-camera": "2.3.1", - "cordova-plugin-console": "1.0.5", - "cordova-plugin-contacts": "2.2.1", - "cordova-plugin-device": "1.1.4", - "cordova-plugin-device-motion": "1.2.3", - "cordova-plugin-device-orientation": "1.0.5", - "cordova-plugin-dialogs": "1.3.1", - "cordova-plugin-file": "4.3.1", - "cordova-plugin-file-transfer": "1.6.1", - "cordova-plugin-geolocation": "2.4.1", - "cordova-plugin-globalization": "1.0.5", - "cordova-plugin-inappbrowser": "1.6.1", + "cordova-plugin-battery-status": "1.2.4", + "cordova-plugin-camera": "2.4.1", + "cordova-plugin-console": "1.0.7", + "cordova-plugin-contacts": "2.3.1", + "cordova-plugin-device": "1.1.6", + "cordova-plugin-device-motion": "1.2.5", + "cordova-plugin-device-orientation": "1.0.7", + "cordova-plugin-dialogs": "1.3.3", + "cordova-plugin-file": "4.3.3", + "cordova-plugin-file-transfer": "1.6.3", + "cordova-plugin-geolocation": "2.4.3", + "cordova-plugin-globalization": "1.0.7", + "cordova-plugin-inappbrowser": "1.7.1", "cordova-plugin-legacy-whitelist": "1.1.2", - "cordova-plugin-media": "2.4.1", - "cordova-plugin-media-capture": "1.4.1", - "cordova-plugin-network-information": "1.3.1", - "cordova-plugin-splashscreen": "4.0.1", - "cordova-plugin-statusbar": "2.2.1", - "cordova-plugin-test-framework": "1.1.4", - "cordova-plugin-vibration": "2.1.3", - "cordova-plugin-whitelist": "1.3.1", - "cordova-plugin-wkwebview-engine": "1.1.1" + "cordova-plugin-media": "3.0.1", + "cordova-plugin-media-capture": "1.4.3", + "cordova-plugin-network-information": "1.3.3", + "cordova-plugin-splashscreen": "4.0.3", + "cordova-plugin-statusbar": "2.2.3", + "cordova-plugin-test-framework": "1.1.5", + "cordova-plugin-vibration": "2.1.5", + "cordova-plugin-whitelist": "1.3.2", + "cordova-plugin-wkwebview-engine": "1.1.3" } export class CordovaProject { From 67d62dd0dc6b5f8b4a0eb906c44aeabdd95ba266 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Tue, 18 Jul 2017 14:13:33 -0400 Subject: [PATCH 07/33] Bump $BUNDLE_VERSION to 4.8.25 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 4226b081ea..e7a1fe1cd3 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.24 +BUNDLE_VERSION=4.8.25 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 4fe8541fcd058c82e4c2dbd7d90c68cb50909fd6 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Tue, 18 Jul 2017 16:03:27 -0700 Subject: [PATCH 08/33] Bump version of `cordova-plugin-meteor-webapp` to 1.4.2. To get the changes from meteor/cordova-plugin-meteor-webapp#25. --- packages/webapp/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 43c6bab104..73833c6d47 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -16,7 +16,7 @@ Npm.strip({ Cordova.depends({ 'cordova-plugin-whitelist': '1.3.2', 'cordova-plugin-wkwebview-engine': '1.1.3', - 'cordova-plugin-meteor-webapp': '1.4.1' + 'cordova-plugin-meteor-webapp': '1.4.2' }); Package.onUse(function (api) { From d65a6c9a9d2473069aa7f361a5a2ef2853b9f33f Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 19 Jul 2017 10:03:08 -0400 Subject: [PATCH 09/33] Bump package versions for 1.5.2-beta.3 release. --- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index e3d02d4315..fbbcff37f8 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.2' + version: '6.20.0-beta152.3' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 417b32cf92..28feb62ed2 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.2', + version: '1.0.0-beta152.3', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 26c5632c62..6cb983db03 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.2' + version: '1.2.0-beta152.3' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 2d7ff6e8e6..df5ff1f568 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.2" + version: "1.5.2-beta.3" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index 0448b05c42..ac7ce0fa0a 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.2' + version: '1.3.0-beta152.3' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index 17b7e35a46..a3323370ac 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.2", + version: "0.10.0-beta152.3", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 6b79e9cc93..76d4652d95 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.2' + version: '1.2.0-beta152.3' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 585ed6d563..d581e74fe3 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.2", + version: "0.9.0-beta152.3", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 73833c6d47..b3b0b47218 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.17' + version: '1.3.18-beta152.3' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index eef1039ce8..c9d977d5e2 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.2", + "version": "1.5.2-beta.3", "recommended": false, "official": false, "description": "Meteor" From 708829af39d1544194be8e27ae57aeb3c9c3b5f4 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Wed, 19 Jul 2017 10:29:26 -0400 Subject: [PATCH 10/33] Bump mongodb to the recently released 2.2.30 version. --- packages/npm-mongo/.npm/package/npm-shrinkwrap.json | 12 ++++++------ packages/npm-mongo/package.js | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index a2230b93cf..defa257e62 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -31,14 +31,14 @@ "from": "isarray@>=1.0.0 <1.1.0" }, "mongodb": { - "version": "2.2.29", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.29.tgz", - "from": "mongodb@2.2.29" + "version": "2.2.30", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.30.tgz", + "from": "mongodb@2.2.30" }, "mongodb-core": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.13.tgz", - "from": "mongodb-core@2.1.13" + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.14.tgz", + "from": "mongodb-core@2.1.14" }, "process-nextick-args": { "version": "1.0.7", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index a9918983d1..84b27a141b 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '2.2.29', + version: '2.2.30', documentation: null }); Npm.depends({ - mongodb: "2.2.29" + mongodb: "2.2.30" }); Package.onUse(function (api) { From 5f265f5f5fde83cecec44c01e9c865d98b82616c Mon Sep 17 00:00:00 2001 From: stevenhao Date: Wed, 19 Jul 2017 11:42:39 -0700 Subject: [PATCH 11/33] Bump accounts-base package version --- packages/accounts-base/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 9f52c7a6f9..44f00b666e 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.1" + version: "1.3.2" }); Package.onUse(function (api) { From 50e8ddeb2657e30a97af098ffca8acb1b19dd911 Mon Sep 17 00:00:00 2001 From: stevenhao Date: Wed, 19 Jul 2017 11:42:07 -0700 Subject: [PATCH 12/33] update History.md --- History.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/History.md b/History.md index 99af701950..255338b33a 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,10 @@ ## v.NEXT +* `accounts-base` no longer mistakenly expires tokens when the + `loginExpirationInDays` option is set to `null`. + [Issue #5121](https://github.com/meteor/meteor/issues/5121) + [PR #8917](https://github.com/meteor/meteor/pull/8917) + ## v1.5.1, 2017-07-12 * Node has been upgraded to version 4.8.4. From 3b97b9091df5cec1fc8948f6cf19392003401b37 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 19 Jul 2017 15:02:42 -0400 Subject: [PATCH 13/33] Slight rewording to mention Accounts.config rather than accounts-base. --- History.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/History.md b/History.md index 255338b33a..eb1694742f 100644 --- a/History.md +++ b/History.md @@ -1,7 +1,7 @@ ## v.NEXT -* `accounts-base` no longer mistakenly expires tokens when the - `loginExpirationInDays` option is set to `null`. +* `Accounts.config` no longer mistakenly allows token to expire when + the `loginExpirationInDays` option is set to `null`. [Issue #5121](https://github.com/meteor/meteor/issues/5121) [PR #8917](https://github.com/meteor/meteor/pull/8917) From 59a052e958d30f770e326816b5ebf4934788775c Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 19 Jul 2017 15:04:14 -0400 Subject: [PATCH 14/33] Typo: pluralize "token" in History.md. --- History.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/History.md b/History.md index eb1694742f..e5e8b4abe0 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,6 @@ ## v.NEXT -* `Accounts.config` no longer mistakenly allows token to expire when +* `Accounts.config` no longer mistakenly allows tokens to expire when the `loginExpirationInDays` option is set to `null`. [Issue #5121](https://github.com/meteor/meteor/issues/5121) [PR #8917](https://github.com/meteor/meteor/pull/8917) From 3090ac72825d5014f9577057eb083183a62cc140 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 19:58:56 -0400 Subject: [PATCH 15/33] Update the modules test app to Meteor 1.5.1. --- tools/tests/apps/modules/.meteor/packages | 10 +++++----- tools/tests/apps/modules/.meteor/release | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tests/apps/modules/.meteor/packages b/tools/tests/apps/modules/.meteor/packages index d620c184cb..625b793b0d 100644 --- a/tools/tests/apps/modules/.meteor/packages +++ b/tools/tests/apps/modules/.meteor/packages @@ -6,22 +6,22 @@ meteor-base@1.1.0 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.18 # The database Meteor supports right now +mongo@1.1.19 # The database Meteor supports right now blaze-html-templates # Compile .html files into Meteor Blaze views session@1.1.7 # Client-side reactive dictionary for your app jquery@1.11.10 # Helpful client-side library tracker@1.1.3 # Meteor's client-side reactive programming library es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.8.0 # Enable ECMAScript2015+ syntax in app code +ecmascript@0.8.2 # Enable ECMAScript2015+ syntax in app code coffeescript modules-test-package dispatch:mocha-phantomjs dispatch:mocha-browser standard-minifier-css@1.3.4 -standard-minifier-js@2.1.0 +standard-minifier-js@2.1.1 client-only-ecmascript modules-test-plugin -shell-server@0.2.3 -dynamic-import +shell-server@0.2.4 +dynamic-import@0.1.1 diff --git a/tools/tests/apps/modules/.meteor/release b/tools/tests/apps/modules/.meteor/release index 025f64e707..1e7fc5b564 100644 --- a/tools/tests/apps/modules/.meteor/release +++ b/tools/tests/apps/modules/.meteor/release @@ -1 +1 @@ -METEOR@1.5 +METEOR@1.5.1 From 765330d8830051436ec00a9048b3985529b9d047 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Mon, 17 Jul 2017 20:02:50 -0400 Subject: [PATCH 16/33] Update the dynamic-import test app to Meteor 1.5.1. --- tools/tests/apps/dynamic-import/.meteor/packages | 10 +++++----- tools/tests/apps/dynamic-import/.meteor/release | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/tests/apps/dynamic-import/.meteor/packages b/tools/tests/apps/dynamic-import/.meteor/packages index 5e0d80da9a..7da6f95217 100644 --- a/tools/tests/apps/dynamic-import/.meteor/packages +++ b/tools/tests/apps/dynamic-import/.meteor/packages @@ -6,21 +6,21 @@ meteor-base@1.1.0 # Packages every Meteor app needs to have mobile-experience@1.0.4 # Packages for a great mobile UX -mongo@1.1.18 # The database Meteor supports right now +mongo@1.1.19 # The database Meteor supports right now blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views reactive-var@1.0.11 # Reactive variable for tracker jquery@1.11.10 # Helpful client-side library tracker@1.1.3 # Meteor's client-side reactive programming library standard-minifier-css@1.3.4 # CSS minifier run for production mode -standard-minifier-js@2.1.0 # JS minifier run for production mode +standard-minifier-js@2.1.1 # JS minifier run for production mode es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers. -ecmascript@0.8.0 # Enable ECMAScript2015+ syntax in app code -shell-server@0.2.3 # Server-side component of the `meteor shell` command +ecmascript@0.8.2 # Enable ECMAScript2015+ syntax in app code +shell-server@0.2.4 # Server-side component of the `meteor shell` command autopublish@1.0.7 # Publish all data to the clients (for prototyping) insecure@1.0.7 # Allow all DB writes from clients (for prototyping) -dynamic-import +dynamic-import@0.1.1 dispatch:mocha-phantomjs dispatch:mocha-browser lazy-test-package diff --git a/tools/tests/apps/dynamic-import/.meteor/release b/tools/tests/apps/dynamic-import/.meteor/release index 025f64e707..1e7fc5b564 100644 --- a/tools/tests/apps/dynamic-import/.meteor/release +++ b/tools/tests/apps/dynamic-import/.meteor/release @@ -1 +1 @@ -METEOR@1.5 +METEOR@1.5.1 From 688c6e1525b537e51ca98b93d0d5533c10473636 Mon Sep 17 00:00:00 2001 From: Mitar Date: Wed, 19 Jul 2017 08:28:06 -0700 Subject: [PATCH 17/33] Refactored reset password and enroll account methods (#8207) * Refactored reset password and enroll account methods. To allow easier customization email sending of tokens. * Renaming tokenEmailOptions to generateOptionsForEmail. * Style changes. * Also refactored verification logic. * Const not var. * Allow extra token data. * Document everything. * Bugfixes. * Style. * Addressing PR comments. * Updating to address review comments. --- packages/accounts-password/password_server.js | 286 +++++++++--------- 1 file changed, 145 insertions(+), 141 deletions(-) diff --git a/packages/accounts-password/password_server.js b/packages/accounts-password/password_server.js index b088b0aafd..93af180f05 100644 --- a/packages/accounts-password/password_server.js +++ b/packages/accounts-password/password_server.js @@ -546,17 +546,17 @@ Meteor.methods({forgotPassword: function (options) { Accounts.sendResetPasswordEmail(user._id, caseSensitiveEmail); }}); -// send the user an email with a link that when opened allows the user -// to set a new password, without the old password. - /** - * @summary Send an email with a link the user can use to reset their password. + * @summary Generates a reset token and saves it into the database. * @locus Server - * @param {String} userId The id of the user to send email to. - * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first email in the list. + * @param {String} userId The id of the user to generate the reset token for. + * @param {String} email Which address of the user to generate the reset token for. This address must be in the user's `emails` list. If `null`, defaults to the first email in the list. + * @param {String} reason `resetPassword` or `enrollAccount`. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token} values. * @importFromPackage accounts-base */ -Accounts.sendResetPasswordEmail = function (userId, email) { +Accounts.generateResetToken = function (userId, email, reason, extraTokenData) { // Make sure the user exists, and email is one of their addresses. var user = Meteor.users.findOne(userId); if (!user) { @@ -574,44 +574,146 @@ Accounts.sendResetPasswordEmail = function (userId, email) { } var token = Random.secret(); - var when = new Date(); var tokenRecord = { token: token, email: email, - when: when, - reason: 'reset' + when: new Date() }; - Meteor.users.update(userId, {$set: { - "services.password.reset": tokenRecord + + if (reason === 'resetPassword') { + tokenRecord.reason = 'reset'; + } else if (reason === 'enrollAccount') { + tokenRecord.reason = 'enroll'; + } else if (reason) { + // fallback so that this function can be used for unknown reasons as well + tokenRecord.reason = reason; + } + + if (extraTokenData) { + _.extend(tokenRecord, extraTokenData); + } + + Meteor.users.update({_id: user._id}, {$set: { + 'services.password.reset': tokenRecord }}); + // before passing to template, update user object with new token Meteor._ensure(user, 'services', 'password').reset = tokenRecord; - var resetPasswordUrl = Accounts.urls.resetPassword(token); + return {email, user, token}; +}; - var options = { - to: email, - from: Accounts.emailTemplates.resetPassword.from - ? Accounts.emailTemplates.resetPassword.from(user) - : Accounts.emailTemplates.from, - subject: Accounts.emailTemplates.resetPassword.subject(user) - }; - - if (typeof Accounts.emailTemplates.resetPassword.text === 'function') { - options.text = - Accounts.emailTemplates.resetPassword.text(user, resetPasswordUrl); +/** + * @summary Generates an e-mail verification token and saves it into the database. + * @locus Server + * @param {String} userId The id of the user to generate the e-mail verification token for. + * @param {String} email Which address of the user to generate the e-mail verification token for. This address must be in the user's `emails` list. If `null`, defaults to the first unverified email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token} values. + * @importFromPackage accounts-base + */ +Accounts.generateVerificationToken = function (userId, email, extraTokenData) { + // Make sure the user exists, and email is one of their addresses. + var user = Meteor.users.findOne(userId); + if (!user) { + handleError("Can't find user"); } - if (typeof Accounts.emailTemplates.resetPassword.html === 'function') { - options.html = - Accounts.emailTemplates.resetPassword.html(user, resetPasswordUrl); + // pick the first unverified email if we weren't passed an email. + if (!email) { + var emailRecord = _.find(user.emails || [], function (e) { return !e.verified; }); + email = (emailRecord || {}).address; + + if (!email) { + handleError("That user has no unverified email addresses."); + } + } + + // make sure we have a valid email + if (!email || !_.contains(_.pluck(user.emails || [], 'address'), email)) { + handleError("No such email for user."); + } + + var token = Random.secret(); + var tokenRecord = { + token: token, + // TODO: This should probably be renamed to "email" to match reset token record. + address: email, + when: new Date() + }; + + if (extraTokenData) { + _.extend(tokenRecord, extraTokenData); + } + + Meteor.users.update({_id: user._id}, {$push: { + 'services.email.verificationTokens': tokenRecord + }}); + + // before passing to template, update user object with new token + Meteor._ensure(user, 'services', 'email'); + if (!user.services.email.verificationTokens) { + user.services.email.verificationTokens = []; + } + user.services.email.verificationTokens.push(tokenRecord); + + return {email, user, token}; +}; + +/** + * @summary Creates options for email sending for reset password and enroll account emails. + * You can use this function when customizing a reset password or enroll account email sending. + * @locus Server + * @param {Object} email Which address of the user's to send the email to. + * @param {Object} user The user object to generate options for. + * @param {String} url URL to which user is directed to confirm the email. + * @param {String} reason `resetPassword` or `enrollAccount`. + * @returns {Object} Options which can be passed to `Email.send`. + * @importFromPackage accounts-base + */ +Accounts.generateOptionsForEmail = function (email, user, url, reason) { + var options = { + to: email, + from: Accounts.emailTemplates[reason].from + ? Accounts.emailTemplates[reason].from(user) + : Accounts.emailTemplates.from, + subject: Accounts.emailTemplates[reason].subject(user) + }; + + if (typeof Accounts.emailTemplates[reason].text === 'function') { + options.text = Accounts.emailTemplates[reason].text(user, url); + } + + if (typeof Accounts.emailTemplates[reason].html === 'function') { + options.html = Accounts.emailTemplates[reason].html(user, url); } if (typeof Accounts.emailTemplates.headers === 'object') { options.headers = Accounts.emailTemplates.headers; } + return options; +}; + +// send the user an email with a link that when opened allows the user +// to set a new password, without the old password. + +/** + * @summary Send an email with a link the user can use to reset their password. + * @locus Server + * @param {String} userId The id of the user to send email to. + * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token, url, options} values. + * @importFromPackage accounts-base + */ +Accounts.sendResetPasswordEmail = function (userId, email, extraTokenData) { + const {email: realEmail, user, token} = + Accounts.generateResetToken(userId, email, 'resetPassword', extraTokenData); + const url = Accounts.urls.resetPassword(token); + const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'resetPassword'); Email.send(options); + return {email: realEmail, user, token, url, options}; }; // send the user an email informing them that their account was created, with @@ -627,65 +729,17 @@ Accounts.sendResetPasswordEmail = function (userId, email) { * @locus Server * @param {String} userId The id of the user to send email to. * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token, url, options} values. * @importFromPackage accounts-base */ -Accounts.sendEnrollmentEmail = function (userId, email) { - // XXX refactor! This is basically identical to sendResetPasswordEmail. - - // Make sure the user exists, and email is in their addresses. - var user = Meteor.users.findOne(userId); - if (!user) { - throw new Error("Can't find user"); - } - // pick the first email if we weren't passed an email. - if (!email && user.emails && user.emails[0]) { - email = user.emails[0].address; - } - // make sure we have a valid email - if (!email || !_.contains(_.pluck(user.emails || [], 'address'), email)) { - throw new Error("No such email for user."); - } - - var token = Random.secret(); - var when = new Date(); - var tokenRecord = { - token: token, - email: email, - when: when, - reason: 'enroll' - }; - Meteor.users.update(userId, {$set: { - "services.password.reset": tokenRecord - }}); - - // before passing to template, update user object with new token - Meteor._ensure(user, 'services', 'password').reset = tokenRecord; - - var enrollAccountUrl = Accounts.urls.enrollAccount(token); - - var options = { - to: email, - from: Accounts.emailTemplates.enrollAccount.from - ? Accounts.emailTemplates.enrollAccount.from(user) - : Accounts.emailTemplates.from, - subject: Accounts.emailTemplates.enrollAccount.subject(user) - }; - - if (typeof Accounts.emailTemplates.enrollAccount.text === 'function') { - options.text = - Accounts.emailTemplates.enrollAccount.text(user, enrollAccountUrl); - } - - if (typeof Accounts.emailTemplates.enrollAccount.html === 'function') { - options.html = - Accounts.emailTemplates.enrollAccount.html(user, enrollAccountUrl); - } - - if (typeof Accounts.emailTemplates.headers === 'object') { - options.headers = Accounts.emailTemplates.headers; - } - +Accounts.sendEnrollmentEmail = function (userId, email, extraTokenData) { + const {email: realEmail, user, token} = + Accounts.generateResetToken(userId, email, 'enrollAccount', extraTokenData); + const url = Accounts.urls.enrollAccount(token); + const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'enrollAccount'); Email.send(options); + return {email: realEmail, user, token, url, options}; }; @@ -782,71 +836,21 @@ Meteor.methods({resetPassword: function (token, newPassword) { * @locus Server * @param {String} userId The id of the user to send email to. * @param {String} [email] Optional. Which address of the user's to send the email to. This address must be in the user's `emails` list. Defaults to the first unverified email in the list. + * @param {Object} [extraTokenData] Optional additional data to be added into the token record. + * @returns {Object} Object with {email, user, token, url, options} values. * @importFromPackage accounts-base */ -Accounts.sendVerificationEmail = function (userId, address) { +Accounts.sendVerificationEmail = function (userId, email, extraTokenData) { // XXX Also generate a link using which someone can delete this // account if they own said address but weren't those who created // this account. - // Make sure the user exists, and address is one of their addresses. - var user = Meteor.users.findOne(userId); - if (!user) - throw new Error("Can't find user"); - // pick the first unverified address if we weren't passed an address. - if (!address) { - var email = _.find(user.emails || [], - function (e) { return !e.verified; }); - address = (email || {}).address; - - if (!address) { - throw new Error("That user has no unverified email addresses."); - } - } - // make sure we have a valid address - if (!address || !_.contains(_.pluck(user.emails || [], 'address'), address)) - throw new Error("No such email address for user."); - - - var tokenRecord = { - token: Random.secret(), - address: address, - when: new Date()}; - Meteor.users.update( - {_id: userId}, - {$push: {'services.email.verificationTokens': tokenRecord}}); - - // before passing to template, update user object with new token - Meteor._ensure(user, 'services', 'email'); - if (!user.services.email.verificationTokens) { - user.services.email.verificationTokens = []; - } - user.services.email.verificationTokens.push(tokenRecord); - - var verifyEmailUrl = Accounts.urls.verifyEmail(tokenRecord.token); - - var options = { - to: address, - from: Accounts.emailTemplates.verifyEmail.from - ? Accounts.emailTemplates.verifyEmail.from(user) - : Accounts.emailTemplates.from, - subject: Accounts.emailTemplates.verifyEmail.subject(user) - }; - - if (typeof Accounts.emailTemplates.verifyEmail.text === 'function') { - options.text = - Accounts.emailTemplates.verifyEmail.text(user, verifyEmailUrl); - } - - if (typeof Accounts.emailTemplates.verifyEmail.html === 'function') - options.html = - Accounts.emailTemplates.verifyEmail.html(user, verifyEmailUrl); - - if (typeof Accounts.emailTemplates.headers === 'object') { - options.headers = Accounts.emailTemplates.headers; - } - + const {email: realEmail, user, token} = + Accounts.generateVerificationToken(userId, email, extraTokenData); + const url = Accounts.urls.verifyEmail(token); + const options = Accounts.generateOptionsForEmail(realEmail, user, url, 'verifyEmail'); Email.send(options); + return {email: realEmail, user, token, url, options}; }; // Take token from sendVerificationEmail, mark the email as verified, From 01378df2a076dce0aa3877cf120f8fe9fd32f684 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Wed, 19 Jul 2017 12:12:58 -0400 Subject: [PATCH 18/33] Adjust test-packages --test-app-path to create the directory if missing (#8923) * Adjust test-packages --test-app-path to create the directory if missing. * Slight style tweak. --- tools/cli/commands.js | 41 +++++++++++++++++++-- tools/tests/command-line.js | 72 +++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 3 deletions(-) diff --git a/tools/cli/commands.js b/tools/cli/commands.js index bf3f8b90a6..f6307b2891 100644 --- a/tools/cli/commands.js +++ b/tools/cli/commands.js @@ -1579,8 +1579,31 @@ function doTestCommand(options) { // cleaned up on process exit. Using a temporary app dir means that we can // run multiple "test-packages" commands in parallel without them stomping // on each other. - var testRunnerAppDir = - options['test-app-path'] || files.mkdtemp('meteor-test-run'); + let testRunnerAppDir; + const testAppPath = options['test-app-path']; + if (testAppPath) { + try { + if (files.mkdir_p(testAppPath, 0o700)) { + testRunnerAppDir = testAppPath; + } else { + Console.error( + 'The specified --test-app-path directory could not be used, as ' + + `"${testAppPath}" already exists and it is not a directory.` + ); + return 1; + } + } catch (error) { + Console.error( + 'Unable to create the specified --test-app-path directory of ' + + `"${testAppPath}".` + ); + throw error; + } + } + + if (!testRunnerAppDir) { + testRunnerAppDir = files.mkdtemp('meteor-test-run'); + } // Download packages for our architecture, and for the deploy server's // architecture if we're deploying. @@ -1611,7 +1634,19 @@ function doTestCommand(options) { projectContextOptions.projectDir = testRunnerAppDir; projectContextOptions.projectDirForLocalPackages = options.appDir; - require("./default-npm-deps.js").install(testRunnerAppDir); + try { + require("./default-npm-deps.js").install(testRunnerAppDir); + } catch (error) { + if (error.code === 'EACCES' && options['test-app-path']) { + Console.error( + 'The specified --test-app-path directory of ' + + `"${testRunnerAppDir}" exists, but the current user does not have ` + + `read/write permission in it.` + ); + } + throw error; + } + if (buildmessage.jobHasMessages()) { return; } diff --git a/tools/tests/command-line.js b/tools/tests/command-line.js index 9b3ba93e55..dcceac073f 100644 --- a/tools/tests/command-line.js +++ b/tools/tests/command-line.js @@ -561,3 +561,75 @@ selftest.define("old cli tests (converted)", function () { run.expectExit(0); files.unlink(files.pathJoin(s.cwd, 'settings.js')); }); + +// Added to address https://github.com/meteor/meteor/issues/8897. +selftest.define( + 'meteor test-packages --test-app-path directory', + function () { + var s = new Sandbox(); + var run; + + // If test-app-path doesn't exist, it should be created. + var testAppPath = '/tmp/meteor_test_app_path'; + files.rm_recursive(testAppPath); + selftest.expectFalse(files.exists(testAppPath)); + s.createApp('test-app-path-app', 'package-tests', { + dontPrepareApp: true + }); + s.cd('test-app-path-app/packages/say-something', function () { + run = s.run( + 'test-packages', + '--once', + { 'test-app-path': testAppPath }, + './' + ); + run.match('Started'); + selftest.expectTrue(files.exists(testAppPath)); + run.stop(); + files.rm_recursive(testAppPath); + }); + + // If test-app-path already exists, make sure that directory is used. + var testAppPath = '/tmp/meteor_test_app_path'; + files.rm_recursive(testAppPath); + files.mkdir_p(testAppPath); + selftest.expectTrue(files.exists(testAppPath)); + selftest.expectFalse(files.exists(testAppPath + '/.meteor')); + s.createApp('test-app-path-app', 'package-tests', { + dontPrepareApp: true + }); + s.cd('test-app-path-app/packages/say-something', function () { + run = s.run( + 'test-packages', + '--once', + { 'test-app-path': testAppPath }, + './' + ); + run.match('Started'); + selftest.expectTrue(files.exists(testAppPath + '/.meteor')); + run.stop(); + files.rm_recursive(testAppPath); + }); + + // If test-app-path already exists but is a file instead of a directory, + // show a console error message explaining this, and exit. + var testAppPath = '/tmp/meteor_test_app_path'; + files.rm_recursive(testAppPath); + files.writeFile(testAppPath, '<3 meteor'); + selftest.expectTrue(files.exists(testAppPath)); + s.createApp('test-app-path-app', 'package-tests', { + dontPrepareApp: true + }); + s.cd('test-app-path-app/packages/say-something', function () { + run = s.run( + 'test-packages', + '--once', + { 'test-app-path': testAppPath }, + './' + ); + run.matchErr('is not a directory'); + run.expectExit(1); + files.rm_recursive(testAppPath); + }); + } +); From 6820d401c3b2fdb403fa5d3132b6b7ee9847accc Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 20 Jul 2017 18:26:30 +0300 Subject: [PATCH 19/33] Un-pin version of `npm-mongo` used in `mongo` package. --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 74cc22955b..32af4fbe5d 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -21,7 +21,7 @@ Npm.strip({ }); Package.onUse(function (api) { - api.use('npm-mongo@2.2.24', 'server'); + api.use('npm-mongo', 'server'); api.use('allow-deny'); api.use([ From cbeba459ab123854bc898c3348aae9dd3e91f6b3 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 20 Jul 2017 18:27:33 +0300 Subject: [PATCH 20/33] Bump package version of `mongo` in preparation for publishing. --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 32af4fbe5d..d2496a5745 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.1.19' + version: '1.1.20' }); Npm.depends({ From 5038560b88600ce156b89820dc087ccdcb04650b Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 20 Jul 2017 15:58:42 -0400 Subject: [PATCH 21/33] Revert "Un-pin version of `npm-mongo` used in `mongo` package." (#8931) This reverts commit 6820d401c3b2fdb403fa5d3132b6b7ee9847accc. --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index d2496a5745..97a6c7556b 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -21,7 +21,7 @@ Npm.strip({ }); Package.onUse(function (api) { - api.use('npm-mongo', 'server'); + api.use('npm-mongo@2.2.24', 'server'); api.use('allow-deny'); api.use([ From 607f2922c44e536448c0d11535d85ae9a9613dc0 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 20 Jul 2017 15:11:31 -0400 Subject: [PATCH 22/33] Bump mongo version to replace currently broken 1.1.20 version. https://github.com/meteor/meteor/pull/8931 https://github.com/meteor/meteor/commit/cbeba459ab123854bc898c3348aae9dd3e91f6b3#commitcomment-23208660 --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 97a6c7556b..593e30cf28 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.1.20' + version: '1.1.21' }); Npm.depends({ From 51950067c0f48faa43022b22f0f40e3d140b0315 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 20 Jul 2017 18:07:47 -0400 Subject: [PATCH 23/33] Bump $BUNDLE_VERSION to 4.8.26 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index e7a1fe1cd3..6a61ea5835 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.25 +BUNDLE_VERSION=4.8.26 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 5a5ff0b1375942e2cccb973c7ede9082ab2491bb Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 20 Jul 2017 18:17:31 -0400 Subject: [PATCH 24/33] Bump package versions for 1.5.2-beta.4 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 44f00b666e..3fe7971c23 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2" + version: "1.3.2-beta152.4" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index fbbcff37f8..b95461f153 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.3' + version: '6.20.0-beta152.4' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 28feb62ed2..6c8ff5307f 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.3', + version: '1.0.0-beta152.4', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 6cb983db03..02264697b9 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.3' + version: '1.2.0-beta152.4' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index df5ff1f568..12fb204504 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.3" + version: "1.5.2-beta.4" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index ac7ce0fa0a..ae812e1431 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.3' + version: '1.3.0-beta152.4' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index a3323370ac..c481877d03 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.3", + version: "0.10.0-beta152.4", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 76d4652d95..e2830798f3 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.3' + version: '1.2.0-beta152.4' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index d581e74fe3..6340084ed5 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.3", + version: "0.9.0-beta152.4", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index b3b0b47218..49b689c82f 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.3' + version: '1.3.18-beta152.4' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index c9d977d5e2..9552b63d46 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.3", + "version": "1.5.2-beta.4", "recommended": false, "official": false, "description": "Meteor" From 8fe5bdf99bd3979ba0283814e47eefa7b794f8a4 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 20 Jul 2017 18:23:39 +0300 Subject: [PATCH 25/33] Merge pull request #8870 from sprohaska/p/mongodb-arbiter-login npm-mongo: Upgrade to npm mongo@2.2.29 to fix arbiter login attempts --- .../.npm/package/npm-shrinkwrap.json | 35 +++++++++++-------- packages/npm-mongo/package.js | 4 +-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json index d916f66718..defa257e62 100644 --- a/packages/npm-mongo/.npm/package/npm-shrinkwrap.json +++ b/packages/npm-mongo/.npm/package/npm-shrinkwrap.json @@ -8,7 +8,7 @@ "buffer-shims": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "from": "buffer-shims@>=1.0.0 <2.0.0" + "from": "buffer-shims@>=1.0.0 <1.1.0" }, "core-util-is": { "version": "1.0.2", @@ -31,14 +31,14 @@ "from": "isarray@>=1.0.0 <1.1.0" }, "mongodb": { - "version": "2.2.24", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.24.tgz", - "from": "mongodb@2.2.24" + "version": "2.2.30", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.30.tgz", + "from": "mongodb@2.2.30" }, "mongodb-core": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.8.tgz", - "from": "mongodb-core@2.1.8" + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.14.tgz", + "from": "mongodb-core@2.1.14" }, "process-nextick-args": { "version": "1.0.7", @@ -46,13 +46,13 @@ "from": "process-nextick-args@>=1.0.6 <1.1.0" }, "readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "from": "readable-stream@2.1.5" + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "from": "readable-stream@2.2.7" }, "require_optional": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.0.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "from": "require_optional@>=1.0.0 <1.1.0" }, "resolve-from": { @@ -60,15 +60,20 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "from": "resolve-from@>=2.0.0 <3.0.0" }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "from": "safe-buffer@>=5.1.0 <5.2.0" + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "from": "semver@>=5.1.0 <6.0.0" }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "from": "string_decoder@>=0.10.0 <0.11.0" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "from": "string_decoder@>=1.0.0 <1.1.0" }, "util-deprecate": { "version": "1.0.2", diff --git a/packages/npm-mongo/package.js b/packages/npm-mongo/package.js index a4a7395c5c..84b27a141b 100644 --- a/packages/npm-mongo/package.js +++ b/packages/npm-mongo/package.js @@ -3,12 +3,12 @@ Package.describe({ summary: "Wrapper around the mongo npm package", - version: '2.2.24', + version: '2.2.30', documentation: null }); Npm.depends({ - mongodb: "2.2.24" + mongodb: "2.2.30" }); Package.onUse(function (api) { From 6e0e4211b46de51c385b0564ab589458377beed9 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 20 Jul 2017 18:26:30 +0300 Subject: [PATCH 26/33] Un-pin version of `npm-mongo` used in `mongo` package. --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 74cc22955b..32af4fbe5d 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -21,7 +21,7 @@ Npm.strip({ }); Package.onUse(function (api) { - api.use('npm-mongo@2.2.24', 'server'); + api.use('npm-mongo', 'server'); api.use('allow-deny'); api.use([ From 55cb31a275b5f3d04514a5bf0a5bd6255268bd89 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Thu, 20 Jul 2017 18:27:33 +0300 Subject: [PATCH 27/33] Bump package version of `mongo` in preparation for publishing. --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index 32af4fbe5d..d2496a5745 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.1.19' + version: '1.1.20' }); Npm.depends({ From 3fd393764be4fa9bd8afb4fb751be2b2ee918f41 Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Thu, 20 Jul 2017 15:11:31 -0400 Subject: [PATCH 28/33] Bump mongo version to replace currently broken 1.1.20 version. https://github.com/meteor/meteor/pull/8931 https://github.com/meteor/meteor/commit/cbeba459ab123854bc898c3348aae9dd3e91f6b3#commitcomment-23208660 --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index d2496a5745..c69267436d 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.1.20' + version: '1.1.21' }); Npm.depends({ From 9b60256056885405a58452fefc6fe43ba281e837 Mon Sep 17 00:00:00 2001 From: Jesse Rosenberger Date: Fri, 21 Jul 2017 13:09:44 +0300 Subject: [PATCH 29/33] Bump package version of `mongo` in preparation for publishing. --- packages/mongo/package.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mongo/package.js b/packages/mongo/package.js index c69267436d..07b47ecff2 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.1.21' + version: '1.1.22' }); Npm.depends({ From 41b438334919781485d424124a54184fd51930ab Mon Sep 17 00:00:00 2001 From: Hugh Willson Date: Fri, 21 Jul 2017 09:24:20 -0400 Subject: [PATCH 30/33] Adjust self-test match / timeout settings to help reduce Circle test failures (#8933) * Fix CircleCI failures by adjusting the timing of problematic tests. * Wait longer for Mongo to start. * Increase lint wait time; run logs show we're close to the current timeout. --- tools/tests/colon-converter-tests.js | 2 +- tools/tests/linter-plugins.js | 1 + tools/tests/package-tests.js | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/tests/colon-converter-tests.js b/tools/tests/colon-converter-tests.js index 6038011164..ab1172f446 100644 --- a/tools/tests/colon-converter-tests.js +++ b/tools/tests/colon-converter-tests.js @@ -74,7 +74,7 @@ if (process.platform !== "win32") { }); var run = s.run("add", packageName); - run.matchErr("colons"); + run.matchErrBeforeExit("colons"); }); }); } diff --git a/tools/tests/linter-plugins.js b/tools/tests/linter-plugins.js index 437d19079d..03afd7682c 100644 --- a/tools/tests/linter-plugins.js +++ b/tools/tests/linter-plugins.js @@ -109,6 +109,7 @@ selftest.define('linter plugins - linting package with `meteor lint`', () => { s.cd('myapp/packages/my-package'); const run = s.run('lint'); + run.waitSecs(15); const messages = [ /While linting files .* my-package .*Server/, diff --git a/tools/tests/package-tests.js b/tools/tests/package-tests.js index 69511d9984..7436d6a1b3 100644 --- a/tools/tests/package-tests.js +++ b/tools/tests/package-tests.js @@ -109,6 +109,7 @@ selftest.define("change packages during hot code push", [], function () { run.waitSecs(5); run.match("myapp"); run.match("proxy"); + run.waitSecs(5); run.match("MongoDB"); run.waitSecs(5); run.match("your app"); From b52c6587d7542c0f27481a3bee8c65be06068ac1 Mon Sep 17 00:00:00 2001 From: Seba Kerckhof Date: Fri, 21 Jul 2017 19:45:38 +0200 Subject: [PATCH 31/33] Handle regular expressions in EJSON (#8821) * Handle regular expressions in EJSON * Adjust "checkout" self-test wait time to fix failing self-test's. * Adjusting self-test "checkout" timeout further. * Self-test exit timeout adjustments for the CLI "argument parsing" tests. --- packages/ejson/ejson.js | 15 ++++++ packages/ejson/ejson_test.js | 10 ++++ packages/minimongo/selector.js | 3 +- packages/mongo/collection.js | 45 +--------------- packages/mongo/mongo_driver.js | 2 +- packages/mongo/mongo_livedata_tests.js | 75 +------------------------- tools/tests/command-line.js | 1 + tools/tests/releases.js | 1 + 8 files changed, 32 insertions(+), 120 deletions(-) diff --git a/packages/ejson/ejson.js b/packages/ejson/ejson.js index 2b74334f54..d8d0cb9471 100644 --- a/packages/ejson/ejson.js +++ b/packages/ejson/ejson.js @@ -94,6 +94,21 @@ var builtinConverters = [ return new Date(obj.$date); } }, + { // RegExp + matchJSONValue: function (obj) { + return _.has(obj, '$regexp') && _.has(obj, '$flags') && _.size(obj) === 2; + }, + matchObject: function (obj) { + return obj instanceof RegExp; + }, + toJSONValue: function (regexp) { + return { $regexp: regexp.source, $flags: regexp.flags }; + }, + fromJSONValue: function (obj) { + //replaces duplicate / invalid flags + return new RegExp(obj.$regexp, obj.$flags.replace(/[^gimuy]/g,'').replace(/(.)(?=.*\1)/g, '')); + } + }, { // NaN, Inf, -Inf. (These are the only objects with typeof !== 'object' // which we match.) matchJSONValue: function (obj) { diff --git a/packages/ejson/ejson_test.js b/packages/ejson/ejson_test.js index eba7c0e31b..fe28c67380 100644 --- a/packages/ejson/ejson_test.js +++ b/packages/ejson/ejson_test.js @@ -185,6 +185,16 @@ Tinytest.add("ejson - parse", function (test) { ); }); +Tinytest.add("ejson - regexp", function (test) { + test.equal(EJSON.stringify(/foo/gi), "{\"$regexp\":\"foo\",\"$flags\":\"gi\"}"); + var d = new RegExp("foo", "gi"); + var obj = { $regexp: "foo", $flags: "gi" }; + + var eObj = EJSON.toJSONValue(obj); + var roundTrip = EJSON.fromJSONValue(eObj); + test.equal(obj, roundTrip); +}); + Tinytest.add("ejson - custom types", function (test) { var testSameConstructors = function (obj, compareWith) { test.equal(obj.constructor, compareWith.constructor); diff --git a/packages/minimongo/selector.js b/packages/minimongo/selector.js index 840d06c9ed..99720962a0 100644 --- a/packages/minimongo/selector.js +++ b/packages/minimongo/selector.js @@ -775,8 +775,7 @@ ELEMENT_OPERATORS = { var regexp; if (valueSelector.$options !== undefined) { // Options passed in $options (even the empty string) always overrides - // options in the RegExp object itself. (See also - // Mongo.Collection._rewriteSelector.) + // options in the RegExp object itself. // Be clear that we only support the JS-supported options, not extended // ones (eg, Mongo supports x and s). Ideally we would implement x and s diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index b22eb0248a..6a1a6906a4 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -362,8 +362,7 @@ Mongo.Collection._publishCursor = function (cursor, sub, collection) { // protect against dangerous selectors. falsey and {_id: falsey} are both // likely programmer error, and not what you want, particularly for destructive -// operations. JS regexps don't serialize over DDP but can be trivially -// replaced by $regex. If a falsey _id is sent in, a new string _id will be +// operations. If a falsey _id is sent in, a new string _id will be // generated and returned; if a fallbackId is provided, it will be returned // instead. Mongo.Collection._rewriteSelector = (selector, { fallbackId } = {}) => { @@ -382,48 +381,8 @@ Mongo.Collection._rewriteSelector = (selector, { fallbackId } = {}) => { return { _id: fallbackId || Random.id() }; } - var ret = {}; - Object.keys(selector).forEach((key) => { - const value = selector[key]; - // Mongo supports both {field: /foo/} and {field: {$regex: /foo/}} - if (value instanceof RegExp) { - ret[key] = convertRegexpToMongoSelector(value); - } else if (value && value.$regex instanceof RegExp) { - ret[key] = convertRegexpToMongoSelector(value.$regex); - // if value is {$regex: /foo/, $options: ...} then $options - // override the ones set on $regex. - if (value.$options !== undefined) - ret[key].$options = value.$options; - } else if (_.contains(['$or','$and','$nor'], key)) { - // Translate lower levels of $and/$or/$nor - ret[key] = _.map(value, function (v) { - return Mongo.Collection._rewriteSelector(v); - }); - } else { - ret[key] = value; - } - }); - return ret; -}; - -// convert a JS RegExp object to a Mongo {$regex: ..., $options: ...} -// selector -function convertRegexpToMongoSelector(regexp) { - check(regexp, RegExp); // safety belt - - var selector = {$regex: regexp.source}; - var regexOptions = ''; - // JS RegExp objects support 'i', 'm', and 'g'. Mongo regex $options - // support 'i', 'm', 'x', and 's'. So we support 'i' and 'm' here. - if (regexp.ignoreCase) - regexOptions += 'i'; - if (regexp.multiline) - regexOptions += 'm'; - if (regexOptions) - selector.$options = regexOptions; - return selector; -} +}; // 'insert' immediately returns the inserted document's new _id. // The others return values immediately if you are in a stub, an in-memory diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 476fe7199a..fd9e05437b 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -1183,7 +1183,7 @@ MongoConnection.prototype._observeChanges = function ( throw Error("You may not observe a cursor with {fields: {_id: 0}}"); } - var observeKey = JSON.stringify( + var observeKey = EJSON.stringify( _.extend({ordered: ordered}, cursorDescription)); var multiplexer, observeDriver; diff --git a/packages/mongo/mongo_livedata_tests.js b/packages/mongo/mongo_livedata_tests.js index 1df0a927e2..faba62f641 100644 --- a/packages/mongo/mongo_livedata_tests.js +++ b/packages/mongo/mongo_livedata_tests.js @@ -2152,88 +2152,15 @@ _.each(Meteor.isServer ? [true, false] : [true], function (minimongo) { }); // end idGeneration parametrization Tinytest.add('mongo-livedata - rewrite selector', function (test) { - test.equal(Mongo.Collection._rewriteSelector({x: /^o+B/im}), - {x: {$regex: '^o+B', $options: 'im'}}); - test.equal(Mongo.Collection._rewriteSelector({x: {$regex: /^o+B/im}}), - {x: {$regex: '^o+B', $options: 'im'}}); - test.equal(Mongo.Collection._rewriteSelector({x: /^o+B/}), - {x: {$regex: '^o+B'}}); - test.equal(Mongo.Collection._rewriteSelector({x: {$regex: /^o+B/}}), - {x: {$regex: '^o+B'}}); + test.equal(Mongo.Collection._rewriteSelector('foo'), {_id: 'foo'}); - test.equal( - Mongo.Collection._rewriteSelector( - {'$or': [ - {x: /^o/}, - {y: /^p/}, - {z: 'q'}, - {w: {$regex: /^r/}} - ]} - ), - {'$or': [ - {x: {$regex: '^o'}}, - {y: {$regex: '^p'}}, - {z: 'q'}, - {w: {$regex: '^r'}} - ]} - ); - - test.equal( - Mongo.Collection._rewriteSelector( - {'$or': [ - {'$and': [ - {x: /^a/i}, - {y: /^b/}, - {z: {$regex: /^c/i}}, - {w: {$regex: '^[abc]', $options: 'i'}}, // make sure we don't break vanilla selectors - {v: {$regex: /O/, $options: 'i'}}, // $options should override the ones on the RegExp object - {u: {$regex: /O/m, $options: 'i'}} // $options should override the ones on the RegExp object - ]}, - {'$nor': [ - {s: /^d/}, - {t: /^e/i}, - {u: {$regex: /^f/i}}, - // even empty string overrides built-in flags - {v: {$regex: /^g/i, $options: ''}} - ]} - ]} - ), - {'$or': [ - {'$and': [ - {x: {$regex: '^a', $options: 'i'}}, - {y: {$regex: '^b'}}, - {z: {$regex: '^c', $options: 'i'}}, - {w: {$regex: '^[abc]', $options: 'i'}}, - {v: {$regex: 'O', $options: 'i'}}, - {u: {$regex: 'O', $options: 'i'}} - ]}, - {'$nor': [ - {s: {$regex: '^d'}}, - {t: {$regex: '^e', $options: 'i'}}, - {u: {$regex: '^f', $options: 'i'}}, - {v: {$regex: '^g', $options: ''}} - ]} - ]} - ); var oid = new Mongo.ObjectID(); test.equal(Mongo.Collection._rewriteSelector(oid), {_id: oid}); - // Make sure selectors with "length" properties are handled properly - // (verifies issue #8329 has been resolved). - const SomeSelector = function (length) { - this.length = length; - }; - const length = 2; - const testSelector = new SomeSelector(length); - test.equal( - Mongo.Collection._rewriteSelector(testSelector), - { length } - ); - test.matches( Mongo.Collection._rewriteSelector({ _id: null })._id, /^\S+$/, diff --git a/tools/tests/command-line.js b/tools/tests/command-line.js index 9b3ba93e55..5e42c26444 100644 --- a/tools/tests/command-line.js +++ b/tools/tests/command-line.js @@ -315,6 +315,7 @@ selftest.define("argument parsing", function () { s.createApp('myapp', 'standard-app'); s.cd('myapp', function () { run = s.run("list"); + run.waitSecs(30); run.expectExit(0); }); diff --git a/tools/tests/releases.js b/tools/tests/releases.js index bb409e537f..72a1f8568b 100644 --- a/tools/tests/releases.js +++ b/tools/tests/releases.js @@ -192,6 +192,7 @@ selftest.define("checkout", ['checkout'], function () { run.readErr("=> Running Meteor from a checkout"); run.matchErr("project version"); run.matchErr("(Meteor something)\n"); + run.waitSecs(30); run.expectExit(0); }); }); From 16c4e2a7f7221fe84f46d8e0c4d59051685a14ba Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 21 Jul 2017 18:38:51 -0400 Subject: [PATCH 32/33] Bump $BUNDLE_VERSION to 4.8.27 before rebuilding dev bundle. --- meteor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meteor b/meteor index 6a61ea5835..de5721b1a5 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BUNDLE_VERSION=4.8.26 +BUNDLE_VERSION=4.8.27 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. From 6cf879d6bf676b1cf282a6560870224b142a9cb2 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 21 Jul 2017 18:41:24 -0400 Subject: [PATCH 33/33] Bump package versions for 1.5.2-beta.5 release. --- packages/accounts-base/package.js | 2 +- packages/babel-compiler/package.js | 2 +- packages/boilerplate-generator-tests/package.js | 2 +- packages/boilerplate-generator/package.js | 2 +- packages/meteor-tool/package.js | 2 +- packages/minimongo/package.js | 2 +- packages/modules/package.js | 2 +- packages/mongo/package.js | 2 +- packages/promise/package.js | 2 +- packages/webapp/package.js | 2 +- scripts/admin/meteor-release-experimental.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 3fe7971c23..abdec29407 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.3.2-beta152.4" + version: "1.3.2-beta152.5" }); Package.onUse(function (api) { diff --git a/packages/babel-compiler/package.js b/packages/babel-compiler/package.js index b95461f153..5201bc3cf1 100644 --- a/packages/babel-compiler/package.js +++ b/packages/babel-compiler/package.js @@ -6,7 +6,7 @@ Package.describe({ // isn't possible because you can't publish a non-recommended // release with package versions that don't have a pre-release // identifier at the end (eg, -dev) - version: '6.20.0-beta152.4' + version: '6.20.0-beta152.5' }); Npm.depends({ diff --git a/packages/boilerplate-generator-tests/package.js b/packages/boilerplate-generator-tests/package.js index 6c8ff5307f..beb9221b98 100644 --- a/packages/boilerplate-generator-tests/package.js +++ b/packages/boilerplate-generator-tests/package.js @@ -2,7 +2,7 @@ Package.describe({ // These tests are in a separate package so that we can Npm.depend on // parse5, a html parsing library. summary: "Tests for the boilerplate-generator package", - version: '1.0.0-beta152.4', + version: '1.0.0-beta152.5', documentation: null }); diff --git a/packages/boilerplate-generator/package.js b/packages/boilerplate-generator/package.js index 02264697b9..1a89175879 100644 --- a/packages/boilerplate-generator/package.js +++ b/packages/boilerplate-generator/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Generates the boilerplate html from program's manifest", - version: '1.2.0-beta152.4' + version: '1.2.0-beta152.5' }); Package.onUse(api => { diff --git a/packages/meteor-tool/package.js b/packages/meteor-tool/package.js index 12fb204504..b78278dcaa 100644 --- a/packages/meteor-tool/package.js +++ b/packages/meteor-tool/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "The Meteor command-line tool", - version: "1.5.2-beta.4" + version: "1.5.2-beta.5" }); Package.includeTool(); diff --git a/packages/minimongo/package.js b/packages/minimongo/package.js index ae812e1431..968a6fb53d 100644 --- a/packages/minimongo/package.js +++ b/packages/minimongo/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Meteor's client-side datastore: a port of MongoDB to Javascript", - version: '1.3.0-beta152.4' + version: '1.3.0-beta152.5' }); Package.onUse(function (api) { diff --git a/packages/modules/package.js b/packages/modules/package.js index c481877d03..ac2204d813 100644 --- a/packages/modules/package.js +++ b/packages/modules/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "modules", - version: "0.10.0-beta152.4", + version: "0.10.0-beta152.5", summary: "CommonJS module system", documentation: "README.md" }); diff --git a/packages/mongo/package.js b/packages/mongo/package.js index ac873e9a32..4eea1d7432 100644 --- a/packages/mongo/package.js +++ b/packages/mongo/package.js @@ -9,7 +9,7 @@ Package.describe({ summary: "Adaptor for using MongoDB and Minimongo over DDP", - version: '1.2.0-beta152.4' + version: '1.2.0-beta152.5' }); Npm.depends({ diff --git a/packages/promise/package.js b/packages/promise/package.js index 6340084ed5..adc326f341 100644 --- a/packages/promise/package.js +++ b/packages/promise/package.js @@ -1,6 +1,6 @@ Package.describe({ name: "promise", - version: "0.9.0-beta152.4", + version: "0.9.0-beta152.5", summary: "ECMAScript 2015 Promise polyfill with Fiber support", git: "https://github.com/meteor/promise", documentation: "README.md" diff --git a/packages/webapp/package.js b/packages/webapp/package.js index 49b689c82f..f741bc66c0 100644 --- a/packages/webapp/package.js +++ b/packages/webapp/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Serves a Meteor app over HTTP", - version: '1.3.18-beta152.4' + version: '1.3.18-beta152.5' }); Npm.depends({connect: "2.30.2", diff --git a/scripts/admin/meteor-release-experimental.json b/scripts/admin/meteor-release-experimental.json index 9552b63d46..6564e149a5 100644 --- a/scripts/admin/meteor-release-experimental.json +++ b/scripts/admin/meteor-release-experimental.json @@ -1,6 +1,6 @@ { "track": "METEOR", - "version": "1.5.2-beta.4", + "version": "1.5.2-beta.5", "recommended": false, "official": false, "description": "Meteor"