diff --git a/Dockerfile b/Dockerfile
index fd7ae58d1533ed39e109c4c3d24f6d264b4c63f9..4d5152381d39f389a2e995e4599d93810a3993a1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,10 +9,11 @@ RUN npm ci
# copy over all code and build
COPY . .
RUN npm run build
+USER appuser
# Stage 2
# final image build
-FROM registry.il2.dso.mil/platform-one/devops/pipeline-templates/base-image/harden-nginx-19:1.19.2
+FROM registry.il2.dso.mil/platform-one/devops/pipeline-templates/base-image/harden-nginx-20:1.20.1
COPY nginx/nginx.conf /etc/nginx/nginx.conf
COPY nginx/nginx-security.conf /etc/nginx/snippets/nginx-security.conf
diff --git a/README.md b/README.md
index 490ea1ad35844461c949da52006551a2bc18ffbc..823a11f08b2a70f9d737d0497d5668de6f68fb9e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# launchboard
-Static site for https://launchboard.dso.mil (coming soon)
-(staging available now: https://launchboard.staging.dso.mil)
+Front-end for https://launchboard.apps.dso.mil
+(staging: https://launchboard.staging.dso.mil)
## Project setup
diff --git a/nginx/nginx-security.conf b/nginx/nginx-security.conf
index ab79e081c9216b2db80f7fd43cf556a56c44d078..3e4e0e2c2fa95ceb557d1835baacd56ce4375d9e 100644
--- a/nginx/nginx-security.conf
+++ b/nginx/nginx-security.conf
@@ -1,5 +1,5 @@
add_header X-Frame-Options "DENY";
-add_header Content-Security-Policy "default-src 'self'; script-src 'self' www.google-analytics.com; style-src 'self' 'nonce-bGF1bmNoYm9hcmQtbm9uY2U=' www.google-analytics.com; img-src 'self'; connect-src 'self' www.google-analytics.com; font-src 'self'; object-src 'self'; media-src 'self'; frame-src 'none'; form-action 'self'; frame-ancestors 'none';" always;
+add_header Content-Security-Policy "default-src 'self'; script-src 'self' www.google-analytics.com; style-src 'self' 'nonce-bGF1bmNoYm9hcmQtbm9uY2U=' www.google-analytics.com; img-src 'self'; connect-src 'self' www.google-analytics.com; font-src 'self'; object-src 'self'; media-src 'self'; manifest-src 'self' 'nonce-bGF1bmNoYm9hcmQtbm9uY2U=' *.dso.mil; frame-src 'none'; form-action 'self'; frame-ancestors 'none';" always;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
diff --git a/package-lock.json b/package-lock.json
index 9b03dae8403e7a7217412fdce0d7b2992440c6a7..9fbad65a3833d378bc12f6a3caeba8d3038d800a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2809,9 +2809,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -3079,6 +3079,12 @@
"@types/yargs": "^13.0.0"
}
},
+ "@leichtgewicht/ip-codec": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.2.tgz",
+ "integrity": "sha512-PjsLKLzJ0jWM1iM4xdYkrMyonAHP4kHGiXm81FRNfcnjToQA9UOknwZE28bxq0AGmEAMVBPSuuHurzla2wyYyA==",
+ "dev": true
+ },
"@mdi/font": {
"version": "5.9.55",
"resolved": "https://registry.npmjs.org/@mdi/font/-/font-5.9.55.tgz",
@@ -4295,6 +4301,14 @@
"aggregate-error": "^3.0.0"
}
},
+ "serialize-javascript": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
+ "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
"ssri": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
@@ -4353,9 +4367,9 @@
}
},
"vue-loader-v16": {
- "version": "npm:vue-loader@16.2.0",
- "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz",
- "integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==",
+ "version": "npm:vue-loader@16.3.3",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.3.3.tgz",
+ "integrity": "sha512-/1GzCuQ6MRORbC+leKTKoTGtpQt60bYe0gDGEextSteA2OM+v201FPha5jzmjQzVhRcwieZeUvezAtG5a/e5cw==",
"dev": true,
"optional": true,
"requires": {
@@ -4439,9 +4453,9 @@
}
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -5096,9 +5110,9 @@
}
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -6392,8 +6406,7 @@
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"chalk": {
"version": "4.1.0",
@@ -6512,6 +6525,15 @@
}
}
}
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
@@ -6719,9 +6741,9 @@
"dev": true
},
"color-string": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
- "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
+ "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
"dev": true,
"requires": {
"color-name": "^1.0.0",
@@ -7027,12 +7049,12 @@
},
"dependencies": {
"is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.0"
+ "is-extglob": "^2.1.1"
}
}
}
@@ -7329,9 +7351,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -7378,9 +7400,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -7460,9 +7482,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -7520,9 +7542,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -7563,9 +7585,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -8400,8 +8422,7 @@
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"decamelize-keys": {
"version": "1.1.0",
@@ -9900,17 +9921,6 @@
"dev": true,
"requires": {
"is-glob": "^4.0.1"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
}
}
}
@@ -9927,12 +9937,6 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
- "fast-xml-parser": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz",
- "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==",
- "dev": true
- },
"fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
@@ -11107,9 +11111,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -12231,9 +12235,9 @@
},
"dependencies": {
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
+ "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
"dev": true
}
}
@@ -12267,9 +12271,9 @@
}
},
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
+ "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg=="
}
}
},
@@ -12818,9 +12822,9 @@
"dev": true
},
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
+ "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
"dev": true
}
}
@@ -14112,12 +14116,12 @@
},
"dependencies": {
"dns-packet": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.2.4.tgz",
- "integrity": "sha512-vgu5Bx5IV8mXmh/9cn1lzn+J7okFlXe1vBRp+kCBJXg1nBED6Z/Q4e+QaDxQRSozMr14p/VQmdXwsf/I2wGjUA==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.0.tgz",
+ "integrity": "sha512-Nce7YLu6YCgWRvOmDBsJMo9M5/jV3lEZ5vUWnWXYmwURvPylHvq7nkDWhNmk1ZQoZZOP7oQh/S0lSxbisKOfHg==",
"dev": true,
"requires": {
- "ip": "^1.1.5"
+ "@leichtgewicht/ip-codec": "^2.0.1"
}
}
}
@@ -15184,9 +15188,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15232,15 +15236,15 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001223",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001223.tgz",
- "integrity": "sha512-k/RYs6zc/fjbxTjaWZemeSmOjO0JJV+KguOBA3NwPup8uzxM1cMhR2BD9XmO86GuqaqTCO8CgkgH9Rz//vdDiA==",
+ "version": "1.0.30001244",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz",
+ "integrity": "sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q==",
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15276,9 +15280,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15313,9 +15317,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15344,9 +15348,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15375,9 +15379,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15406,9 +15410,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15446,9 +15450,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15490,9 +15494,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15555,9 +15559,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15616,9 +15620,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15659,9 +15663,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15699,9 +15703,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15760,9 +15764,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15800,9 +15804,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15842,9 +15846,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15876,9 +15880,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15908,9 +15912,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15940,9 +15944,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -15971,9 +15975,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16004,9 +16008,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16044,9 +16048,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16084,9 +16088,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16123,9 +16127,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16162,9 +16166,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16220,9 +16224,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16266,9 +16270,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16304,9 +16308,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16343,9 +16347,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16402,9 +16406,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16436,9 +16440,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16479,9 +16483,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16511,9 +16515,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16542,9 +16546,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16576,30 +16580,20 @@
}
},
"postcss-svgo": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
- "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
+ "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
"dev": true,
"requires": {
- "is-svg": "^3.0.0",
"postcss": "^7.0.0",
"postcss-value-parser": "^3.0.0",
"svgo": "^1.0.0"
},
"dependencies": {
- "is-svg": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.3.1.tgz",
- "integrity": "sha512-h2CGs+yPUyvkgTJQS9cJzo9lYK06WgRiXUqBBHtglSzVKAuH4/oWsqk7LGfbSa1hGk9QcZ0SyQtVggvBA8LZXA==",
- "dev": true,
- "requires": {
- "fast-xml-parser": "^3.19.0"
- }
- },
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -16642,9 +16636,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -17146,7 +17140,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
"requires": {
"safe-buffer": "^5.1.0"
}
@@ -17481,16 +17474,16 @@
"dev": true
},
"renderkid": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz",
- "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
+ "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
"dev": true,
"requires": {
- "css-select": "^2.0.2",
- "dom-converter": "^0.2",
- "htmlparser2": "^3.10.1",
- "lodash": "^4.17.20",
- "strip-ansi": "^3.0.0"
+ "css-select": "^4.1.3",
+ "dom-converter": "^0.2.0",
+ "htmlparser2": "^6.1.0",
+ "lodash": "^4.17.21",
+ "strip-ansi": "^3.0.1"
},
"dependencies": {
"ansi-regex": {
@@ -17499,12 +17492,96 @@
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"dev": true
},
+ "css-select": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
+ "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.0.0",
+ "domhandler": "^4.2.0",
+ "domutils": "^2.6.0",
+ "nth-check": "^2.0.0"
+ },
+ "dependencies": {
+ "css-what": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
+ "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==",
+ "dev": true
+ }
+ }
+ },
+ "css-what": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
+ "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg=="
+ },
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
+ "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz",
+ "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
+ "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.5.2",
+ "entities": "^2.0.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
+ "nth-check": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+ "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -17760,8 +17837,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"safe-regex": {
"version": "1.1.0",
@@ -18837,9 +18913,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -19161,9 +19237,9 @@
"dev": true
},
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -19310,12 +19386,6 @@
"uri-js": "^4.2.2"
}
},
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -19444,9 +19514,9 @@
},
"dependencies": {
"postcss": {
- "version": "7.0.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
- "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "version": "7.0.36",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz",
+ "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -20022,10 +20092,9 @@
},
"dependencies": {
"camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
},
"yargs-parser": {
"version": "18.1.3",
@@ -20035,6 +20104,14 @@
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
}
}
}
@@ -20965,6 +21042,18 @@
"optional": true,
"requires": {
"is-glob": "^4.0.1"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ }
}
}
}
@@ -20984,9 +21073,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- },
"dependencies": {
"is-glob": {
"version": "3.1.0",
@@ -21156,9 +21242,9 @@
"dev": true
},
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
+ "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
"dev": true
}
}
@@ -21295,6 +21381,17 @@
"dev": true,
"requires": {
"is-glob": "^4.0.1"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ }
}
}
}
@@ -21314,9 +21411,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- },
"dependencies": {
"is-glob": {
"version": "3.1.0",
@@ -21426,9 +21520,9 @@
}
},
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
+ "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
"dev": true
}
}
diff --git a/package.json b/package.json
index 579149937588d47ab901f2119e09b48d0f1aa0ee..cfd0ac9396b4d0493352247d8f33de902a164d92 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
"axios": "^0.21.1",
"core-js": "^3.6.4",
"downloadjs": "^1.4.7",
- "lodash": "^4.17.20",
+ "lodash": "4.17.21",
"moment": "^2.29.1",
"vue": "^2.6.11",
"vue-apexcharts": "^1.6.0",
@@ -157,11 +157,11 @@
"http-proxy": "^1.18.1",
"hosted-git-info": "^3.0.8",
"ini": "^1.3.6",
- "is-svg": "^4.3.1",
- "lodash": "^4.17.20",
+ "lodash": "4.17.21",
"minimist": "^1.2.5",
"node-notifier": "^9.0.0",
"normalize-url": "^4.5.1",
+ "postcss": "^7.0.36",
"serialize-javascript": "^3.1.0",
"sockjs": "^0.3.21",
"ssri": "^8.0.1",
diff --git a/path-to-ctf/LB-FE-system-security-plan.yml b/path-to-ctf/LB-FE-system-security-plan.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bbce24b652a60627c7c98d7ad0713d2d13abd7a5
--- /dev/null
+++ b/path-to-ctf/LB-FE-system-security-plan.yml
@@ -0,0 +1,82 @@
+# Full name of the system.
+system-name: Launchboard Front End
+
+# Shortname or abbreviation.
+short-name: Launchboard FE
+
+# System version or release number.
+version: 1.0
+
+# Operational Environments: production, test, research and development, tactical, deployed, or other.
+environment: production
+
+# Authorization Status: CtF
+Status: Active
+
+# Assessment Date. Identify the date of last assessment per Continuous ATO (cATO).
+Review-date: TBD
+
+# Security Re-Assess Interval. Period for re-assessment after updates
+Assess-interval: As needed.
+
+# Authorization boundary diagram. Include URL.
+System-architecture: https://confluence.il2.dso.mil/display/P1/Launchboard
+
+# Confidentiality, Integrity, Availability M,M,M
+# Classification: ie. UNCLASSIFIED, SECRET//NOFORN, TS/SCI
+# Personally Identifiable Information: Y/N. Assessment team can help data types
+Categorization:
+ Confidentiality: M
+
+ Integrity: M
+
+ Availability: M
+
+ Classification-Level: UNCLASSIFIED
+
+ PII: None
+
+Data-types:
+ -
+
+Deployment-sites:
+ - https://launchboard.apps.dso.mil
+
+Programming-Languages:
+ - JavaScript
+
+Dependencies:
+ - AWS, IL2 partybus staging, and mission application production cluster. For rendering of status, all apis for systems in P1/
+ - see ../package.json for specific Launchboard FE dependencies
+
+Databases:
+ - mysql
+
+External-Systems:
+ - GitLab (code.il2.dso.mil)
+
+Role-Identification:
+ Authorizing-Official:
+ name: Daniel Holtzman
+ title: Authorizing Official
+ org: Air Force Command & Control
+ email: daniel.holtzman.1@us.af.mil
+ phone: 781-225-1118
+ System-Owner:
+ name: Nic Chaillan
+ title: Air Force Chief Software Officer
+ org: U.S. Air Force
+ email: nicolas.m.chaillan.civ@mail.mil
+ phone: 703-693-4740
+ Chief-Information-Security-Officer:
+ name: Matt Huston
+ title: CISO
+ org: AFLCMC/HNCP
+ email: matthew.huston@afwerx.af.mil
+ phone: 650-933-4121
+ Product-Manager:
+ name: Erica Westendorf
+ title: Project Manager
+ org: Platform1
+ email: westendorf_erica@bah.com
+ phone: 571-405-8544
diff --git a/path-to-ctf/LB_FE_plan_of_action.md b/path-to-ctf/LB_FE_plan_of_action.md
new file mode 100644
index 0000000000000000000000000000000000000000..8d3c845b7bf06e3e047913a3b18c103a335ea6ea
--- /dev/null
+++ b/path-to-ctf/LB_FE_plan_of_action.md
@@ -0,0 +1,32 @@
+- **Kick-off Date:** 0XNOV2020
+- **Inception Date:** JUL2020
+- **MVP Date:** estimated 1/16/2020
+
+#### Vision
+
+A secure and fully owned SRE tool for Platform One developers and development teams
+
+#### Strategy
+
+Launchboard is a dashboard serving as a collective-resource where users can access relevant information pertaining to their projects and role. This allows for multiple agencies involved to go off of one centralized database rather than information living in unsecured documents across multiple locations. The FE ties into APIs for the various hardened tools Platform One uses.
+
+#### Summary
+
+SRE tool
+
+### Goals and Metrics
+
+Daily users, bounce rate, system uptime, contact from users/contact form usage, logs, logged in users
+
+**Release Focus**
+
+- MVP focus is on a one stop shop for users to see status of projects, onboarding, workshops, and teams.
+
+**Release Functionality**
+
+- Daily release of updates to content to IL2 only for now
+
+**System Integration Considerations**
+
+- Our releases will not affect any other system at P1.
+- Integration with P1 SSO
diff --git a/path-to-ctf/LB_arch.png b/path-to-ctf/LB_arch.png
new file mode 100644
index 0000000000000000000000000000000000000000..0684d0d9585e9e838e8d537ee1dcfa11f596afc6
Binary files /dev/null and b/path-to-ctf/LB_arch.png differ
diff --git a/public/index.html b/public/index.html
index 85210f1f3d0409b981509016ceee79487b0aebda..c24e95d4f5a17797240e9b9c3864f2fc1d585a93 100644
--- a/public/index.html
+++ b/public/index.html
@@ -18,7 +18,7 @@
-
+
-
+
@@ -63,7 +60,11 @@
sizes="16x16"
href="./favicon/favicon-16x16.png"
/>
-
+
diff --git a/src/App.vue b/src/App.vue
index 930e7397522df5b2488ff33c2bee0f2f52e9f0ed..4ad441b11d22e259eabcb2cb50c8cf85d778f17c 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,7 +3,7 @@
-
+
@@ -26,7 +26,8 @@ export default {
syncDarkMode() {
// make sure vuetify matches the current preference
if (this.$store && this.$store.state.userPreferences.userPreference) {
- this.$vuetify.theme.dark = this.$store.state.userPreferences.userPreference.darkMode;
+ this.$vuetify.theme.dark =
+ this.$store.state.userPreferences.userPreference.darkMode;
}
},
},
@@ -40,14 +41,12 @@ export default {
diff --git a/src/components/Burger.vue b/src/components/Burger.vue
index b9a260372fe1302b65b61c0b9f5e58e5fa202ae9..5aaae569397c5a5a774df700deeca577ec0b85a5 100644
--- a/src/components/Burger.vue
+++ b/src/components/Burger.vue
@@ -50,7 +50,6 @@ export default {
}
}
}
-
.burger .burger-lines,
.burger .burger-lines:after,
.burger .burger-lines:before {
@@ -59,13 +58,29 @@ export default {
content: "";
width: 100%;
border-radius: 0.25em;
- background-color: white;
height: 0.25em;
position: absolute;
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
transform: rotate(0);
}
+.theme--dark {
+ .v-btn,
+ .burger .burger-lines,
+ .burger .burger-lines:after,
+ .burger .burger-lines:before {
+ background-color: white;
+ }
+}
+
+.theme--light {
+ .v-btn,
+ .burger .burger-lines,
+ .burger .burger-lines:after,
+ .burger .burger-lines:before {
+ background-color: #031322;
+ }
+}
.burger.burger-squeeze .burger-lines,
.burger.burger-squeeze .burger-lines:after,
diff --git a/src/components/CurriculumSchedule.vue b/src/components/CurriculumSchedule.vue
index 16cc5e30db9cea5d193954a2090def6c52e1e2cf..22a89262d6b45c6e355c2ed2a83cc35b9c1a60c4 100644
--- a/src/components/CurriculumSchedule.vue
+++ b/src/components/CurriculumSchedule.vue
@@ -1,7 +1,7 @@
-
+
You currently don't have any courses!
Your scheduled courses will appear here.
@@ -72,6 +72,11 @@ export default {
components: {
ErrorCard,
},
+ props: {
+ setCurriculumSchedule: {
+ type: Function,
+ },
+ },
data: () => ({
loading: false,
registrations: [],
@@ -81,8 +86,7 @@ export default {
async mounted() {
try {
this.loading = true;
- const response = await ScheduleService.getScheduleForUser();
- this.registrations = response.registrations;
+ await this.refreshCurriculumSchedule();
} catch (error) {
this.error = true;
this.$store.commit(SET_ERROR_MESSAGE, error);
@@ -105,6 +109,28 @@ export default {
console.error(error);
}
},
+ async refreshCurriculumSchedule() {
+ if (this.setCurriculumSchedule) {
+ this.setCurriculumSchedule(true);
+ }
+ this.error = false;
+ this.emptyString = false;
+ try {
+ const response = await ScheduleService.getScheduleForUser();
+ if (response && response.registrations.length > 0) {
+ this.registrations = response.registrations;
+ } else {
+ this.emptyString = true;
+ }
+ } catch (e) {
+ this.error = true;
+ this.$store.commit(SET_ERROR_MESSAGE, e);
+ this.errorMessage = e;
+ }
+ if (this.setCurriculumSchedule) {
+ this.setCurriculumSchedule(false);
+ }
+ },
},
};
diff --git a/src/components/Dialogs/DialogComponents/UserSelectForCourse.vue b/src/components/Dialogs/DialogComponents/UserSelectForCourse.vue
index 5c0fe15542a3deb72afea405775a9b08b5c3f671..1901aeda8f2eba32a6f91a17ea300f9ca761e3ae 100644
--- a/src/components/Dialogs/DialogComponents/UserSelectForCourse.vue
+++ b/src/components/Dialogs/DialogComponents/UserSelectForCourse.vue
@@ -39,7 +39,10 @@ export default {
},
updateCourseMembers: {
type: Function,
- default: () => {},
+ default: () => {
+ // TODO: confirm this is even being triggered; looks like it's being passed as prop 'update-course-members'
+ return;
+ },
},
isCourseSelected: {
type: Boolean,
diff --git a/src/components/EditableInput.vue b/src/components/EditableInput.vue
index 8ae544f10a29a92e372b67321b42d5ae035f01fd..8332934c44fe0127138047967513807a8c6e9be9 100644
--- a/src/components/EditableInput.vue
+++ b/src/components/EditableInput.vue
@@ -95,9 +95,8 @@ export default {
if (!this.$refs.editingElementWrapper) {
return null;
}
- const editInputs = this.$refs.editingElementWrapper.getElementsByTagName(
- "input"
- );
+ const editInputs =
+ this.$refs.editingElementWrapper.getElementsByTagName("input");
if (!editInputs || editInputs.length === 0) {
return null;
}
@@ -133,7 +132,6 @@ export default {
this.$emit("change", this.model);
},
reset() {
- // this.updateStyle();
this.hover = false;
this.isEditing = false;
},
diff --git a/src/components/MonthlySeatMetric.vue b/src/components/MonthlySeatMetric.vue
index 06e003c8b98788415ad386f13bad2422ee219ae4..fa2107eb592b25c409086aae029ce7f9ec8b1c95 100644
--- a/src/components/MonthlySeatMetric.vue
+++ b/src/components/MonthlySeatMetric.vue
@@ -1,6 +1,6 @@
-
+
Seat Metrics
Seat metrics will appear here.
@@ -12,6 +12,7 @@
type="donut"
:options="chartOptions"
:series="series"
+ height="300"
>
@@ -26,18 +27,22 @@ import { SET_ERROR_MESSAGE } from "@/store/mutation-types";
import moment from "moment";
import ErrorMessage from "@/components/APIErrorCard";
export default {
- props: ["incomingMonth", "incomingYear", "monthMetric"],
components: {
apexchart,
ErrorMessage,
},
+ props: {
+ incomingYear: Number,
+ incomingMonth: Number,
+ loadingMetric: String,
+ setMetric: String,
+ },
data: () => ({
errorMessage: null,
error: false,
month: null,
year: null,
date: null,
- loading: false,
meta: [],
emptyString: false,
series: [],
@@ -51,7 +56,7 @@ export default {
pie: {
customScale: 0.7,
donut: {
- size: "83%",
+ size: "85%",
width: 40,
},
},
@@ -65,12 +70,14 @@ export default {
},
legend: {
position: "right",
- fontSize: "14px",
+ fontSize: "18px",
width: 250,
- offsetY: 80,
- offsetX: -80,
+ offsetY: 30,
+ offsetX: 60,
markers: {
shape: "square",
+ radius: 0,
+ offsetY: 35,
},
labels: {
colors: null,
@@ -81,105 +88,128 @@ export default {
},
}),
async beforeMount() {
- try {
- if (this.$props.incomingMonth === -1) {
- // current month is january, need december of last year
- this.date = moment("01", "MM").subtract(1, "month").format("YYYY-MM");
- this.month = moment("01", "MM").subtract(1, "month").format("MM");
- this.year = moment("01-" + "YYYY", "MM-YYYY")
- .subtract(1, "month")
- .format("YYYY");
- } else {
- // current month is december, need january of next year
- this.date = moment(this.$props.incomingMonth, "M")
- .add(1, "month")
- .format("YYYY-MM");
- this.month = moment(this.$props.incomingMonth, "M")
- .add(1, "month")
- .format("MM");
- this.year = moment(this.$props.incomingMonth, "M")
- .add(1, "month")
- .format("YYYY");
- }
- this.loading = true;
- this.params = {
- registeredCount: true,
- dateFrom: this.year + "-" + this.month + "-01",
- dateTo:
- this.year +
- "-" +
- this.month +
- "-" +
- moment(this.year + "-" + this.month + "-", "YYYY-MM-").daysInMonth(),
- };
+ if (this.$props.incomingMonth === -1) {
+ // current month is january, need december of last year
+ this.date = moment("01", "MM").subtract(1, "month").format("YYYY-MM");
+ this.month = moment("01", "MM").subtract(1, "month").format("MM");
+ this.year = moment("01-" + "YYYY", "MM-YYYY")
+ .subtract(1, "month")
+ .format("YYYY");
+ } else {
+ // current month is december, need january of next year
+ this.date = moment(this.$props.incomingMonth, "M")
+ .add(1, "month")
+ .format("YYYY-MM");
+ this.month = moment(this.$props.incomingMonth, "M")
+ .add(1, "month")
+ .format("MM");
+ this.year = moment(this.$props.incomingMonth, "M")
+ .add(1, "month")
+ .format("YYYY");
+ }
- const response = await MetricsService.capacityMetrics(this.params);
+ this.params = {
+ registeredCount: true,
+ dateFrom: this.year + "-" + this.month + "-01",
+ dateTo:
+ this.year +
+ "-" +
+ this.month +
+ "-" +
+ moment(this.year + "-" + this.month + "-", "YYYY-MM-").daysInMonth(),
+ };
- if (response.metrics.totalCourses === 0) {
- this.emptyClass = true;
- }
- if (
- this.$props.monthMetric === "present" ||
- this.$props.monthMetric === "past"
- ) {
- this.series.push(
- (response.metrics.totalCompleted / response.metrics.totalCapacity) *
- 100
- );
- this.series.push(
- (response.metrics.totalRegistrations /
- response.metrics.totalCapacity) *
- 100
- );
- this.series.push(
- ((response.metrics.totalCapacity -
- response.metrics.totalRegistrations) /
- response.metrics.totalCapacity) *
- 100
- );
- this.series = this.series.map((x) => Math.round(x));
- } else {
- this.series.push(
- (response.metrics.totalRegistrations /
- response.metrics.totalCapacity) *
- 100
- );
- this.series.push(
- ((response.metrics.totalCapacity -
- response.metrics.totalRegistrations) /
- response.metrics.totalCapacity) *
- 100
- );
- this.series = this.series.map((x) => Math.round(x));
- this.chartOptions.labels.push(" " + this.series[0] + "%-Reserved");
- this.chartOptions.labels.push(" " + this.series[1] + "%-Open");
- }
- if (this.$props.monthMetric === "past") {
- this.chartOptions.labels.push(" " + this.series[0] + "%-Completed");
- this.chartOptions.labels.push(" " + this.series[1] + "%-Incomplete");
- this.chartOptions.labels.push(" " + this.series[2] + "%-Open");
- } else if (this.$props.monthMetric === "present") {
- this.chartOptions.labels.push(
- " " + this.series[0] + "%-Reserved (present)"
- );
- this.chartOptions.labels.push(
- " " + this.series[1] + "%-Incomplete (absent)"
- );
- this.chartOptions.labels.push(" " + this.series[2] + "%-Open");
- }
- if (this.$vuetify.theme.dark) {
- this.chartOptions.legend.labels.colors = "white";
- } else {
- this.chartOptions.legend.labels.colors = "black";
+ await this.refreshSeatMetrics();
+ },
+ methods: {
+ setSeatMetricsLoading(state) {
+ this.$store.commit(this.$props.setMetric, state);
+ },
+ async refreshSeatMetrics() {
+ this.setSeatMetricsLoading(true);
+ this.error = false;
+ this.emptyString = false;
+
+ // Workaround for apexchart not refreshing labels
+ const chartOptions = { ...this.chartOptions };
+ this.chartOptions = {};
+ try {
+ this.series = [];
+ const response = await MetricsService.capacityMetrics(this.params);
+ if (response.metrics.totalCourses === 0) {
+ this.emptyClass = true;
+ }
+ if (
+ this.$props.monthMetric === "present" ||
+ this.$props.monthMetric === "past"
+ ) {
+ this.series.push(
+ (response.metrics.totalCompleted / response.metrics.totalCapacity) *
+ 100
+ );
+ this.series.push(
+ (response.metrics.totalRegistrations /
+ response.metrics.totalCapacity) *
+ 100
+ );
+ this.series.push(
+ ((response.metrics.totalCapacity -
+ response.metrics.totalRegistrations) /
+ response.metrics.totalCapacity) *
+ 100
+ );
+ this.series = this.series.map((x) => Math.round(x));
+ } else {
+ this.series.push(
+ (response.metrics.totalRegistrations /
+ response.metrics.totalCapacity) *
+ 100
+ );
+ this.series.push(
+ ((response.metrics.totalCapacity -
+ response.metrics.totalRegistrations) /
+ response.metrics.totalCapacity) *
+ 100
+ );
+
+ // Workaround for apexchart not refreshing labels
+ const labels = [];
+ this.series = this.series.map((x) => Math.round(x));
+ labels.push(" " + this.series[0] + "%-Reserved");
+ labels.push(" " + this.series[1] + "%-Open");
+ chartOptions.labels = labels;
+ }
+ if (this.$props.monthMetric === "past") {
+ chartOptions.labels.push(" " + this.series[0] + "%-Completed");
+ chartOptions.labels.push(" " + this.series[1] + "%-Incomplete");
+ chartOptions.labels.push(" " + this.series[2] + "%-Open");
+ } else if (this.$props.monthMetric === "present") {
+ chartOptions.labels.push(
+ " " + this.series[0] + "%-Reserved (present)"
+ );
+ chartOptions.labels.push(
+ " " + this.series[1] + "%-Incomplete (absent)"
+ );
+ chartOptions.labels.push(" " + this.series[2] + "%-Open");
+ }
+ if (this.$vuetify.theme.dark) {
+ chartOptions.legend.labels.colors = "white";
+ } else {
+ chartOptions.legend.labels.colors = "black";
+ }
+ } catch (e) {
+ this.error = true;
+ this.$store.commit(SET_ERROR_MESSAGE, e);
+ this.errorMessage = e;
}
- } catch (error) {
- this.error = true;
- this.$store.commit(SET_ERROR_MESSAGE, error);
- this.errorMessage = error;
- console.error(error);
- } finally {
- this.loading = false;
- }
+ this.chartOptions = chartOptions;
+ this.setSeatMetricsLoading(false);
+ },
+ },
+ computed: {
+ getLoadingStatus() {
+ return this.$store.state.loading[this.$props.loadingMetric];
+ },
},
};
@@ -188,10 +218,14 @@ export default {
.curriculum-schedule {
position: relative;
}
+
+.apexcharts-legend {
+ right: 50px !important;
+}
+
#chart {
- margin-left: 130px;
- align-items: center;
- justify-items: center;
+ align-items: left;
+ justify-items: left;
background-color: transparent;
}
diff --git a/src/components/NavBar.vue b/src/components/NavBar.vue
index ade1a8600d4ed3f5e24f133956a00256c33a2a1c..549b11841b6826c1963336e02734e54fd68e2aef 100644
--- a/src/components/NavBar.vue
+++ b/src/components/NavBar.vue
@@ -1,8 +1,9 @@
-
+
-
+
mdi-cog
{{ navItem.name }}
+
+
+ mdi-cog
+
+
+
+
+ The Launchboard Team Management feature will be replaced by Keycloak
+ groups in the near future. At that time, membership will no longer be set
+ inside Launchboard. You may continue to use the Launchboard Team
+ Management feature for now and consider it a beta feature, but those
+ settings will be overridden by Keycloak once it is used as the source of
+ truth for Teams in Launchboard
+
diff --git a/src/components/Section.vue b/src/components/Section.vue
index 414a62bf8e39dabf77a86027eefaeb547e37fa31..6ded8f42cf510c3b421953686139d96ac764bc5b 100644
--- a/src/components/Section.vue
+++ b/src/components/Section.vue
@@ -1,9 +1,25 @@