server/admin/fill_exercices.sh

179 lines
5.5 KiB
Bash
Raw Normal View History

#!/bin/bash
2016-01-21 17:28:02 +00:00
BASEURL="http://localhost:8081/admin"
BASEURI="https://owncloud.srs.epita.fr/remote.php/webdav/FIC 2017"
BASEFILE="/mnt/fic/"
2016-01-21 22:05:36 +00:00
CLOUDPASS=fic:'f>t\nV33R|(+?$i*'
2016-01-21 17:28:02 +00:00
new_theme() {
2016-01-21 20:45:25 +00:00
NAME=`echo $1 | sed 's/"/\\\\"/g'`
2016-01-23 11:21:02 +00:00
AUTHORS=`echo $2 | sed 's/"/\\\\"/g'`
curl -f -s -d "{\"name\": \"$NAME\", \"authors\": \"$AUTHORS\"}" "${BASEURL}/api/themes/" |
2016-01-21 17:28:02 +00:00
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
new_exercice() {
THEME="$1"
2016-01-21 20:45:25 +00:00
TITLE=`echo "$2" | sed 's/"/\\\\"/g'`
2016-01-21 22:05:36 +00:00
STATEMENT=`echo "$3" | sed 's/"/\\\\"/g' | sed ':a;N;$!ba;s/\n/<br>/g'`
2016-12-04 18:15:39 +00:00
DEPEND="$4"
GAIN="$5"
VIDEO="$6"
2016-01-21 17:28:02 +00:00
2016-12-04 18:15:39 +00:00
curl -f -s -d "{\"title\": \"$TITLE\", \"statement\": \"$STATEMENT\", \"depend\": $DEPEND, \"gain\": $GAIN, \"videoURI\": \"$VIDEO\"}" "${BASEURL}/api/themes/$THEME" |
2016-01-21 17:28:02 +00:00
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
new_file() {
THEME="$1"
EXERCICE="$2"
URI="$3"
# curl -f -s -d "{\"URI\": \"${BASEFILE}${URI}\"}" "${BASEURL}/api/themes/$THEME/$EXERCICE/files" |
curl -f -s -d "{\"path\": \"${BASEFILE}${URI}\"}" "${BASEURL}/api/themes/$THEME/$EXERCICE/files" |
2016-01-21 17:28:02 +00:00
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
2016-12-04 18:15:39 +00:00
new_hint() {
THEME="$1"
EXERCICE="$2"
TITLE=`echo "$3" | sed 's/"/\\\\"/g'`
CONTENT=`echo "$4" | sed 's/"/\\\\"/g' | sed ':a;N;$!ba;s/\n/<br>/g'`
COST="$5"
curl -f -s -d "{\"title\": \"$TITLE\", \"content\": \"$CONTENT\", \"cost\": \"$COST\"}" "${BASEURL}/api/themes/$THEME/$EXERCICE/hints" |
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
2016-01-21 17:28:02 +00:00
new_key() {
THEME="$1"
EXERCICE="$2"
NAME="$3"
2016-01-22 20:23:10 +00:00
KEY=`echo $4 | sed 's/"/\\\\"/g' | sed 's#\\\\#\\\\\\\\#g'`
2016-01-21 17:28:02 +00:00
curl -f -s -d "{\"name\": \"$NAME\", \"key\": \"$KEY\"}" "${BASEURL}/api/themes/$THEME/$EXERCICE/keys" |
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
get_dir_from_cloud() {
curl -f -s -X PROPFIND -u "${CLOUDPASS}" "${BASEURI}$1" | xmllint --format - | grep 'd:href' | sed -E 's/^.*>(.*)<.*$/\1/'
}
get_dir() {
ls "${BASEFILE}$1"
}
#alias get_dir=get_dir_from_cloud
get_file_from_cloud() {
curl -f -s -u "${CLOUDPASS}" "${BASEURI}$1" | tr -d '\r'
}
get_file() {
cat "${BASEFILE}$1" | tr -d '\r'
}
#alias get_file=get_file_from_cloud
unhtmlentities() {
cat | sed -E 's/%20/ /g' | sed -E "s/%27/'/g" | sed -E 's/%c3%a9/é/g' | sed -E 's/%c3%a8/è/g'
}
2016-01-21 17:28:02 +00:00
# Theme
get_dir "" | while read f; do basename "$f"; done | while read THEME_URI
2016-01-21 17:28:02 +00:00
do
2016-01-23 11:21:02 +00:00
THM_BASEURI="/${THEME_URI}/"
THEME_NAME=$(echo "${THEME_URI#*-}" | unhtmlentities)
THEME_AUTHORS=$(get_file "${THM_BASEURI}/AUTHORS.txt" | sed 's/$/, /' | tr -d '\n' | sed 's/, $//')
2016-01-23 11:21:02 +00:00
THEME_ID=`new_theme "$THEME_NAME" "$THEME_AUTHORS"`
2016-01-21 20:45:25 +00:00
if [ -z "$THEME_ID" ]; then
echo -e "\e[31;01m!!! An error occured during theme add\e[00m"
continue
2016-01-21 20:45:25 +00:00
else
2016-01-22 20:23:10 +00:00
echo -e "\e[33m>>> New theme created:\e[00m $THEME_ID - $THEME_NAME"
2016-01-21 20:45:25 +00:00
fi
2016-01-21 17:28:02 +00:00
LAST=null
2016-01-22 20:23:10 +00:00
EXO_NUM=0
get_dir "${THM_BASEURI}" | sed 1d | while read f; do basename "$f"; done | while read EXO_URI
2016-01-21 17:28:02 +00:00
do
case ${EXO_URI} in
[0-9]-*)
;;
*)
continue;;
esac
#EXO_NUM=$((EXO_NUM + 1))
EXO_NUM=${EXO_URI%-*}
EXO_NAME=$(echo "${EXO_URI#*-}" | unhtmlentities)
2016-01-22 20:23:10 +00:00
echo
echo -e "\e[36m--- Filling exercice ${EXO_NUM} in theme ${THEME_NAME}\e[00m"
2016-01-21 22:05:36 +00:00
EXO_BASEURI="${EXO_URI}/"
2016-01-21 22:05:36 +00:00
EXO_VIDEO=$(get_dir "${THM_BASEURI}${EXO_BASEURI}/resolution/" | grep -E "\.(mov|mkv|mp4|avi|flv|ogv|webm)$" | while read f; do basename $f; done | tail -1)
2016-01-21 22:05:36 +00:00
if [ "${LAST}" = "null" ]; then
echo ">>> Assuming this exercice has no dependency"
else
echo ">>> Assuming this exercice depends on the last entry (id=${LAST})"
fi
2016-01-22 20:23:10 +00:00
EXO_GAIN=$((3 * (2 ** $EXO_NUM) - 1))
2016-01-21 22:05:36 +00:00
echo ">>> Using default gain: ${EXO_GAIN} points"
EXO_SCENARIO=$(get_file "${THM_BASEURI}${EXO_BASEURI}/scenario.txt")
2016-01-21 17:28:02 +00:00
2016-12-04 18:15:39 +00:00
EXO_ID=`new_exercice "${THEME_ID}" "${EXO_NAME}" "${EXO_SCENARIO}" "${LAST}" "${EXO_GAIN}" "/resolution${THM_BASEURI}${EXO_BASEURI}resolution/${EXO_VIDEO}"`
2016-01-21 20:45:25 +00:00
if [ -z "$EXO_ID" ]; then
echo -e "\e[31;01m!!! An error occured during exercice add.\e[00m"
continue
else
2016-01-22 20:23:10 +00:00
echo -e "\e[32m>>> New exercice created:\e[00m $EXO_ID - $EXO_NAME"
2016-01-21 20:45:25 +00:00
fi
2016-01-21 17:28:02 +00:00
# Keys
get_file "${THM_BASEURI}${EXO_BASEURI}/flags.txt" | while read KEYLINE
2016-01-21 17:28:02 +00:00
do
2016-01-22 20:23:10 +00:00
KEY_NAME=$(echo "$KEYLINE" | cut -d : -f 1)
KEY_RAW=$(echo "$KEYLINE" | cut -d : -f 2-)
2016-01-21 17:28:02 +00:00
2016-01-22 20:23:10 +00:00
if [ -z "${KEY_NAME}" ]; then
KEY_NAME="Flag"
fi
2016-01-21 17:28:02 +00:00
2016-01-22 20:23:10 +00:00
KEY_ID=`new_key "${THEME_ID}" "${EXO_ID}" "${KEY_NAME}" "${KEY_RAW}"`
2016-01-21 20:45:25 +00:00
if [ -z "$KEY_ID" ]; then
2016-01-22 20:23:10 +00:00
echo -e "\e[31;01m!!! An error occured during key import!\e[00m (name=${KEYNAME};raw=${KEY_RAW})"
2016-01-21 20:45:25 +00:00
else
2016-01-22 20:23:10 +00:00
echo -e "\e[32m>>> New key added:\e[00m $KEY_ID - $KEY_NAME"
fi
2016-01-21 17:28:02 +00:00
done
2016-12-04 18:15:39 +00:00
# Hints
EXO_HINT=$(get_file "${THM_BASEURI}${EXO_BASEURI}/hint.txt")
HINT_ID=`new_hint "${THEME_ID}" "${EXO_ID}" "Astuce #1" "${EXO_HINT}" "1"`
if [ -z "$HINT_ID" ]; then
echo -e "\e[31;01m!!! An error occured during hint import!\e[00m (title=Astuce #1;content=${EXO_HINT};cost=1)"
else
echo -e "\e[32m>>> New hint added:\e[00m $HINT_ID - Astuce #1"
fi
2016-01-21 17:28:02 +00:00
# Files
get_dir "${THM_BASEURI}${EXO_BASEURI}files/" | grep -v DIGESTS.txt | while read f; do basename "$f"; done | while read FILE_URI
2016-01-21 17:28:02 +00:00
do
echo "Import file ${THM_BASEURI}${EXO_BASEURI}files/${FILE_URI}"
FILE_ID=`new_file "${THEME_ID}" "${EXO_ID}" "${THM_BASEURI}${EXO_BASEURI}files/${FILE_URI}"`
2016-01-22 20:23:10 +00:00
if [ -z "$FILE_ID" ]; then
echo -e "\e[31;01m!!! An error occured during file import! Please check path.\e[00m"
else
echo -e "\e[32m>>> New file added:\e[00m $FILE_ID - $FILE_URI"
2016-01-21 20:45:25 +00:00
fi
2016-01-21 17:28:02 +00:00
done
LAST=$EXO_ID
done
2016-01-21 20:45:25 +00:00
echo
2016-01-21 17:28:02 +00:00
done