#!/bin/bash BASEURL="http://localhost:8081/admin" BASEURI="https://owncloud.srs.epita.fr/remote.php/webdav/FIC 2017" BASEFILE="/mnt/fic/" CLOUDPASS=fic:'f>t\nV33R|(+?$i*' new_theme() { NAME=`echo $1 | sed 's/"/\\\\"/g'` AUTHORS=`echo $2 | sed 's/"/\\\\"/g'` curl -f -s -d "{\"name\": \"$NAME\", \"authors\": \"$AUTHORS\"}" "${BASEURL}/api/themes/" | grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+" } new_exercice() { THEME="$1" TITLE=`echo "$2" | sed 's/"/\\\\"/g'` STATEMENT=`echo "$3" | sed 's/"/\\\\"/g' | sed ':a;N;$!ba;s/\n/
/g'` HINT=`echo "$4" | sed 's/"/\\\\"/g' | sed ':a;N;$!ba;s/\n/
/g'` DEPEND="$5" GAIN="$6" VIDEO="$7" curl -f -s -d "{\"title\": \"$TITLE\", \"statement\": \"$STATEMENT\", \"hint\": \"$HINT\", \"depend\": $DEPEND, \"gain\": $GAIN, \"videoURI\": \"$VIDEO\"}" "${BASEURL}/api/themes/$THEME" | 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" | grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+" } new_key() { THEME="$1" EXERCICE="$2" NAME="$3" KEY=`echo $4 | sed 's/"/\\\\"/g' | sed 's#\\\\#\\\\\\\\#g'` 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' } # Theme get_dir "" | while read f; do basename "$f"; done | while read THEME_URI do THM_BASEURI="/${THEME_URI}/" THEME_NAME=$(echo "${THEME_URI#*-}" | unhtmlentities) THEME_AUTHORS=$(get_file "${THM_BASEURI}/AUTHORS.txt" | sed 's/$/,/' | xargs) THEME_ID=`new_theme "$THEME_NAME" "$THEME_AUTHORS"` if [ -z "$THEME_ID" ]; then echo -e "\e[31;01m!!! An error occured during theme add\e[00m" continue else echo -e "\e[33m>>> New theme created:\e[00m $THEME_ID - $THEME_NAME" fi LAST=null EXO_NUM=0 get_dir "${THM_BASEURI}" | sed 1d | while read f; do basename "$f"; done | while read EXO_URI do case ${EXO_URI} in [0-9]-*) ;; *) continue;; esac #EXO_NUM=$((EXO_NUM + 1)) EXO_NUM=${EXO_URI%-*} EXO_NAME=$(echo "${EXO_URI#*-}" | unhtmlentities) echo echo -e "\e[36m--- Filling exercice ${EXO_NUM} in theme ${THEME_NAME}\e[00m" EXO_BASEURI="${EXO_URI}/" 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) if [ "${LAST}" = "null" ]; then echo ">>> Assuming this exercice has no dependency" else echo ">>> Assuming this exercice depends on the last entry (id=${LAST})" fi EXO_GAIN=$((3 * (2 ** $EXO_NUM) - 1)) echo ">>> Using default gain: ${EXO_GAIN} points" EXO_SCENARIO=$(get_file "${THM_BASEURI}${EXO_BASEURI}/scenario.txt") EXO_HINT=$(get_file "${THM_BASEURI}${EXO_BASEURI}/hint.txt") EXO_ID=`new_exercice "${THEME_ID}" "${EXO_NAME}" "${EXO_SCENARIO}" "${EXO_HINT}" "${LAST}" "${EXO_GAIN}" "/resolution${THM_BASEURI}${EXO_BASEURI}resolution/${EXO_VIDEO}"` if [ -z "$EXO_ID" ]; then echo -e "\e[31;01m!!! An error occured during exercice add.\e[00m" continue else echo -e "\e[32m>>> New exercice created:\e[00m $EXO_ID - $EXO_NAME" fi # Keys get_file "${THM_BASEURI}${EXO_BASEURI}/flags.txt" | while read KEYLINE do KEY_NAME=$(echo "$KEYLINE" | cut -d : -f 1) KEY_RAW=$(echo "$KEYLINE" | cut -d : -f 2-) if [ -z "${KEY_NAME}" ]; then KEY_NAME="Flag" fi KEY_ID=`new_key "${THEME_ID}" "${EXO_ID}" "${KEY_NAME}" "${KEY_RAW}"` if [ -z "$KEY_ID" ]; then echo -e "\e[31;01m!!! An error occured during key import!\e[00m (name=${KEYNAME};raw=${KEY_RAW})" else echo -e "\e[32m>>> New key added:\e[00m $KEY_ID - $KEY_NAME" fi done # Files get_dir "${THM_BASEURI}${EXO_BASEURI}files/" | grep -v DIGESTS.txt | while read f; do basename "$f"; done | while read FILE_URI 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}"` 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" fi done LAST=$EXO_ID done echo done