diff --git a/backend/lambda-functions/CreateAuth/CreateAuthChallengeFIDO2.js b/backend/lambda-functions/CreateAuth/CreateAuthChallengeFIDO2.js index 26fddc7..59adc34 100644 --- a/backend/lambda-functions/CreateAuth/CreateAuthChallengeFIDO2.js +++ b/backend/lambda-functions/CreateAuth/CreateAuthChallengeFIDO2.js @@ -129,7 +129,7 @@ async function getCreateCredentialsOptions(event, creds) { let startRegisterPayload = JSON.parse(JSON.parse(response.Payload)); console.log("response payload jsonparse2: "+startRegisterPayload); - const coseLookup = {"ES256": -7, "EdDSA": -8, "RS256": -257}; + const coseLookup = {"ES256": -7, "EdDSA": -8, "ES384": -35, "ES512": -36, "RS256": -257}; startRegisterPayload.requestId = startRegisterPayload.requestId.base64url; startRegisterPayload.publicKeyCredentialCreationOptions.user.id = startRegisterPayload.publicKeyCredentialCreationOptions.user.id.base64url; diff --git a/backend/lambda-functions/FIDO2KitAPI/FIDO2KitAPI.js b/backend/lambda-functions/FIDO2KitAPI/FIDO2KitAPI.js index 2cb87eb..8e5a0c9 100644 --- a/backend/lambda-functions/FIDO2KitAPI/FIDO2KitAPI.js +++ b/backend/lambda-functions/FIDO2KitAPI/FIDO2KitAPI.js @@ -313,7 +313,7 @@ async function startRegisterFIDO2Credential(profile, body, uid) { let startRegisterPayload = JSON.parse(JSON.parse(response.Payload)); - const coseLookup = {"ES256": -7, "EdDSA": -8, "RS256": -257}; + const coseLookup = {"ES256": -7, "EdDSA": -8, "ES384": -35, "ES512": -36, "RS256": -257}; startRegisterPayload.requestId = startRegisterPayload.requestId.base64url; startRegisterPayload.publicKeyCredentialCreationOptions.user.id = startRegisterPayload.publicKeyCredentialCreationOptions.user.id.base64url; diff --git a/backend/lambda-functions/JavaWebAuthnLib/pom.xml b/backend/lambda-functions/JavaWebAuthnLib/pom.xml index b348cbf..b0136db 100644 --- a/backend/lambda-functions/JavaWebAuthnLib/pom.xml +++ b/backend/lambda-functions/JavaWebAuthnLib/pom.xml @@ -61,7 +61,7 @@ com.fasterxml.jackson.core jackson-databind - 2.13.1 + 2.13.2.2 @@ -88,6 +88,12 @@ 2.13.2 + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + 2.13.2 + + software.amazon.awssdk url-connection-client @@ -148,19 +154,19 @@ com.yubico webauthn-server-core - 2.0.0 + 2.1.0 com.yubico webauthn-server-attestation - 2.0.0 + 2.1.0 com.yubico yubico-util - 2.0.0 + 2.1.0 diff --git a/backend/lambda-functions/JavaWebAuthnLib/src/main/java/com/yubicolabs/App.java b/backend/lambda-functions/JavaWebAuthnLib/src/main/java/com/yubicolabs/App.java index 985e267..f67496d 100644 --- a/backend/lambda-functions/JavaWebAuthnLib/src/main/java/com/yubicolabs/App.java +++ b/backend/lambda-functions/JavaWebAuthnLib/src/main/java/com/yubicolabs/App.java @@ -542,15 +542,6 @@ private Optional buildAttestationResult(RegistrationRes log.debug("buildAttestationResult() number of entries found in entries: {}", entries.size()); log.debug("buildAttestationResult() entries found in entries: {}", gson.toJson(entries)); - // If entries is empty, try through only the AAGUID, this allows Windows Hello - // to work - if (entries.size() == 0) { - log.debug("buildAttestationResult() No entries found, attempting by AAGUID only"); - entries = mds.findEntries(new AAGUID(result.getAaguid())); - log.debug("buildAttestationResult() number of entries found in entries AAGUID: {}", entries.size()); - log.debug("buildAttestationResult() entries found in entries AAGUID: {}", gson.toJson(entries)); - } - List entriesAaguid = entries.stream() .filter(ent -> ent.getAaguid().isPresent() && ent.getAaguid().get().asHexString().equals(result.getAaguid().getHex())) diff --git a/backend/template.yaml b/backend/template.yaml index a4e8ed5..fb8335d 100644 --- a/backend/template.yaml +++ b/backend/template.yaml @@ -389,7 +389,7 @@ Resources: Ref: DefineAuthChallengeFuncName CodeUri: lambda-functions/DefineAuth/ Handler: DefineAuthChallengeFIDO2.handler - Runtime: nodejs12.x + Runtime: nodejs16.x # Create Auth Challenge CreateAuthChallenge: Type: AWS::Serverless::Function @@ -398,7 +398,7 @@ Resources: Ref: CreateAuthChallengeFuncName CodeUri: lambda-functions/CreateAuth/ Handler: CreateAuthChallengeFIDO2.handler - Runtime: nodejs12.x + Runtime: nodejs16.x # Environment variables for connecting to RDS Environment: Variables: @@ -421,7 +421,7 @@ Resources: Ref: VerifyAuthChallengeFuncName CodeUri: lambda-functions/VerifyAuth/ Handler: VerifyAuthChallengeFIDO2.handler - Runtime: nodejs12.x + Runtime: nodejs16.x # Environment variables for connecting to RDS Environment: Variables: @@ -445,7 +445,7 @@ Resources: Ref: PreSignUpFuncName CodeUri: lambda-functions/PreSignUp/ Handler: PreSignUpFIDO2.handler - Runtime: nodejs12.x + Runtime: nodejs16.x # WebAuthn Starter Kit - API Lambda Function WebAuthnKitAPIFunction: @@ -455,7 +455,7 @@ Resources: Ref: WebAuthnKitAPIFuncName CodeUri: lambda-functions/FIDO2KitAPI/ Handler: FIDO2KitAPI.handler - Runtime: nodejs12.x + Runtime: nodejs16.x # Environment variables for connecting to RDS Environment: Variables: @@ -479,7 +479,7 @@ Resources: Ref: CreateDBSchemaFuncName CodeUri: lambda-functions/CreateDBSchema/ Handler: CreateDBSchema.handler - Runtime: nodejs12.x + Runtime: nodejs16.x # Environment variables for connecting to RDS Environment: Variables: @@ -593,7 +593,7 @@ Resources: FunctionName: Ref: JavaWebAuthnFuncName CodeUri: lambda-functions/JavaWebAuthnLib/ - Runtime: java8.al2 + Runtime: java11 Handler: com.yubicolabs.App::handleRequest Timeout: 30 MemorySize: 1408 @@ -657,7 +657,7 @@ Resources: }); }; Handler: index.handler - Runtime: nodejs12.x + Runtime: nodejs16.x Description: Invokes the database schema creation function. MemorySize: 128 Timeout: 20 diff --git a/clients/web/react/package-lock.json b/clients/web/react/package-lock.json index a640f74..c787449 100644 --- a/clients/web/react/package-lock.json +++ b/clients/web/react/package-lock.json @@ -1519,7 +1519,7 @@ "joi": "^17.2.1", "leven": "^3.1.0", "lodash": "^4.17.15", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "node-stream-zip": "^1.9.1", "ora": "^3.4.0", "pretty-format": "^26.6.2", @@ -1540,15 +1540,6 @@ "react-native": "*" } }, - "node_modules/@aws-sdk/middleware-retry/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@aws-sdk/middleware-retry/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1643,7 +1634,7 @@ "anser": "^1.4.9", "base64-js": "^1.1.2", "event-target-shim": "^5.0.1", - "hermes-engine": "~0.9.0", + "hermes-engine": "~0.10.0", "invariant": "^2.2.4", "jsc-android": "^250230.2.1", "metro-babel-register": "0.66.2", @@ -4041,7 +4032,7 @@ "peer": true, "dependencies": { "exec-sh": "^0.3.2", - "minimist": "^1.2.0" + "minimist": "^1.2.6" }, "bin": { "watch": "cli.js" @@ -4526,7 +4517,7 @@ "js-yaml": "^3.13.1", "lodash": "^4.17.15", "ora": "^3.4.0", - "plist": "^3.0.2", + "plist": "^3.0.5", "xcode": "^2.0.0" } }, @@ -4728,7 +4719,7 @@ "node-fetch": "^2.6.7", "open": "^6.2.0", "semver": "^6.3.0", - "shell-quote": "1.6.1" + "shell-quote": "1.7.3" } }, "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { @@ -5704,15 +5695,6 @@ "strip-ansi": "^5.0.0" } }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-fragments/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -6028,9 +6010,9 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dependencies": { "lodash": "^4.17.14" } @@ -7086,15 +7068,6 @@ "wrap-ansi": "^5.1.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/cliui/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -7403,7 +7376,7 @@ "dependencies": { "cacache": "^12.0.3", "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", + "glob-parent": "^5.1.2", "globby": "^7.1.1", "is-glob": "^4.0.1", "loader-utils": "^1.2.3", @@ -7463,28 +7436,6 @@ "node": ">=6" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -9359,8 +9310,8 @@ } }, "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.1.tgz", "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, "dependencies": { @@ -10481,8 +10432,8 @@ } }, "node_modules/hermes-engine": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.9.0.tgz", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.10.0.tgz", "integrity": "sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw==", "peer": true }, @@ -12279,7 +12230,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "json5": "lib/cli.js" @@ -12422,7 +12373,7 @@ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "minimist": "^1.2.6" }, "bin": { "json5": "lib/cli.js" @@ -12487,15 +12438,6 @@ "logkitty": "bin/logkitty.js" } }, - "node_modules/logkitty/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/logkitty/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12792,7 +12734,7 @@ "@babel/types": "^7.0.0", "absolute-path": "^0.0.0", "accepts": "^1.3.7", - "async": "^2.4.0", + "async": "^2.6.4", "chalk": "^4.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", @@ -12931,15 +12873,6 @@ "metro-inspector-proxy": "src/cli.js" } }, - "node_modules/metro-inspector-proxy/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/metro-inspector-proxy/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -13262,15 +13195,6 @@ "nullthrows": "^1.1.1" } }, - "node_modules/metro/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/metro/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -13627,8 +13551,8 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/mississippi": { @@ -13669,7 +13593,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -13839,12 +13763,12 @@ } }, "node_modules/node-forge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.0.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 6.13.0" } }, "node_modules/node-int64": { @@ -14316,15 +14240,6 @@ "node": ">=6" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ora/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -14343,7 +14258,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "dependencies": { - "url-parse": "^1.5.6" + "url-parse": "^1.5.9" } }, "node_modules/os-browserify": { @@ -14542,12 +14457,6 @@ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14688,13 +14597,13 @@ } }, "node_modules/plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "peer": true, "dependencies": { "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" + "xmlbuilder": "^15.1.1" }, "engines": { "node": ">=6" @@ -14717,7 +14626,7 @@ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "dependencies": { - "async": "^2.6.2", + "async": "^2.6.4", "debug": "^3.1.1", "mkdirp": "^0.5.5" }, @@ -14921,15 +14830,6 @@ "@types/yargs-parser": "*" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -15302,7 +15202,7 @@ "integrity": "sha512-pvpNDHE7p0FtcCmIWGazoY8LLVfBI9sw0Kf10kdHhPI9Tzt3OG/qEt16GrAbE0keuna5WzX3r1qPKVjqOqsuUg==", "peer": true, "dependencies": { - "shell-quote": "^1.6.1", + "shell-quote": "^1.7.3", "ws": "^7" } }, @@ -15992,7 +15892,7 @@ "execa": "^1.0.0", "fb-watchman": "^2.0.0", "micromatch": "^3.1.4", - "minimist": "^1.1.1", + "minimist": "^1.2.6", "walker": "~1.0.5" }, "bin": { @@ -16069,7 +15969,7 @@ "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "dependencies": { - "node-forge": "^1.0.0" + "node-forge": "^1.3.0" } }, "node_modules/semver": { @@ -16301,8 +16201,8 @@ } }, "node_modules/shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "peer": true, "dependencies": { @@ -16332,14 +16232,14 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", "peer": true, "dependencies": { "bplist-creator": "0.1.0", "bplist-parser": "0.3.0", - "plist": "^3.0.4" + "plist": "^3.0.5" } }, "node_modules/sinon": { @@ -16574,11 +16474,11 @@ "dev": true, "dependencies": { "debug": "^3.2.6", - "eventsource": "^1.0.7", + "eventsource": "^1.1.1", "faye-websocket": "^0.11.3", "inherits": "^2.0.4", "json3": "^3.3.3", - "url-parse": "^1.5.6" + "url-parse": "^1.5.9" } }, "node_modules/sockjs-client/node_modules/debug": { @@ -16937,15 +16837,6 @@ "node": ">=6" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/string-width/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -17163,9 +17054,9 @@ } }, "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -17191,7 +17082,7 @@ "schema-utils": "^1.0.0", "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", - "terser": "^4.1.2", + "terser": "^4.8.1", "webpack-sources": "^1.4.0", "worker-farm": "^1.7.0" }, @@ -17673,7 +17564,7 @@ "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, @@ -17683,7 +17574,7 @@ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "minimist": "^1.2.6" }, "bin": { "json5": "lib/cli.js" @@ -18073,9 +17964,9 @@ } }, "node_modules/url-parse": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { "querystringify": "^2.1.1", @@ -18316,30 +18207,6 @@ "node": ">= 4.0" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -18639,28 +18506,6 @@ "node": ">= 4.0" } }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack-dev-server/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -18861,15 +18706,6 @@ "node": ">=6" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -18912,7 +18748,7 @@ "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", "peer": true, "dependencies": { - "simple-plist": "^1.0.0", + "simple-plist": "^1.3.1", "uuid": "^3.3.2" }, "engines": { @@ -18920,12 +18756,12 @@ } }, "node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "peer": true, "engines": { - "node": ">=4.0" + "node": ">=8.0" } }, "node_modules/xmldoc": { @@ -20454,7 +20290,7 @@ "joi": "^17.2.1", "leven": "^3.1.0", "lodash": "^4.17.15", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "node-stream-zip": "^1.9.1", "ora": "^3.4.0", "pretty-format": "^26.6.2", @@ -20466,12 +20302,6 @@ "wcwidth": "^1.0.1" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "peer": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -20545,7 +20375,7 @@ "anser": "^1.4.9", "base64-js": "^1.1.2", "event-target-shim": "^5.0.1", - "hermes-engine": "~0.9.0", + "hermes-engine": "~0.10.0", "invariant": "^2.2.4", "jsc-android": "^250230.2.1", "metro-babel-register": "0.66.2", @@ -22219,7 +22049,7 @@ "peer": true, "requires": { "exec-sh": "^0.3.2", - "minimist": "^1.2.0" + "minimist": "^1.2.6" } }, "@eslint/eslintrc": { @@ -22588,7 +22418,7 @@ "js-yaml": "^3.13.1", "lodash": "^4.17.15", "ora": "^3.4.0", - "plist": "^3.0.2", + "plist": "^3.0.5", "xcode": "^2.0.0" }, "dependencies": { @@ -22754,7 +22584,7 @@ "node-fetch": "^2.6.7", "open": "^6.2.0", "semver": "^6.3.0", - "shell-quote": "1.6.1" + "shell-quote": "1.7.3" }, "dependencies": { "ansi-styles": { @@ -23555,12 +23385,6 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "peer": true - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -23818,9 +23642,9 @@ "peer": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } @@ -24684,12 +24508,6 @@ "wrap-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -24950,7 +24768,7 @@ "requires": { "cacache": "^12.0.3", "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", + "glob-parent": "^5.1.2", "globby": "^7.1.1", "is-glob": "^4.0.1", "loader-utils": "^1.2.3", @@ -24991,27 +24809,6 @@ "locate-path": "^3.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "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" - } - } - } - }, "globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", @@ -26461,8 +26258,8 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.1.tgz", "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, "requires": { @@ -27332,8 +27129,8 @@ "dev": true }, "hermes-engine": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.9.0.tgz", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.10.0.tgz", "integrity": "sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw==", "peer": true }, @@ -28692,7 +28489,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "jsonfile": { @@ -28805,7 +28602,7 @@ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.6" } } } @@ -28860,12 +28657,6 @@ "yargs": "^15.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29106,7 +28897,7 @@ "@babel/types": "^7.0.0", "absolute-path": "^0.0.0", "accepts": "^1.3.7", - "async": "^2.4.0", + "async": "^2.6.4", "chalk": "^4.0.0", "ci-info": "^2.0.0", "connect": "^3.6.5", @@ -29151,12 +28942,6 @@ "yargs": "^15.3.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29442,12 +29227,6 @@ "yargs": "^15.3.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -29825,8 +29604,8 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mississippi": { @@ -29861,7 +29640,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "move-concurrently": { @@ -30006,9 +29785,9 @@ } }, "node-forge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.0.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, "node-int64": { @@ -30371,12 +30150,6 @@ "wcwidth": "^1.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "peer": true - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -30394,7 +30167,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "^1.5.6" + "url-parse": "^1.5.9" } }, "os-browserify": { @@ -30553,12 +30326,6 @@ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -30665,13 +30432,13 @@ } }, "plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "peer": true, "requires": { "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" + "xmlbuilder": "^15.1.1" } }, "popper.js": { @@ -30686,7 +30453,7 @@ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "async": "^2.6.2", + "async": "^2.6.4", "debug": "^3.1.1", "mkdirp": "^0.5.5" }, @@ -30835,12 +30602,6 @@ "@types/yargs-parser": "*" } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "peer": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -31142,7 +30903,7 @@ "integrity": "sha512-pvpNDHE7p0FtcCmIWGazoY8LLVfBI9sw0Kf10kdHhPI9Tzt3OG/qEt16GrAbE0keuna5WzX3r1qPKVjqOqsuUg==", "peer": true, "requires": { - "shell-quote": "^1.6.1", + "shell-quote": "^1.7.3", "ws": "^7" }, "dependencies": { @@ -31679,7 +31440,7 @@ "execa": "^1.0.0", "fb-watchman": "^2.0.0", "micromatch": "^3.1.4", - "minimist": "^1.1.1", + "minimist": "^1.2.6", "walker": "~1.0.5" }, "dependencies": { @@ -31742,7 +31503,7 @@ "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "requires": { - "node-forge": "^1.0.0" + "node-forge": "^1.3.0" } }, "semver": { @@ -31943,8 +31704,8 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "peer": true, "requires": { @@ -31971,14 +31732,14 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-plist": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.0.tgz", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", "integrity": "sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg==", "peer": true, "requires": { "bplist-creator": "0.1.0", "bplist-parser": "0.3.0", - "plist": "^3.0.4" + "plist": "^3.0.5" } }, "sinon": { @@ -32183,11 +31944,11 @@ "dev": true, "requires": { "debug": "^3.2.6", - "eventsource": "^1.0.7", + "eventsource": "^1.1.1", "faye-websocket": "^0.11.3", "inherits": "^2.0.4", "json3": "^3.3.3", - "url-parse": "^1.5.6" + "url-parse": "^1.5.9" }, "dependencies": { "debug": { @@ -32483,12 +32244,6 @@ "strip-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -32647,9 +32402,9 @@ } }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -32683,7 +32438,7 @@ "schema-utils": "^1.0.0", "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", - "terser": "^4.1.2", + "terser": "^4.8.1", "webpack-sources": "^1.4.0", "worker-farm": "^1.7.0" }, @@ -33044,7 +32799,7 @@ "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { @@ -33054,7 +32809,7 @@ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.6" } } } @@ -33366,9 +33121,9 @@ } }, "url-parse": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.6.tgz", - "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -33568,29 +33323,6 @@ "nan": "^2.12.1" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "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, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -33832,27 +33564,6 @@ "nan": "^2.12.1" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "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" - } - } - } - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -34007,12 +33718,6 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -34054,14 +33759,14 @@ "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", "peer": true, "requires": { - "simple-plist": "^1.0.0", + "simple-plist": "^1.3.1", "uuid": "^3.3.2" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "peer": true }, "xmldoc": { diff --git a/clients/web/react/public/i18n/en-US.json b/clients/web/react/public/i18n/en-US.json index fe54274..4d693a8 100644 --- a/clients/web/react/public/i18n/en-US.json +++ b/clients/web/react/public/i18n/en-US.json @@ -5,7 +5,7 @@ "primary-button": "Continue", "primary-button-loading": "Fetching your profile", "forgot-key": "Forgot Your Security Key?", - "trusted-device-button": "Continue with Trusted Device or Security Key", + "trusted-device-button": "Login with passkey", "trusted-device-button-loading": "Fetching your credentials", "alt-method": "Try another method" }, diff --git a/clients/web/react/src/App/App.tsx b/clients/web/react/src/App/App.tsx index 6f9f34b..f0ab6a0 100644 --- a/clients/web/react/src/App/App.tsx +++ b/clients/web/react/src/App/App.tsx @@ -11,6 +11,7 @@ import HomePage from "../HomePage/HomePage"; import IdentifierFirstLoginFlowPage from "../LoginPage/IdentifierFirstLoginFlowPage"; import IdentifierFirstSignUpFlowPage from "../RegisterPage/IdentifierFirstSignUpFlowPage"; import LogoutPage from "../LogoutPage/LogoutPage"; +import PasskeyLoginFlowPage from "../Passkey/PasskeyLoginFlowPage"; import aws_exports from "../aws-exports"; @@ -59,6 +60,7 @@ const App = function () { path="/register" component={IdentifierFirstSignUpFlowPage} /> + diff --git a/clients/web/react/src/LoginPage/LogInStep.tsx b/clients/web/react/src/LoginPage/LogInStep.tsx index b82c796..806642f 100644 --- a/clients/web/react/src/LoginPage/LogInStep.tsx +++ b/clients/web/react/src/LoginPage/LogInStep.tsx @@ -1,4 +1,4 @@ -import React, { useState, ReactElement } from "react"; +import React, { useState, ReactElement, useEffect, useCallback } from "react"; import { Button, InputGroup, Form, Spinner } from "react-bootstrap"; import { useDispatch } from "react-redux"; @@ -8,6 +8,8 @@ import { WebAuthnClient } from "../_components"; import U2FPassword from "../_components/u2fPassword/u2fPassword"; import { history } from "../_helpers"; import { credentialActions, alertActions } from "../_actions"; +import { Auth } from "aws-amplify"; +import { get } from "@github/webauthn-json"; const styles = require("../_components/component.module.css"); @@ -41,6 +43,16 @@ const LogInStep = function ({ navigation }) { // detects if the user has put any info in the username field, used to stop the red outline from occurring on initial load const [initialInput, setInitialInput] = useState(false); + //Used to determine if a autofill menu should be used in the input + const [autoComplete, setAC] = useState(""); + + const [authAbortController, setAuthAbortController] = useState( + new AbortController() + ); + + //const authAbortController = new AbortController(); + //const authAbortSignal = authAbortController.signal; + const constraints = { username: { presence: true, @@ -93,6 +105,11 @@ const LogInStep = function ({ navigation }) { * If successful the user will proceed to the init user step */ async function signIn(username) { + // If autofill is currently running, end the process to make way for modal auth session + if (mediationAvailable()) { + authAbortController.abort(); + } + console.info( t("console.info", { COMPONENT: "LoginStep", @@ -152,6 +169,11 @@ const LogInStep = function ({ navigation }) { if (error.code === "UserNotFoundException") { signUpStep(); } + + if (mediationAvailable()) { + // Create a new abortcontroller, signaling that new autofill ceremony should be invoked + setAuthAbortController(new AbortController()); + } } } @@ -165,7 +187,12 @@ const LogInStep = function ({ navigation }) { /** * Routes the user to the first step of the register step */ - const signUpStep = () => { + const signUpStep = async () => { + // You only need to kill the autofill process if mediation is available + if (mediationAvailable()) { + // The active webauthn ceremony needs to be aborted, otherwise the registration ceremony cannot be invoked + authAbortController.abort(); + } history.push("/register"); }; @@ -272,6 +299,90 @@ const LogInStep = function ({ navigation }) { return true; }; + /** + * Method to determine if conditional mediation (autofill) is available on the browser + * This method will be used in multiple flows on this page to determine if actions should be taken + * to trigger an autofill flow, or abort an existing practice + * @returns True if autofill is available, false otherwise + */ + const mediationAvailable = () => { + // Need to add any as the used version of TS does not include isConditionalMediationAvailable + const pubKeyCred: any = PublicKeyCredential; + // Check if the function exists on the browser - Not safe to assume as the page will crash if the function is not available + //typeof check is used as browsers that do not support mediation will not have the 'isConditionalMediationAvailable' method available + if ( + typeof pubKeyCred.isConditionalMediationAvailable === "function" && + pubKeyCred.isConditionalMediationAvailable() + ) { + return true; + } + return false; + }; + + /** + * Sign in flow that utilizes the conditional mediation flow of the get() method + */ + const passkeySignIn = useCallback(async (authAbortControllerValue) => { + try { + // Reaching out to Cognito for auth challenge + let requestOptions = await WebAuthnClient.getPublicKeyRequestOptions(); + setAC("username webuathn"); + console.log("Printing response from Cognito: ", requestOptions); + + const credential = await get({ + publicKey: requestOptions.publicKeyCredentialRequestOptions, + // @ts-ignore + mediation: "conditional", + signal: authAbortControllerValue.signal, + }); + setUsernamelessSubmitted(true); + setContinueSubmitted(true); + + console.log("Credential found for: ", credential.response.userHandle); + const name = credential.response.userHandle; + const cognitoUser = await Auth.signIn(name); + console.log("cognitoUser: ", cognitoUser); + + const challengeResponse = { + credential: credential, + requestId: requestOptions.requestId, + pinCode: "-1", + }; + const userData = await WebAuthnClient.sendChallengeAnswer( + cognitoUser, + challengeResponse, + "-1" + ); + console.log(userData); + setUsernamelessSubmitted(false); + setContinueSubmitted(false); + navigation.go("InitUserStep"); + } catch (error) { + console.error(error); + } + }, []); + + /** + * On initial page load, attempt to see if autofill is available + * If available, begin a conditional mediation WebAuthn call + */ + useEffect(() => { + if (mediationAvailable()) { + console.log("Allowing for mediation request to process"); + setAC(""); + passkeySignIn(authAbortController).catch(console.error); + } + }, [passkeySignIn]); + + /** + * Attempt to retrigger the passkeysignin method if a new abort controller was created + */ + useEffect(() => { + if (mediationAvailable() && authAbortController.signal.aborted === false) { + passkeySignIn(authAbortController).catch(console.error); + } + }, [authAbortController]); + return ( <>
@@ -294,7 +405,16 @@ const LogInStep = function ({ navigation }) { isInvalid={!isUsernameValid() && initialInput} isValid={isUsernameValid()} required + autoComplete="username webauthn" /> + {/**Chrome has a requirement that a password field be present, will remove once it's no longer needed**/} + {errors.username} diff --git a/clients/web/react/src/Passkey/InitUserStep.tsx b/clients/web/react/src/Passkey/InitUserStep.tsx new file mode 100644 index 0000000..3a3857b --- /dev/null +++ b/clients/web/react/src/Passkey/InitUserStep.tsx @@ -0,0 +1,45 @@ +import React, { useEffect } from "react"; +import { useDispatch, useSelector, RootStateOrAny } from "react-redux"; +import { Spinner } from "react-bootstrap"; +import { useTranslation } from "react-i18next"; +import { history } from "../_helpers"; +import { userActions } from "../_actions"; + +const styles = require("../_components/component.module.css"); + +/** + * Transitionary page that is used to log in the user and to set auth tokens used for APIs - This step should only be reached after a successful registration + * @returns User is routed back to the login screen, with all credentials removed from the browser + */ +const InitUserStep = function () { + const { t } = useTranslation(); + + const user = useSelector((state: RootStateOrAny) => state.users); + + const dispatch = useDispatch(); + + /** + * Once a user is configured, ensure that they have a user token + * If the user has a token, allow them to proceed to the key registration success page + */ + useEffect(() => { + dispatch(userActions.getCurrentAuthenticatedUser()); + }, []); + + useEffect(() => { + const token = user?.token; + + if (token !== undefined) { + history.push("/"); + } + }, [user]); + + return ( +
+ +

{t("init-user")}

+
+ ); +}; + +export default InitUserStep; diff --git a/clients/web/react/src/Passkey/PasskeyLogin.jsx b/clients/web/react/src/Passkey/PasskeyLogin.jsx new file mode 100644 index 0000000..3f8328b --- /dev/null +++ b/clients/web/react/src/Passkey/PasskeyLogin.jsx @@ -0,0 +1,127 @@ +import React, { useState, useEffect, useCallback } from "react"; + +import { WebAuthnClient } from "../_components"; +import { history } from "../_helpers"; +import { Auth } from "aws-amplify"; +import { get, create } from "@github/webauthn-json"; +import { Spinner } from "react-bootstrap"; + +const styles = require("../_components/component.module.css"); + +/** + * Step used to login the user with the autofill mechanism from Apple devices for Passkeys + */ +const PasskeyLogin = function ({ navigation }) { + const [autoComplete, setAC] = useState(""); + const [loading, setLoading] = useState(false); + + const mediationAvailable = () => { + const pubKeyCred = PublicKeyCredential; + // Check if the function exists on the browser - Not safe to assume as the page will crash if the function is not available + //typeof check is used as browsers that do not support mediation will not have the 'isConditionalMediationAvailable' method available + if ( + typeof pubKeyCred.isConditionalMediationAvailable === "function" && + pubKeyCred.isConditionalMediationAvailable() + ) { + console.log("Mediation is available"); + return true; + } + console.log("Mediation is not available"); + return false; + }; + + /** + * Function meant to prevent the form below from triggering a page refresh on submit + * @param event event triggered from the UI + */ + const cO = (event) => { + event.preventDefault(); + }; + + const passkeySignIn = useCallback(async () => { + console.log("In passkeySignIn"); + + try { + // Reaching out to Cognito for auth challenge + let requestOptions = await WebAuthnClient.getPublicKeyRequestOptions(); + setAC("username webuathn"); + console.log("Printing response from Cognito: ", requestOptions); + + // Good news, webauthn-json still works with mediation (praise be for loose typing in JS) + const credential = await get({ + publicKey: requestOptions.publicKeyCredentialRequestOptions, + mediation: "conditional", + }); + setLoading(true); + + console.log("Credential found for: ", credential.response.userHandle); + const name = credential.response.userHandle; + const cognitoUser = await Auth.signIn(name); + console.log("cognitoUser: ", cognitoUser); + + const challengeResponse = { + credential: credential, + requestId: requestOptions.requestId, + pinCode: "-1", + }; + const userData = await WebAuthnClient.sendChallengeAnswer( + cognitoUser, + challengeResponse, + "-1" + ); + console.log(userData); + setLoading(false); + navigation.go("InitUserStep"); + } catch (error) { + console.log(error); + } + }, []); + + useEffect(() => { + if (!mediationAvailable()) { + history.push("/login"); + } else { + setAC(""); + passkeySignIn().catch(console.error); + } + }, [passkeySignIn]); + + const signInStep = () => { + history.push("/login"); + }; + + const signUpStep = () => { + history.push("/register"); + }; + + return ( + <> +

Login with passkey

+
+ +
+
+
+ {loading && ( +
+ +

Authenticating

+
+ )} +
+ Don't see a passkey?{" "} + + Login another way + +
+
+ Don't have an account?{" "} + + Sign Up + +
+ + ); +}; + +export default PasskeyLogin; diff --git a/clients/web/react/src/Passkey/PasskeyLoginFlowPage.jsx b/clients/web/react/src/Passkey/PasskeyLoginFlowPage.jsx new file mode 100644 index 0000000..ef2dcd6 --- /dev/null +++ b/clients/web/react/src/Passkey/PasskeyLoginFlowPage.jsx @@ -0,0 +1,9 @@ +import React from "react"; + +import PasskeyLoginPage from "./PasskeyLoginPage"; + +function PasskeyLoginFlowPage() { + return ; +} + +export default PasskeyLoginFlowPage; diff --git a/clients/web/react/src/Passkey/PasskeyLoginPage.jsx b/clients/web/react/src/Passkey/PasskeyLoginPage.jsx new file mode 100644 index 0000000..7b1c3dd --- /dev/null +++ b/clients/web/react/src/Passkey/PasskeyLoginPage.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import { useStep } from "react-hooks-helper"; + +import PasskeyLogin from "./PasskeyLogin"; +import InitUserStep from "./InitUserStep"; + +const steps = [{ id: "PasskeyLogin" }, { id: "InitUserStep" }]; + +function PasskeyLoginPage() { + const _initialStep = 0; + const { step, navigation } = useStep({ initialStep: _initialStep, steps }); + + const { id } = step; + + const props = { navigation }; + + const renderSwitch = (id) => { + switch (id) { + // Step will be the default IF a trusted device is detected in the local application storage + case "PasskeyLogin": + return ; + // Primary login step, allowing the user to enter their username - Also allows for the use of recovery codes, and usernamless login + case "InitUserStep": + return ; + default: + return null; + } + }; + + return <>{renderSwitch(id)}; +} + +export default PasskeyLoginPage; diff --git a/scripts/Mac-Linux/Dockerfile b/scripts/Mac-Linux/Dockerfile index ec5fe8a..f5293ce 100644 --- a/scripts/Mac-Linux/Dockerfile +++ b/scripts/Mac-Linux/Dockerfile @@ -1,7 +1,7 @@ # Pull in base image that already has Java, MVN, and Node pre-installed FROM openkbs/jdk-mvn-py3 # The above Docker base image has the following pre-installed/configured: -# node: v15.1.0 | npm: v7.0.8 | java: OpenJDK v1.8.0_265 | python: v3.6.9 +# node: v16.4.1 | npm: v7.20.0 | java: OpenJDK v11.0.11 | python: v3.6.9 # Terminal interaction ENV TERM linux @@ -13,7 +13,7 @@ RUN curl -S "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscl #2 - Install AWS SAM CLI via Python3 (https://github.com/aws/aws-sam-cli/issues/1424) RUN echo "Installing AWS SAM CLI..." -RUN pip3 install --user --upgrade aws-sam-cli --no-warn-script-location --quiet > /dev/null 2>&1 +RUN curl -L https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip -o aws-sam-cli-linux-x86_64.zip && unzip aws-sam-cli-linux-x86_64.zip -d sam-installation && sudo ./sam-installation/install #3 - Install webpack RUN echo "Installing Webpack..." diff --git a/scripts/Mac-Linux/deployStarterKit.sh b/scripts/Mac-Linux/deployStarterKit.sh index 45a35c8..f2753f9 100755 --- a/scripts/Mac-Linux/deployStarterKit.sh +++ b/scripts/Mac-Linux/deployStarterKit.sh @@ -143,18 +143,18 @@ aws s3 mb s3://$S3_BUCKET_NAME --region $AWS_REGION --endpoint-url https://s3.$A #3 |*************************** SAM Build ********************************************| echo "Step 3 [Deployment] Running SAM build...(~1 minute) " docker run -w /webauthnkit/backend --volume=$STARTER_KIT_DIR:/webauthnkit starterkit:dev \ -/home/developer/.local/bin/sam build > /dev/null 2>&1 +/usr/local/bin/sam build > /dev/null 2>&1 #4 |***************************** SAM Package ****************************************| echo "Step 4 [Deployment] Running SAM package..." docker run -w /webauthnkit/backend --volume=$STARTER_KIT_DIR:/webauthnkit starterkit:dev \ -/home/developer/.local/bin/sam package > /dev/null 2>&1 +/usr/local/bin/sam package > /dev/null 2>&1 #5 |**************************** SAM Deploy ******************************************| echo "Step 5 [Deployment] Running SAM deploy..." docker run -w /webauthnkit/backend --volume=$STARTER_KIT_DIR:/webauthnkit \ --volume=${HOME}/.aws:/home/developer/.aws:ro starterkit:dev \ -/home/developer/.local/bin/sam deploy \ +/usr/local/bin/sam deploy \ --s3-bucket $S3_BUCKET_NAME \ --stack-name $CF_STACK_NAME \ --profile $AWS_CLI_PROFILE \