diff --git a/package-lock.json b/package-lock.json index 8833355c..e4322342 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "eop", - "version": "0.22.0", + "version": "0.23.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "eop", - "version": "0.22.0", + "version": "0.23.0", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^5.15.3", @@ -17,7 +17,7 @@ "bootstrap": "^4.6.0", "cornucopia-cards-modified": "file:cornucopiaCards", "esm": "^3.2.25", - "jointjs": "^3.7.4", + "jointjs": "^3.7.7", "koa": "^2.14.2", "koa-body": "^4.2.0", "koa-router": "^12.0.1", @@ -34,7 +34,7 @@ "react-scripts": "^5.0.1", "reactstrap": "^8.10.1", "reactstrap-confirm": "^1.3.2", - "superagent": "^8.0.9", + "superagent": "^9.0.2", "uuid": "^9.0.0" }, "devDependencies": { @@ -48,7 +48,7 @@ "@types/jest": "^27.5.2", "@types/koa__cors": "^3.3.0", "@types/koa-router": "^7.4.4", - "@types/koa-send": "^4.1.3", + "@types/koa-send": "^4.1.6", "@types/lodash": "^4.14.189", "@types/node": "^16.11.26", "@types/react": "^17.0.43", @@ -67,7 +67,7 @@ "npm-run-all": "^4.1.5", "prettier": "^3.2.5", "seedrandom": "^3.0.5", - "supertest": "^6.3.4", + "supertest": "^7.0.0", "ts-toolbelt": "^9.6.0", "typescript": "^4.8.4" } @@ -4376,9 +4376,9 @@ } }, "node_modules/@types/koa-send": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", - "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.6.tgz", + "integrity": "sha512-vgnNGoOJkx7FrF0Jl6rbK1f8bBecqAchKpXtKuXzqIEdXTDO6dsSTjr+eZ5m7ltSjH4K/E7auNJEQCAd0McUPA==", "dev": true, "dependencies": { "@types/koa": "*" @@ -12846,21 +12846,22 @@ } }, "node_modules/jointjs": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.7.4.tgz", - "integrity": "sha512-TQgtukMfRjZp/N7GBM5Tb9jK72wX0i9XBtcqaZL8G04WVZzsH3/oaTFzik5//y/4mL7Ont+qPUd3D1t/rYzq/A==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.7.7.tgz", + "integrity": "sha512-gwjyLfXIxovVCIHrg57WG0cyPt6dsJjgnGEGOt8gh2F2kp/T1x6z7kBf62eQqSnM7qn1XiheZV4Iopzd2doHlw==", + "deprecated": "This package has been deprecated in favor of '@joint/core'. The repository name has changed to improve organization and naming conventions. Please update your dependencies to use the new package name:\n\nnpm install @joint/core\n\nFor more information, visit the JointJS repository at: https://github.com/clientio/joint", "dependencies": { "backbone": "~1.4.1", "dagre": "~0.8.5", "graphlib": "~2.1.8", - "jquery": "~3.6.4", + "jquery": "~3.7.1", "lodash": "~4.17.21" } }, "node_modules/jquery": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", - "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/js-sdsl": { "version": "4.3.0", @@ -18185,23 +18186,22 @@ } }, "node_modules/superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^2.1.2", + "formidable": "^3.5.1", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" + "qs": "^6.11.0" }, "engines": { - "node": ">=6.4.0 <13 || >=14" + "node": ">=14.18.0" } }, "node_modules/superagent/node_modules/debug": { @@ -18234,65 +18234,34 @@ } }, "node_modules/superagent/node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", "dependencies": { "dezalgo": "^1.0.4", "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" + "once": "^1.4.0" }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/superagent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/superagent/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", "dev": true, "dependencies": { "methods": "^1.1.2", - "superagent": "^8.1.2" + "superagent": "^9.0.1" }, "engines": { - "node": ">=6.4.0" + "node": ">=14.18.0" } }, "node_modules/supports-color": { @@ -23030,9 +22999,9 @@ } }, "@types/koa-send": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", - "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.6.tgz", + "integrity": "sha512-vgnNGoOJkx7FrF0Jl6rbK1f8bBecqAchKpXtKuXzqIEdXTDO6dsSTjr+eZ5m7ltSjH4K/E7auNJEQCAd0McUPA==", "dev": true, "requires": { "@types/koa": "*" @@ -29208,21 +29177,21 @@ } }, "jointjs": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.7.4.tgz", - "integrity": "sha512-TQgtukMfRjZp/N7GBM5Tb9jK72wX0i9XBtcqaZL8G04WVZzsH3/oaTFzik5//y/4mL7Ont+qPUd3D1t/rYzq/A==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/jointjs/-/jointjs-3.7.7.tgz", + "integrity": "sha512-gwjyLfXIxovVCIHrg57WG0cyPt6dsJjgnGEGOt8gh2F2kp/T1x6z7kBf62eQqSnM7qn1XiheZV4Iopzd2doHlw==", "requires": { "backbone": "~1.4.1", "dagre": "~0.8.5", "graphlib": "~2.1.8", - "jquery": "~3.6.4", + "jquery": "~3.7.1", "lodash": "~4.17.21" } }, "jquery": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", - "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "js-sdsl": { "version": "4.3.0", @@ -32950,20 +32919,19 @@ } }, "superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^2.1.2", + "formidable": "^3.5.1", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" + "qs": "^6.11.0" }, "dependencies": { "debug": { @@ -32985,52 +32953,30 @@ } }, "formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", "requires": { "dezalgo": "^1.0.4", "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" + "once": "^1.4.0" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^8.1.2" + "superagent": "^9.0.1" } }, "supports-color": { diff --git a/package.json b/package.json index a8e8d62a..fb7ec6fb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eop", - "version": "0.22.0", + "version": "0.23.0", "private": true, "main": "src/client/index.tsx", "dependencies": { @@ -13,7 +13,7 @@ "bootstrap": "^4.6.0", "cornucopia-cards-modified": "file:cornucopiaCards", "esm": "^3.2.25", - "jointjs": "^3.7.4", + "jointjs": "^3.7.7", "koa": "^2.14.2", "koa-body": "^4.2.0", "koa-router": "^12.0.1", @@ -30,7 +30,7 @@ "react-scripts": "^5.0.1", "reactstrap": "^8.10.1", "reactstrap-confirm": "^1.3.2", - "superagent": "^8.0.9", + "superagent": "^9.0.2", "uuid": "^9.0.0" }, "type": "module", @@ -76,7 +76,7 @@ "@types/jest": "^27.5.2", "@types/koa__cors": "^3.3.0", "@types/koa-router": "^7.4.4", - "@types/koa-send": "^4.1.3", + "@types/koa-send": "^4.1.6", "@types/lodash": "^4.14.189", "@types/node": "^16.11.26", "@types/react": "^17.0.43", @@ -95,7 +95,7 @@ "npm-run-all": "^4.1.5", "prettier": "^3.2.5", "seedrandom": "^3.0.5", - "supertest": "^6.3.4", + "supertest": "^7.0.0", "ts-toolbelt": "^9.6.0", "typescript": "^4.8.4" }, diff --git a/src/client/components/dealtcard/dealtcard.tsx b/src/client/components/dealtcard/dealtcard.tsx index 85644ef7..7b29224b 100644 --- a/src/client/components/dealtcard/dealtcard.tsx +++ b/src/client/components/dealtcard/dealtcard.tsx @@ -10,12 +10,14 @@ interface DealtCardProps { const DealtCard: React.FC = ({ gameMode, card }) => { const roundedClass = gameMode === GameMode.CUMULUS ? `card-rounded-cumulus` : `card-rounded`; + const translationClass = + gameMode === GameMode.EOMLSEC ? `card-translate-left` : ``; return (
); }; diff --git a/src/client/components/footer/footer.tsx b/src/client/components/footer/footer.tsx index dd0bd2d4..102c8452 100644 --- a/src/client/components/footer/footer.tsx +++ b/src/client/components/footer/footer.tsx @@ -25,9 +25,11 @@ const Footer: FC = ({ short }) => ( TNG Technology Consulting - Elevation of Privilege was originally invented at Microsoft, Cornucopia was developed at OWASP, Cumulus was started at{' '} - TNG Technology Consulting. + TNG Technology Consulting, + Elevation of MLsec was developed at {' '} + Kantega AS. -
+
diff --git a/src/client/components/license/licenseAttribution.test.tsx b/src/client/components/license/licenseAttribution.test.tsx index fb609301..c1f66b73 100644 --- a/src/client/components/license/licenseAttribution.test.tsx +++ b/src/client/components/license/licenseAttribution.test.tsx @@ -21,4 +21,10 @@ describe('licence attribution', () => { screen.getByText('CC-BY-4.0'); }); + + it('gives the correct license for Elevation of MLSec', () => { + render(); + + screen.getByText('CC BY-SA 4.0 DEED'); + }); }); diff --git a/src/client/components/license/licenseAttribution.tsx b/src/client/components/license/licenseAttribution.tsx index cb8bf13e..e7334f3f 100644 --- a/src/client/components/license/licenseAttribution.tsx +++ b/src/client/components/license/licenseAttribution.tsx @@ -53,6 +53,19 @@ const LicenseAttribution: React.FC = ({
); + case GameMode.EOMLSEC: + return ( +
+ The card game Elevation of MLsec by{' '} + + Kantega AS + {' '} + is licensed under{' '} + CC BY-SA 4.0 DEED. +
+ ); + + default: return <>; } diff --git a/src/client/pages/app.tsx b/src/client/pages/app.tsx index c9458c27..14c9335d 100644 --- a/src/client/pages/app.tsx +++ b/src/client/pages/app.tsx @@ -12,6 +12,7 @@ import '../styles/eop_cards.css'; import '../styles/cornucopia_cards.css'; import 'cornucopia-cards-modified/style.css'; import '../styles/cumulus_cards.css'; +import '../styles/eomlsec_cards.css'; const url = window.location.protocol + diff --git a/src/client/styles/cards.css b/src/client/styles/cards.css index b7839346..cd43bfe1 100644 --- a/src/client/styles/cards.css +++ b/src/client/styles/cards.css @@ -24,6 +24,10 @@ border-radius: 25px; } +.card-translate-left { + margin-left: -5rem; +} + .playingCardsContainer { position: fixed; bottom: 0; diff --git a/src/client/styles/eomlsec_cards.css b/src/client/styles/eomlsec_cards.css new file mode 100644 index 00000000..0aa0330b --- /dev/null +++ b/src/client/styles/eomlsec_cards.css @@ -0,0 +1,63 @@ +.eomlsec-card { + background-image: url('eomlsec_cards.jpg'); +} + +/* Model Risk */ +.eomlsec-card-img-a2 { background-position: -6px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a3 { background-position: -426px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a4 { background-position: -846px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a5 { background-position: -1266px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a6 { background-position: -1686px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a7 { background-position: -2106px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a8 { background-position: -2526px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a9 { background-position: -2946px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-a10 { background-position: -3366px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-aj { background-position: -3786px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-aq { background-position: -4206px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-ak { background-position: -4626px -1164px; width: 410px; height: 569px; } +.eomlsec-card-img-aa { background-position: -5046px -1164px; width: 410px; height: 569px; } + +/* Dataset Risk */ +.eomlsec-card-img-t2 { background-position: -6px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t3 { background-position: -426px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t4 { background-position: -846px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t5 { background-position: -1266px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t6 { background-position: -1686px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t7 { background-position: -2106px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t8 { background-position: -2526px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t9 { background-position: -2946px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-t10 { background-position: -3366px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-tj { background-position: -3786px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-tq { background-position: -4206px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-tk { background-position: -4626px -6px; width: 410px; height: 569px; } +.eomlsec-card-img-ta { background-position: -5046px -6px; width: 410px; height: 569px; } + +/* Input Risk */ +.eomlsec-card-img-b2 { background-position: -6px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b3 { background-position: -426px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b4 { background-position: -846px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b5 { background-position: -1266px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b6 { background-position: -1686px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b7 { background-position: -2106px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b8 { background-position: -2526px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b9 { background-position: -2946px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-b10 { background-position: -3366px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-bj { background-position: -3786px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-bq { background-position: -4206px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-bk { background-position: -4626px -585px; width: 410px; height: 569px; } +.eomlsec-card-img-ba { background-position: -5046px -585px; width: 410px; height: 569px; } + +/* Output Risk */ +.eomlsec-card-img-c2 { background-position: -6px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c3 { background-position: -426px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c4 { background-position: -846px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c5 { background-position: -1266px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c6 { background-position: -1686px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c7 { background-position: -2106px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c8 { background-position: -2526px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c9 { background-position: -2946px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-c10 { background-position: -3366px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-cj { background-position: -3786px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-cq { background-position: -4206px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-ck { background-position: -4626px -1743px; width: 410px; height: 569px; } +.eomlsec-card-img-ca { background-position: -5046px -1743px; width: 410px; height: 569px; } diff --git a/src/client/styles/eomlsec_cards.jpg b/src/client/styles/eomlsec_cards.jpg new file mode 100644 index 00000000..eff2213e Binary files /dev/null and b/src/client/styles/eomlsec_cards.jpg differ diff --git a/src/utils/GameMode.ts b/src/utils/GameMode.ts index d8219361..147b183b 100644 --- a/src/utils/GameMode.ts +++ b/src/utils/GameMode.ts @@ -4,6 +4,7 @@ export enum GameMode { EOP = 'Elevation of Privilege', CORNUCOPIA = 'OWASP Cornucopia', CUMULUS = 'OWASP Cumulus', + EOMLSEC = 'Elevation of MLsec', } export const DEFAULT_GAME_MODE = GameMode.EOP; @@ -17,14 +18,25 @@ export function getCardCssClass(gameMode: GameMode, c: Card): string { return `cumulus-card cumulus-card-img-${c.toLowerCase()}`; } + if (isGameModeElevationOfMlSec(gameMode)) { + return `eomlsec-card eomlsec-card-img-${c.toLowerCase()}` + } + return `eop-card eop-card-img-${c.toLowerCase()}`; } + function isGameMode(value: GameMode): value is GameMode { return Object.values(GameMode).includes(value); } + function isGameModeCornucopia(gameMode: GameMode): boolean { return isGameMode(gameMode) && gameMode === GameMode.CORNUCOPIA; } + function isGameModeCumulus(gameMode: GameMode): boolean { return isGameMode(gameMode) && gameMode === GameMode.CUMULUS; } + +function isGameModeElevationOfMlSec(gameMode: GameMode): boolean { + return isGameMode(gameMode) && gameMode === GameMode.EOMLSEC; +} diff --git a/src/utils/cardDefinitions.ts b/src/utils/cardDefinitions.ts index 71384210..2f63a79f 100644 --- a/src/utils/cardDefinitions.ts +++ b/src/utils/cardDefinitions.ts @@ -369,6 +369,106 @@ const CARD_DECKS: CardDeckDefinitions = { isDefault: true, }, }, + [GameMode.EOMLSEC]: { + A: { + name: 'Model Risk', + abbreviation: 'Mod', + cards: [ + 'A2', + 'A3', + 'A4', + 'A5', + 'A6', + 'A7', + 'A8', + 'A9', + 'A10', + 'AJ', + 'AQ', + 'AK', + 'AA', + ], + isTrump: false, + isDefault: true, + }, + B: { + name: 'Input Risk', + abbreviation: 'In', + cards: [ + 'B2', + 'B3', + 'B4', + 'B5', + 'B6', + 'B7', + 'B8', + 'B9', + 'B10', + 'BJ', + 'BQ', + 'BK', + 'BA', + ], + isTrump: false, + isDefault: false, + }, + C: { + name: 'Output Risk', + abbreviation: 'Out', + cards: [ + 'C2', + 'C3', + 'C4', + 'C5', + 'C6', + 'C7', + 'C8', + 'C9', + 'C10', + 'CJ', + 'CQ', + 'CK', + 'CA', + ], + isTrump: false, + isDefault: false, + }, + D: { + name: '', + abbreviation: '', + cards: [], + isTrump: false, + isDefault: false, + }, + E: { + name: '', + abbreviation: '', + cards: [], + isTrump: false, + isDefault: false, + }, + T: { + name: 'Dataset Risk', + abbreviation: 'Data', + cards: [ + 'T2', + 'T3', + 'T4', + 'T5', + 'T6', + 'T7', + 'T8', + 'T9', + 'T10', + 'TJ', + 'TQ', + 'TK', + 'TA', + ], + isTrump: true, + isDefault: false, + } + }, }; export function isSuit(str: string): str is Suit {