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/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
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; }
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
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
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:
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}
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.
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