From 6a3db4a11b17ea5fd2d7e10d25540688094d1d0d Mon Sep 17 00:00:00 2001 From: David Joy Date: Tue, 8 Jun 2021 11:14:37 -0400 Subject: [PATCH] Conditionally enable segment and clean up environment variables (#181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(deps): bumping frontend-platform to latest This picks up a change in which a blank SEGMENT_KEY no longer causes the MFE to make a request to segment which results in a 404. This was a requested fix for lilac. * fix: cleanup environment variables - Removes stray commas from the end of each environment variable in .env - Removes CSRF_COOKIE_NAME completely - it is not used. - Replaces default values with empty strings ‘’ - this will make the defaults falsy, rather than have them get converted to a string “null” value, which is very misleading. It also enables the SEGMENT_KEY fix mentioned in the prior commit to work. * fix: conditionally enable the segment middleware Only add it if SEGMENT_KEY is truthy. * build: bumping version number --- .env | 66 +++++++++++++++++++-------------------- .env.development | 7 ++--- package-lock.json | 76 +++++++++++++++++++++++++-------------------- package.json | 4 +-- src/config/index.js | 1 - src/data/store.js | 9 ++++-- 6 files changed, 85 insertions(+), 78 deletions(-) diff --git a/.env b/.env index 9ea5a9a..5210bf7 100644 --- a/.env +++ b/.env @@ -1,35 +1,33 @@ -NODE_ENV='production', +NODE_ENV='production' NODE_PATH=./src -BASE_URL=null, -LMS_BASE_URL=null, -LOGIN_URL=null, -LOGOUT_URL=null, -CSRF_TOKEN_API_PATH=null, -REFRESH_ACCESS_TOKEN_ENDPOINT=null, -DATA_API_BASE_URL=null, -SEGMENT_KEY=null, -FEATURE_FLAGS={}, -ACCESS_TOKEN_COOKIE_NAME=null, -CSRF_COOKIE_NAME='csrftoken', -NEW_RELIC_APP_ID=null, -NEW_RELIC_LICENSE_KEY=null, -SITE_NAME='', -MARKETING_SITE_BASE_URL=null, -SUPPORT_URL=null, -CONTACT_URL=null, -OPEN_SOURCE_URL=null, -TERMS_OF_SERVICE_URL=null, -PRIVACY_POLICY_URL=null, -FACEBOOK_URL=null, -TWITTER_URL=null, -YOU_TUBE_URL=null, -LINKED_IN_URL=null, -REDDIT_URL=null, -APPLE_APP_STORE_URL=null, -GOOGLE_PLAY_URL=null, -ENTERPRISE_MARKETING_URL=null, -ENTERPRISE_MARKETING_UTM_SOURCE=null, -ENTERPRISE_MARKETING_UTM_CAMPAIGN=null, -ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM=null, - -BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS=null, +BASE_URL='' +LMS_BASE_URL='' +LOGIN_URL='' +LOGOUT_URL='' +CSRF_TOKEN_API_PATH='' +REFRESH_ACCESS_TOKEN_ENDPOINT='' +DATA_API_BASE_URL='' +SEGMENT_KEY='' +FEATURE_FLAGS={} +ACCESS_TOKEN_COOKIE_NAME='' +NEW_RELIC_APP_ID='' +NEW_RELIC_LICENSE_KEY='' +SITE_NAME='' +MARKETING_SITE_BASE_URL='' +SUPPORT_URL='' +CONTACT_URL='' +OPEN_SOURCE_URL='' +TERMS_OF_SERVICE_URL='' +PRIVACY_POLICY_URL='' +FACEBOOK_URL='' +TWITTER_URL='' +YOU_TUBE_URL='' +LINKED_IN_URL='' +REDDIT_URL='' +APPLE_APP_STORE_URL='' +GOOGLE_PLAY_URL='' +ENTERPRISE_MARKETING_URL='' +ENTERPRISE_MARKETING_UTM_SOURCE='' +ENTERPRISE_MARKETING_UTM_CAMPAIGN='' +ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM='' +BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS='' diff --git a/.env.development b/.env.development index 73f1316..7da49a2 100644 --- a/.env.development +++ b/.env.development @@ -14,13 +14,11 @@ REFRESH_ACCESS_TOKEN_ENDPOINT='http://localhost:18000/login_refresh' ACCESS_TOKEN_COOKIE_NAME='edx-jwt-cookie-header-payload' USER_INFO_COOKIE_NAME='edx-user-info' SITE_NAME=localhost - DATA_API_BASE_URL='http://localhost:8000' // LMS_CLIENT_ID should match the lms DOT client application id your LMS containe LMS_CLIENT_ID='login-service-client-id' -SEGMENT_KEY=null +SEGMENT_KEY='' FEATURE_FLAGS={} -CSRF_COOKIE_NAME='csrftoken' MARKETING_SITE_BASE_URL='http://localhost:18000' SUPPORT_URL='http://localhost:18000/support' CONTACT_URL='http://localhost:18000/contact' @@ -38,5 +36,4 @@ ENTERPRISE_MARKETING_URL='http://example.com' ENTERPRISE_MARKETING_UTM_SOURCE='example.com' ENTERPRISE_MARKETING_UTM_CAMPAIGN='example.com Referral' ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM='Footer' - -BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS=null +BULK_MANAGEMENT_SPECIAL_ACCESS_COURSE_IDS='' diff --git a/package-lock.json b/package-lock.json index 9ef6eb7..664e9e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@edx/frontend-app-gradebook", - "version": "1.4.31", + "version": "1.4.34", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1275,9 +1275,9 @@ } }, "@cospired/i18n-iso-languages": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@cospired/i18n-iso-languages/-/i18n-iso-languages-2.1.2.tgz", - "integrity": "sha512-XylKOsWRyQm9sNanZnppRORXTLaL34uThyBQpTFwOGAYvNg9PeYsyTTfLA1FTCh02RV+kiwt/O/y14DR/OqpWg==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cospired/i18n-iso-languages/-/i18n-iso-languages-2.2.0.tgz", + "integrity": "sha512-hywY9u9apWGeLxQuRcXw7IW0XkMdXum/hr3TpmHY2fAbXMTFlhhkPCdsQeHzjxMQwTnMgXaZ4j4WOCwKtlDRCQ==" }, "@edx/brand": { "version": "npm:@edx/brand-edx.org@1.6.1", @@ -3292,11 +3292,11 @@ } }, "@edx/frontend-platform": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-1.8.1.tgz", - "integrity": "sha512-oHLSamyIDuCtdS7eDzLcYs4zsAOGf4uuywnnIKg1CnlEHzUrXnfmcajbNM3Wre5jJocGH+1qACuaGLELO+3sAQ==", + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-1.9.5.tgz", + "integrity": "sha512-noCb39j1CeCnLFhCAKMrJUBDoyKLRv2ORfEkEPeIFxGG7b49sSFR4J/ijHXJgwJ7WhUo6+hj42Fg/Zt3xEYj7g==", "requires": { - "@cospired/i18n-iso-languages": "2.1.2", + "@cospired/i18n-iso-languages": "2.2.0", "axios": "0.21.1", "axios-cache-adapter": "^2.5.0", "form-urlencoded": "4.1.4", @@ -3310,24 +3310,9 @@ "lodash.memoize": "4.1.2", "lodash.merge": "4.6.2", "lodash.snakecase": "4.1.1", - "pubsub-js": "1.7.0", + "pubsub-js": "1.9.3", "react-intl": "2.9.0", "universal-cookie": "4.0.4" - }, - "dependencies": { - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - } } }, "@edx/paragon": { @@ -6307,7 +6292,6 @@ "version": "0.21.1", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dev": true, "requires": { "follow-redirects": "^1.10.0" }, @@ -6315,18 +6299,17 @@ "follow-redirects": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", - "dev": true + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" } } }, "axios-cache-adapter": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/axios-cache-adapter/-/axios-cache-adapter-2.5.0.tgz", - "integrity": "sha512-YcMPdMoqmSLoZx7A5YD/PdYGuX6/Y9M2tHBhaIXvXrPeGgNnbW7nb3+uArWlT53WGHLfclnu2voMmS7jGXVg6A==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/axios-cache-adapter/-/axios-cache-adapter-2.7.3.tgz", + "integrity": "sha512-A+ZKJ9lhpjthOEp4Z3QR/a9xC4du1ALaAsejgRGrH9ef6kSDxdFrhRpulqsh9khsEnwXxGfgpUuDp1YXMNMEiQ==", "requires": { "cache-control-esm": "1.0.0", - "lodash": "^4.17.11" + "md5": "^2.2.1" } }, "axios-mock-adapter": { @@ -7851,6 +7834,11 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, "check-types": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", @@ -9132,6 +9120,11 @@ "which": "^1.2.9" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -13696,6 +13689,11 @@ "call-bind": "^1.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-callable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", @@ -17183,6 +17181,16 @@ "css-mediaquery": "^0.1.2" } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -23874,9 +23882,9 @@ } }, "pubsub-js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.7.0.tgz", - "integrity": "sha512-Pb68P9qFZxnvDipHMuj9oT1FoIgBcXJ9C9eWdHCLZAnulaUoJ3+Y87RhGMYilWpun6DMWVmvK70T4RP4drZMSA==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.3.tgz", + "integrity": "sha512-FhYYlPNOywTh7zN38u5AlG67emA47w6JZd7YgdQU1w8gQbZhhIGxVM0AQosdaINHb2ALb+fhfnVyBJAt4D4IzA==" }, "pump": { "version": "3.0.0", diff --git a/package.json b/package.json index 26c24c8..1d7fd4c 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@edx/frontend-app-gradebook", - "version": "1.4.33", + "version": "1.4.34", "description": "edx editable gradebook-ui to manipulate grade overrides on subsections", "repository": { "type": "git", @@ -28,7 +28,7 @@ "dependencies": { "@edx/brand": "npm:@edx/brand-edx.org@^1.3.2", "@edx/frontend-component-footer": "10.1.1", - "@edx/frontend-platform": "1.8.1", + "@edx/frontend-platform": "1.9.5", "@edx/paragon": "14.6.1", "@fortawesome/fontawesome-svg-core": "^1.2.25", "@fortawesome/free-brands-svg-icons": "^5.11.2", diff --git a/src/config/index.js b/src/config/index.js index 7dd296c..1ed328b 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -9,7 +9,6 @@ const configuration = { SECURE_COOKIES: process.env.NODE_ENV !== 'development', SEGMENT_KEY: process.env.SEGMENT_KEY, ACCESS_TOKEN_COOKIE_NAME: process.env.ACCESS_TOKEN_COOKIE_NAME, - CSRF_COOKIE_NAME: process.env.CSRF_COOKIE_NAME, }; const features = {}; diff --git a/src/data/store.js b/src/data/store.js index 4406dcf..270f486 100755 --- a/src/data/store.js +++ b/src/data/store.js @@ -8,6 +8,7 @@ import Segment, { trackEvent, trackPageView } from '@redux-beacon/segment'; import actions from './actions'; import selectors from './selectors'; import reducers from './reducers'; +import { configuration } from '../config'; const loggerMiddleware = createLogger(); const trackingCategory = 'gradebook'; @@ -88,11 +89,15 @@ const eventsMap = { ), }; -const segmentMiddleware = createMiddleware(eventsMap, Segment()); +const middleware = [thunkMiddleware, loggerMiddleware]; +// Conditionally add the segmentMiddleware only if the SEGMENT_KEY environment variable exists. +if (configuration.SEGMENT_KEY) { + middleware.push(createMiddleware(eventsMap, Segment())); +} const store = createStore( reducers, - composeWithDevTools(applyMiddleware(thunkMiddleware, loggerMiddleware, segmentMiddleware)), + composeWithDevTools(applyMiddleware(...middleware)), ); // TODO debug only