From 0d348e2398b56d56170a9e0c1cbd60e709bcd480 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 18 Jan 2025 10:47:54 +0000 Subject: [PATCH 01/66] chore(deps): update dependency svelte to v5 --- frontend/fic/package-lock.json | 83 ++++++++++++++++++++--- frontend/fic/package.json | 2 +- qa/ui/package-lock.json | 117 ++++++++++++++------------------- qa/ui/package.json | 2 +- 4 files changed, 124 insertions(+), 80 deletions(-) diff --git a/frontend/fic/package-lock.json b/frontend/fic/package-lock.json index 1a6cc96d..4e91114c 100644 --- a/frontend/fic/package-lock.json +++ b/frontend/fic/package-lock.json @@ -30,7 +30,7 @@ "prettier-plugin-svelte": "^3.1.2", "sass": "^1.51.0", "sass-loader": "^16.0.0", - "svelte": "^4.0.0", + "svelte": "^5.0.0", "vite": "^5.0.0" } }, @@ -1412,6 +1412,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1586,6 +1596,16 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/code-red": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", @@ -1977,6 +1997,16 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.3.tgz", + "integrity": "sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3023,6 +3053,41 @@ } }, "node_modules/svelte": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.0.tgz", + "integrity": "sha512-qvd2GvvYnJxS/MteQKFSMyq8cQrAAut28QZ39ySv9k3ggmhw4Au4Rfcsqva74i0xMys//OhbhVCNfXPrDzL/Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "esm-env": "^1.2.1", + "esrap": "^1.4.3", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-bricks": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/svelte-bricks/-/svelte-bricks-0.2.1.tgz", + "integrity": "sha512-cc3XK3j5ViPyZ3K183+Sr53B2e8mJaiV3POyoJtjmm1dYc/TBMy7jOUMt8MW/snJzodpACfqwFzokBQbrZ297w==", + "license": "MIT", + "dependencies": { + "svelte": "^4.2.1" + } + }, + "node_modules/svelte-bricks/node_modules/svelte": { "version": "4.2.19", "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", @@ -3047,15 +3112,6 @@ "node": ">=16" } }, - "node_modules/svelte-bricks": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/svelte-bricks/-/svelte-bricks-0.2.1.tgz", - "integrity": "sha512-cc3XK3j5ViPyZ3K183+Sr53B2e8mJaiV3POyoJtjmm1dYc/TBMy7jOUMt8MW/snJzodpACfqwFzokBQbrZ297w==", - "license": "MIT", - "dependencies": { - "svelte": "^4.2.1" - } - }, "node_modules/svelte-eslint-parser": { "version": "0.43.0", "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", @@ -3339,6 +3395,13 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true, + "license": "MIT" } } } diff --git a/frontend/fic/package.json b/frontend/fic/package.json index c83a605a..3626efec 100644 --- a/frontend/fic/package.json +++ b/frontend/fic/package.json @@ -20,7 +20,7 @@ "prettier-plugin-svelte": "^3.1.2", "sass": "^1.51.0", "sass-loader": "^16.0.0", - "svelte": "^4.0.0", + "svelte": "^5.0.0", "vite": "^5.0.0" }, "type": "module", diff --git a/qa/ui/package-lock.json b/qa/ui/package-lock.json index 934fba51..091f2a05 100644 --- a/qa/ui/package-lock.json +++ b/qa/ui/package-lock.json @@ -21,7 +21,7 @@ "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.1.2", - "svelte": "^4.0.0", + "svelte": "^5.0.0", "vite": "^5.0.0" } }, @@ -1092,6 +1092,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1230,17 +1239,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" + "engines": { + "node": ">=6" } }, "node_modules/color-convert": { @@ -1295,19 +1300,6 @@ "node": ">= 8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1573,7 +1565,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "dev": true, "license": "MIT" }, "node_modules/espree": { @@ -1607,6 +1598,15 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.3.tgz", + "integrity": "sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -1630,15 +1630,6 @@ "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -1996,12 +1987,6 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2151,17 +2136,6 @@ "node": ">=8" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -2457,6 +2431,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2489,28 +2464,28 @@ } }, "node_modules/svelte": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", - "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.0.tgz", + "integrity": "sha512-qvd2GvvYnJxS/MteQKFSMyq8cQrAAut28QZ39ySv9k3ggmhw4Au4Rfcsqva74i0xMys//OhbhVCNfXPrDzL/Bg==", "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "esm-env": "^1.2.1", + "esrap": "^1.4.3", + "is-reference": "^3.0.3", "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/svelte-eslint-parser": { @@ -2776,6 +2751,12 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "license": "MIT" } } } diff --git a/qa/ui/package.json b/qa/ui/package.json index 86928bce..44560547 100644 --- a/qa/ui/package.json +++ b/qa/ui/package.json @@ -18,7 +18,7 @@ "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.1.2", - "svelte": "^4.0.0", + "svelte": "^5.0.0", "vite": "^5.0.0" }, "type": "module", From 09206df20a4d38623530f52ea3a1f2c588b83389 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 18 Jan 2025 12:40:53 +0000 Subject: [PATCH 02/66] chore(deps): update module golang.org/x/crypto to v0.32.0 --- go.mod | 4 ++-- go.sum | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 234a0275..6ea2d7d9 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/yuin/goldmark v1.7.8 gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b go.uber.org/multierr v1.11.0 - golang.org/x/crypto v0.31.0 + golang.org/x/crypto v0.32.0 golang.org/x/image v0.23.0 golang.org/x/oauth2 v0.25.0 gopkg.in/fsnotify.v1 v1.4.7 @@ -81,7 +81,7 @@ require ( golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.33.0 // indirect golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/go.sum b/go.sum index d065fee7..2b49b734 100644 --- a/go.sum +++ b/go.sum @@ -542,6 +542,8 @@ golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY= golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk= golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c= @@ -798,6 +800,8 @@ golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From 79ec20d11c9eb2b18dde3a01580e0a62a5b2ef66 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Jan 2025 14:57:58 +0000 Subject: [PATCH 03/66] chore(deps): update dependency sass to v1.83.4 --- frontend/fic/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/fic/package-lock.json b/frontend/fic/package-lock.json index 1a6cc96d..f0dc4085 100644 --- a/frontend/fic/package-lock.json +++ b/frontend/fic/package-lock.json @@ -2862,9 +2862,9 @@ } }, "node_modules/sass": { - "version": "1.83.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz", - "integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==", + "version": "1.83.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz", + "integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==", "dev": true, "license": "MIT", "dependencies": { From 89b7710544292e413f19694a03aec317def937ed Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Jan 2025 14:59:00 +0000 Subject: [PATCH 04/66] chore(deps): update dependency @sveltejs/kit to v2.16.1 --- frontend/fic/package-lock.json | 37 +++++----------------------------- qa/ui/package-lock.json | 37 +++++----------------------------- 2 files changed, 10 insertions(+), 64 deletions(-) diff --git a/frontend/fic/package-lock.json b/frontend/fic/package-lock.json index f0dc4085..b69acd7f 100644 --- a/frontend/fic/package-lock.json +++ b/frontend/fic/package-lock.json @@ -1284,25 +1284,23 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.15.2", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.15.2.tgz", - "integrity": "sha512-p208T1kdM6zd8k4YXIUM60pLWQ8dZqehXSiqn4NulXHyHibX53uIAL2xtNL8GjxX2IVPqPRT978MwVYhCKExdQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.16.1.tgz", + "integrity": "sha512-2pF5sgGJx9brYZ/9nNDYnh5KX0JguPF14dnvvtf/MqrvlWrDj/e7Rk3LBJPecFLLK1GRs6ZniD24gFPqZm/NFw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0", "devalue": "^5.1.0", - "esm-env": "^1.2.1", + "esm-env": "^1.2.2", "import-meta-resolve": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", - "sirv": "^3.0.0", - "tiny-glob": "^0.2.9" + "sirv": "^3.0.0" }, "bin": { "svelte-kit": "svelte-kit.js" @@ -2146,20 +2144,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3145,17 +3129,6 @@ "svelte": "^3.19.0 || ^4.0.0" } }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/qa/ui/package-lock.json b/qa/ui/package-lock.json index 934fba51..b3ab2e66 100644 --- a/qa/ui/package-lock.json +++ b/qa/ui/package-lock.json @@ -965,25 +965,23 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.15.2", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.15.2.tgz", - "integrity": "sha512-p208T1kdM6zd8k4YXIUM60pLWQ8dZqehXSiqn4NulXHyHibX53uIAL2xtNL8GjxX2IVPqPRT978MwVYhCKExdQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.16.1.tgz", + "integrity": "sha512-2pF5sgGJx9brYZ/9nNDYnh5KX0JguPF14dnvvtf/MqrvlWrDj/e7Rk3LBJPecFLLK1GRs6ZniD24gFPqZm/NFw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0", "devalue": "^5.1.0", - "esm-env": "^1.2.1", + "esm-env": "^1.2.2", "import-meta-resolve": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", - "sirv": "^3.0.0", - "tiny-glob": "^0.2.9" + "sirv": "^3.0.0" }, "bin": { "svelte-kit": "svelte-kit.js" @@ -1762,20 +1760,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2602,17 +2586,6 @@ "svelte": "^3.19.0 || ^4.0.0" } }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", From 7e41ddd664564126e5fcc280a33214b82784fd77 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 18 Jan 2025 13:37:52 +0000 Subject: [PATCH 05/66] chore(deps): update dependency eslint-config-prettier to v10 --- frontend/fic/package-lock.json | 10 +++++----- frontend/fic/package.json | 2 +- qa/ui/package-lock.json | 10 +++++----- qa/ui/package.json | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/frontend/fic/package-lock.json b/frontend/fic/package-lock.json index b69acd7f..29ee0234 100644 --- a/frontend/fic/package-lock.json +++ b/frontend/fic/package-lock.json @@ -24,7 +24,7 @@ "@sveltejs/vite-plugin-svelte": "^3.0.0", "@sveltestrap/sveltestrap": "^6.2.1", "eslint": "^9.0.0", - "eslint-config-prettier": "^9.0.0", + "eslint-config-prettier": "^10.0.0", "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.1.2", @@ -1860,13 +1860,13 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz", + "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==", "dev": true, "license": "MIT", "bin": { - "eslint-config-prettier": "bin/cli.js" + "eslint-config-prettier": "build/bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" diff --git a/frontend/fic/package.json b/frontend/fic/package.json index c83a605a..3bf2f68f 100644 --- a/frontend/fic/package.json +++ b/frontend/fic/package.json @@ -14,7 +14,7 @@ "@sveltejs/vite-plugin-svelte": "^3.0.0", "@sveltestrap/sveltestrap": "^6.2.1", "eslint": "^9.0.0", - "eslint-config-prettier": "^9.0.0", + "eslint-config-prettier": "^10.0.0", "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.1.2", diff --git a/qa/ui/package-lock.json b/qa/ui/package-lock.json index b3ab2e66..ebb2c130 100644 --- a/qa/ui/package-lock.json +++ b/qa/ui/package-lock.json @@ -17,7 +17,7 @@ "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", "eslint": "^9.0.0", - "eslint-config-prettier": "^9.0.0", + "eslint-config-prettier": "^10.0.0", "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.1.2", @@ -1490,13 +1490,13 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz", + "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==", "dev": true, "license": "MIT", "bin": { - "eslint-config-prettier": "bin/cli.js" + "eslint-config-prettier": "build/bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" diff --git a/qa/ui/package.json b/qa/ui/package.json index 86928bce..0fa2aa6f 100644 --- a/qa/ui/package.json +++ b/qa/ui/package.json @@ -14,7 +14,7 @@ "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", "eslint": "^9.0.0", - "eslint-config-prettier": "^9.0.0", + "eslint-config-prettier": "^10.0.0", "eslint-plugin-svelte": "^2.35.1", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.1.2", From f15cd29f7807872dfd12ae13dc3301794f9b94ad Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 21 Jan 2025 14:57:20 +0000 Subject: [PATCH 06/66] chore(deps): update dependency @sveltestrap/sveltestrap to v6.2.8 --- frontend/fic/package-lock.json | 6 +++--- qa/ui/package-lock.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/fic/package-lock.json b/frontend/fic/package-lock.json index 29ee0234..b964016c 100644 --- a/frontend/fic/package-lock.json +++ b/frontend/fic/package-lock.json @@ -1356,9 +1356,9 @@ } }, "node_modules/@sveltestrap/sveltestrap": { - "version": "6.2.7", - "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-6.2.7.tgz", - "integrity": "sha512-WwLLfAFUb42BGuRrf3Vbct30bQMzlEMMipN/MfxhjuLTmLQeW9muVJfPyvjtWS+mY+RjkSCoHvAp/ZobP1NLlQ==", + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-6.2.8.tgz", + "integrity": "sha512-uOcY3xsHtJ/VE0Z8A5JrJIq4kW/OOQcct5JtJW5ug646Re2pzQH08P7RjSp04UUjmR/RlC3ugVfiGss8idHG7A==", "dev": true, "license": "MIT", "dependencies": { diff --git a/qa/ui/package-lock.json b/qa/ui/package-lock.json index ebb2c130..5989b9cb 100644 --- a/qa/ui/package-lock.json +++ b/qa/ui/package-lock.json @@ -1037,9 +1037,9 @@ } }, "node_modules/@sveltestrap/sveltestrap": { - "version": "6.2.7", - "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-6.2.7.tgz", - "integrity": "sha512-WwLLfAFUb42BGuRrf3Vbct30bQMzlEMMipN/MfxhjuLTmLQeW9muVJfPyvjtWS+mY+RjkSCoHvAp/ZobP1NLlQ==", + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-6.2.8.tgz", + "integrity": "sha512-uOcY3xsHtJ/VE0Z8A5JrJIq4kW/OOQcct5JtJW5ug646Re2pzQH08P7RjSp04UUjmR/RlC3ugVfiGss8idHG7A==", "license": "MIT", "dependencies": { "@popperjs/core": "^2.11.8" From a4001759f6a8669eb84b0b8f93aa11f87aada921 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 14 Jan 2025 17:38:03 +0100 Subject: [PATCH 07/66] ui: Fix file disclaimer not showing --- .../fic/src/lib/components/ExerciceDownloads.svelte | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/fic/src/lib/components/ExerciceDownloads.svelte b/frontend/fic/src/lib/components/ExerciceDownloads.svelte index c05a45a0..14ae7e7e 100644 --- a/frontend/fic/src/lib/components/ExerciceDownloads.svelte +++ b/frontend/fic/src/lib/components/ExerciceDownloads.svelte @@ -33,9 +33,9 @@

{file.name}

- {#if file.disclamer} -
- {file.disclamer} + {#if file.disclaimer} +
+ {file.disclaimer}
{/if} @@ -61,10 +61,10 @@ {/if} From 96707e3a2935bc142a77251fdaa7816b324884b7 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 15:14:29 +0100 Subject: [PATCH 08/66] configs: Detect mkisofs --- configs/gen_metadata.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/gen_metadata.sh b/configs/gen_metadata.sh index ccb2f4fe..f51984eb 100755 --- a/configs/gen_metadata.sh +++ b/configs/gen_metadata.sh @@ -20,6 +20,8 @@ escape_newline () { sed 's/$/\\n/g' | tr -d '\n' } +which mkisofs > /dev/null 2> /dev/null || { echo "Please install genisoimage (Debian/Ubuntu) or cdrkit (Alpine)" >&2; exit 1; } + if [ $# -gt 0 ] then which jq > /dev/null 2> /dev/null || { echo "Please install jq" >&2; exit 1; } From 4ec4f47951acc7ff918a15b047a1b2205178ae92 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 15:15:48 +0100 Subject: [PATCH 09/66] fickit: keep last metadata iso when dm-crypt key change --- configs/update_imgs.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configs/update_imgs.sh b/configs/update_imgs.sh index 13866c22..fa507cee 100644 --- a/configs/update_imgs.sh +++ b/configs/update_imgs.sh @@ -21,6 +21,8 @@ OLD_KEY=$(cat /run/config/dm-crypt/key) [ "${NEW_KEY}" != "${OLD_KEY}" ] && { read -p "DM-CRYPT key changed in metadata, are you sure you want to erase it? (y/N) " V [ "$V" != "y" ] && [ "$V" != "Y" ] && while true; do + mv /boot/imgs/fickit-metadata.iso /boot/imgs/fickit-metadata.iso.skipped + cp /boot/imgs/fickit-metadata.iso.bak /boot/imgs/fickit-metadata.iso echo echo "Metadata drive not erased" echo From ffb69663b6b4be9d76c520cee76102f30e74f8e3 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 19:09:57 +0100 Subject: [PATCH 10/66] fickit: Initiate sshd config with keys on first run --- fickit-backend.yml | 10 +++++++++- fickit-frontend.yml | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/fickit-backend.yml b/fickit-backend.yml index be0ecef7..16a57215 100644 --- a/fickit-backend.yml +++ b/fickit-backend.yml @@ -153,6 +153,15 @@ onboot: mkdir: - /var/lib/fic/secrets + - name: create-ssh-keys + image: nemunaire/rsync:a3d76b2dd0a9ad73be44dc77ad765b20d96a3285 + command: ["/bin/sh", "-c", "touch /etc/ssh/sshd_config && ssh-keygen -A"] + binds: + - /var/lib/fic/ssh:/etc/ssh + runtime: + mkdir: + - /var/lib/fic/ssh + services: # - name: getty # image: linuxkit/getty:bae9e3d4861173bacf78f14a4fe44997a430d13b @@ -361,7 +370,6 @@ services: - /var/lib/fic/files - /var/lib/fic/pki/shared - /var/lib/fic/settingsdist - - /var/lib/fic/ssh - /var/lib/fic/submissions - /var/lib/fic/teams - /var/log/frontend diff --git a/fickit-frontend.yml b/fickit-frontend.yml index d2c558a2..c50b9141 100644 --- a/fickit-frontend.yml +++ b/fickit-frontend.yml @@ -136,6 +136,15 @@ onboot: - /etc/iptables/rules.v6:/etc/iptables/rules.v6:ro net: /run/netns/sshd + - name: create-ssh-keys + image: nemunaire/rsync:a3d76b2dd0a9ad73be44dc77ad765b20d96a3285 + command: ["/bin/sh", "-c", "touch /etc/ssh/sshd_config && ssh-keygen -A"] + binds: + - /var/lib/fic/ssh:/etc/ssh + runtime: + mkdir: + - /var/lib/fic/ssh + services: # - name: getty # image: linuxkit/getty:bae9e3d4861173bacf78f14a4fe44997a430d13b @@ -257,7 +266,6 @@ services: - /var/lib/fic/files - /var/lib/fic/pki - /var/lib/fic/settingsdist - - /var/lib/fic/ssh - /var/lib/fic/submissions - /var/lib/fic/teams From c28d974105b3c766daa930e9da49f7b5fed0052c Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 19:10:37 +0100 Subject: [PATCH 11/66] fickit: Update images --- fickit-prepare.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fickit-prepare.yml b/fickit-prepare.yml index 64f7b3ba..b8472acb 100644 --- a/fickit-prepare.yml +++ b/fickit-prepare.yml @@ -7,9 +7,9 @@ kernel: init: - nemunaire/mdadm:04814350d71ba9417e1f861be1685de26adf7a67 - nemunaire/syslinux:086f221f281d577d300949aa1094fb20c5cd90dc - - linuxkit/format:3c858f0cf42a2b14441bfb5c266b78f14d2b75a4 - - linuxkit/dm-crypt:19fa6affe9da03afc91694e36d72a4924c65a0e0 - - linuxkit/metadata:f35b5aafc7d19bb6a44a900840727902dad78e44 + - linuxkit/format:8f487d728959192289e0783784fc2b185eadbc82 + - linuxkit/dm-crypt:ad2a05dcffa28ef809a61aa27ba230c82f02f603 + - linuxkit/metadata:83cda7b43112b201613084ea8b7fab585b6e5549 - alpine:latest files: From 407b67f4c22402a0627b4ec0e152f8cbe8c20705 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 19:10:58 +0100 Subject: [PATCH 12/66] sync: Ensure placeholder and raw are not the same --- admin/sync/exercice_keys.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/admin/sync/exercice_keys.go b/admin/sync/exercice_keys.go index 8404df86..d4a88f3c 100644 --- a/admin/sync/exercice_keys.go +++ b/admin/sync/exercice_keys.go @@ -279,6 +279,7 @@ func buildKeyFlag(exercice *fic.Exercice, flag ExerciceFlag, flagline int, defau } type importFlag struct { + origin ExerciceFlag Line int Flag fic.Flag JustifyOf *fic.MCQ_entry @@ -392,8 +393,9 @@ func buildExerciceFlag(i Importer, exercice *fic.Exercice, flag ExerciceFlag, nl errs = multierr.Append(errs, berrs) if addedFlag != nil { ret = append(ret, importFlag{ - Line: nline + 1, - Flag: addedFlag, + origin: flag, + Line: nline + 1, + Flag: addedFlag, }) } } else if flag.Type == "key" || strings.HasPrefix(flag.Type, "number") || flag.Type == "text" || flag.Type == "ucq" || flag.Type == "radio" || flag.Type == "vector" { @@ -401,6 +403,7 @@ func buildExerciceFlag(i Importer, exercice *fic.Exercice, flag ExerciceFlag, nl errs = multierr.Append(errs, berrs) if addedFlag != nil { ret = append(ret, importFlag{ + origin: flag, Line: nline + 1, Flag: *addedFlag, Choices: choices, @@ -462,6 +465,7 @@ func buildExerciceFlag(i Importer, exercice *fic.Exercice, flag ExerciceFlag, nl errs = multierr.Append(errs, berrs) if addedFlag != nil { ret = append(ret, importFlag{ + origin: flag, Line: nline + 1, Flag: *addedFlag, JustifyOf: entry, @@ -479,8 +483,9 @@ func buildExerciceFlag(i Importer, exercice *fic.Exercice, flag ExerciceFlag, nl } ret = append([]importFlag{importFlag{ - Line: nline + 1, - Flag: &addedFlag, + origin: flag, + Line: nline + 1, + Flag: &addedFlag, }}, ret...) } return @@ -570,6 +575,10 @@ func CheckExerciceFlags(i Importer, exercice *fic.Exercice, files []string, exce if int64(fk.ChoicesCost) >= exercice.Gain { errs = multierr.Append(errs, NewFlagError(exercice, nil, flag.Line, fmt.Errorf("flag's choice_cost is higher than exercice gain"))) } + + if raw, ok := flag.origin.Raw.(string); ok && raw == fk.Placeholder { + errs = multierr.Append(errs, NewFlagError(exercice, nil, flag.Line, fmt.Errorf("flag's placeholder and raw are identical"))) + } } // Check dependency loop From 24686a6a24bda8d194aa064ed7aee3b961ada939 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 23:47:35 +0100 Subject: [PATCH 13/66] admin: Fix check file on disk for compressed files --- admin/static/views/file-list.html | 8 ++++---- libfic/file.go | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/admin/static/views/file-list.html b/admin/static/views/file-list.html index cd0d36a7..83a3242c 100644 --- a/admin/static/views/file-list.html +++ b/admin/static/views/file-list.html @@ -30,13 +30,13 @@
- + {{ file[field] }} - - {{ file.checksum | bto16 }} -
{{ file.checksum_shown | bto16 }}
+ +
{{ file.checksum | bto16 }}
+
{{ file.checksum_shown | bto16 }}
diff --git a/libfic/file.go b/libfic/file.go index 4e5bf37f..d39bb6b0 100644 --- a/libfic/file.go +++ b/libfic/file.go @@ -392,7 +392,12 @@ func (f *EFile) GetDepends() ([]Flag, error) { // CheckFileOnDisk recalculates the hash of the file on disk. func (f *EFile) CheckFileOnDisk() error { - if _, size, err := checkFileHash(path.Join(FilesDir, f.Path), f.Checksum); err != nil { + firstChecksum := f.Checksum + if len(f.ChecksumShown) > 0 { + firstChecksum = f.ChecksumShown + } + + if _, size, err := checkFileHash(path.Join(FilesDir, f.Path), firstChecksum); size > 0 && err != nil { return err } else if size == 0 { if _, _, err := checkFileHash(path.Join(FilesDir, f.Path+".gz"), f.Checksum); err != nil { @@ -400,9 +405,17 @@ func (f *EFile) CheckFileOnDisk() error { } else { return nil } - } else { - return nil + } else if err != nil { + return err } + + if _, err := os.Stat(path.Join(FilesDir, f.Path+".gz")); !os.IsNotExist(err) { + if _, _, err = checkFileHash(path.Join(FilesDir, f.Path+".gz"), f.Checksum); err != nil { + return err + } + } + + return nil } // GunzipFileOnDisk gunzip a compressed file. From 57c3cd8fd65a001024032a89967f28b82bd32ad6 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 23:48:14 +0100 Subject: [PATCH 14/66] admin: Fix mcq entry update --- libfic/mcq.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libfic/mcq.go b/libfic/mcq.go index 82315479..04bf3fd9 100644 --- a/libfic/mcq.go +++ b/libfic/mcq.go @@ -207,7 +207,7 @@ func (m *MCQ) AddEntry(e *MCQ_entry) (*MCQ_entry, error) { // Update applies modifications back to the database. func (n *MCQ_entry) Update() (int64, error) { - if res, err := DBExec("UPDATE mcq_entries SET label = ?, response = ? WHERE id_mcq = ?", n.Label, n.Response, n.Id); err != nil { + if res, err := DBExec("UPDATE mcq_entries SET label = ?, response = ? WHERE id_mcq_entry = ?", n.Label, n.Response, n.Id); err != nil { return 0, err } else if nb, err := res.RowsAffected(); err != nil { return 0, err From ad7489e5584d5f3bf952ff8abd25dcb79fc3a7dd Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 24 Jan 2025 23:49:00 +0100 Subject: [PATCH 15/66] admin: Start compute flag stats --- admin/api/exercice.go | 29 ++++++++++++++++++++++++++ admin/static/js/app.js | 9 ++++++++ admin/static/views/exercice-flags.html | 11 +++++++++- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/admin/api/exercice.go b/admin/api/exercice.go index cfdb450d..c4fdaed9 100644 --- a/admin/api/exercice.go +++ b/admin/api/exercice.go @@ -62,6 +62,7 @@ func declareExercicesRoutes(router *gin.RouterGroup) { apiFlagsRoutes.POST("/try", tryExerciceFlag) apiFlagsRoutes.DELETE("/", deleteExerciceFlag) apiFlagsRoutes.GET("/dependancies", showExerciceFlagDeps) + apiFlagsRoutes.GET("/statistics", showExerciceFlagStats) apiFlagsRoutes.GET("/choices/", listFlagChoices) apiFlagsChoicesRoutes := apiExercicesRoutes.Group("/choices/:cid") apiFlagsChoicesRoutes.Use(FlagChoiceHandler) @@ -852,6 +853,34 @@ func showExerciceFlagDeps(c *gin.Context) { c.JSON(http.StatusOK, deps) } +func showExerciceFlagStats(c *gin.Context) { + exercice := c.MustGet("exercice").(*fic.Exercice) + flag := c.MustGet("flag-key").(*fic.FlagKey) + + history, err := exercice.GetHistory() + if err != nil { + log.Println("Unable to getExerciceHistory:", err.Error()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs when retrieving exercice history"}) + return + } + + var completed, tries, nteams int64 + + for _, hline := range history { + if hline["kind"].(string) == "flag_found" { + if *hline["secondary"].(*int) == flag.Id { + completed += 1 + } + } + } + + c.JSON(http.StatusOK, gin.H{ + "completed": completed, + "tries": tries, + "nteams": nteams, + }) +} + func tryExerciceFlag(c *gin.Context) { flag := c.MustGet("flag-key").(*fic.FlagKey) diff --git a/admin/static/js/app.js b/admin/static/js/app.js index 0753bbb0..2fa150f4 100644 --- a/admin/static/js/app.js +++ b/admin/static/js/app.js @@ -348,6 +348,9 @@ angular.module("FICApp") .factory("ExerciceFlagDeps", function ($resource) { return $resource("api/exercices/:exerciceId/flags/:flagId/dependancies", { exerciceId: '@idExercice', flagId: '@id' }) }) + .factory("ExerciceFlagStats", function ($resource) { + return $resource("api/exercices/:exerciceId/flags/:flagId/statistics", { exerciceId: '@idExercice', flagId: '@id' }) + }) .factory("ExerciceMCQFlag", function ($resource) { return $resource("api/exercices/:exerciceId/quiz/:mcqId", { exerciceId: '@idExercice', mcqId: '@id' }, { update: { method: 'PUT' } @@ -2345,6 +2348,12 @@ angular.module("FICApp") } }) + .controller("ExerciceFlagStatsController", function ($scope, $routeParams, ExerciceFlagStats) { + $scope.init = function (flag) { + $scope.stats = ExerciceFlagStats.get({ exerciceId: $routeParams.exerciceId, flagId: flag.id }); + } + }) + .controller("ExerciceMCQFlagsController", function ($scope, ExerciceMCQFlag, $routeParams, $rootScope) { $scope.quiz = ExerciceMCQFlag.query({ exerciceId: $routeParams.exerciceId }); diff --git a/admin/static/views/exercice-flags.html b/admin/static/views/exercice-flags.html index 3caf3add..b23556ca 100644 --- a/admin/static/views/exercice-flags.html +++ b/admin/static/views/exercice-flags.html @@ -73,12 +73,21 @@
- Dépendances : + Dépendances :
sans
+
+
+ Statistiques +
    +
  • Validés : {{ stats["completed"] }}
  • +
  • Tentés : {{ stats["tries"] }}
  • +
  • Équipes : {{ stats["nteams"] }}
  • +
+