From ffbc11c74cc9772d46474862dc72fca64653f06d Mon Sep 17 00:00:00 2001 From: Echolib Date: Fri, 3 Sep 2021 08:39:28 +0200 Subject: [PATCH] Ajout nouveaux modules CALCEND et LEMO --- captcha/experimental.sh | 74 ++++++++++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 12 deletions(-) diff --git a/captcha/experimental.sh b/captcha/experimental.sh index daebc47..8fda410 100755 --- a/captcha/experimental.sh +++ b/captcha/experimental.sh @@ -34,7 +34,7 @@ DIGIT=(zéro un deux trois quatre cinq six sept huit neuf dix) # **************************************************************************** -# Loops 10 times (should be enough) to check if a TARGET number is in INPUT +# Generate a number that is not in INPUT. Loop 10 times (should be enough) GENERATE__NOTIN() { for i in {1..10} do @@ -61,8 +61,8 @@ TARGET=`echo "$INPUT" | head -c $PLACE | tail -c 1` GENERATE__NOTIN NAME+="-$FALSENBR-$TARGET" NEWINPUT=${INPUT//$TARGET/$FALSENBR} +INSTRUCTIONS1="Recopiez ce nombre" INSTRUCTIONS2="en changeant les ${DIGITS[FALSENBR]} en ${DIGITS[TARGET]}" -INSTRUCTIONS1="Recopiez" } @@ -81,14 +81,14 @@ if (( $RFL == 1 ));then ADDNBR="${INPUT:0:1}" NAME+="_FIRST" NEWINPUT=${NEWINPUT:0:$LENINPUT-1} # Do not show first INPUT NBR - INSTRUCTIONS1="Écrivez le chiffre ${DIGIT[$ADDNBR]} puis" - INSTRUCTIONS2="Recopiez de DROITE à GAUCHE ←" + INSTRUCTIONS1="Écrivez le chiffre ${DIGIT[$ADDNBR]}" + INSTRUCTIONS2="et recopiez de DROITE à GAUCHE ←" else ADDNBR="${INPUT:$LENINPUT-1:1}" NAME+="_LAST" NEWINPUT=${NEWINPUT:1:$LENINPUT-1} # Do not show last INPUT NBR INSTRUCTIONS1="Recopiez de DROITE à GAUCHE ←" - INSTRUCTIONS2="Terminez par le chiffre ${DIGIT[$ADDNBR]}" + INSTRUCTIONS2="et terminez par le chiffre ${DIGIT[$ADDNBR]}" fi NAME+="-$ADDNBR" } @@ -110,7 +110,7 @@ do NEWINPUT="$NEWINPUT${INPUT:$i:1}" done NAME+="-$FALSENBR" -INSTRUCTIONS1="Recopiez sans les ${DIGITS[FALSENBR]}" +INSTRUCTIONS1="Recopiez ce nombre sans les ${DIGITS[FALSENBR]}" } @@ -124,25 +124,74 @@ RC=`seq 1 2 | sort -R | head -n 1` # 1 = - | 2 = + if (( $RC == 1 ));then FALSENBR=`seq $TARGET 10 | sort -R | head -n 1` RESUME=$(( FALSENBR - TARGET )) - INSTRUCTIONS1="Calculez: $FALSENBR moins $RESUME. Copiez..." + INSTRUCTIONS1="Calculez: ${DIGIT[FALSENBR]} moins ${DIGIT[RESUME]} et copiez" NAME="CALCULM-$FALSENBR-$RESUME" else FALSENBR=`seq 1 4 | sort -R | head -n 1` if (( $FALSENBR <= $TARGET ));then RESULT=$(( TARGET + FALSENBR )) RESUME=$(( TARGET - FALSENBR )) - INSTRUCTIONS1="Calculez: ${DIGIT[FALSENBR]} + ${DIGIT[RESUME]}. Copiez..." + INSTRUCTIONS1="Calculez: ${DIGIT[FALSENBR]} plus ${DIGIT[RESUME]} et copiez" NAME="CALCULP-$FALSENBR-$RESUME" else RESULT=$(( FALSENBR - TARGET )) RESUME=$(( TARGET - RESULT )) - INSTRUCTIONS1="Calculez: ${DIGIT[RESULT]} + ${DIGIT[RESUME]}. Copiez..." + INSTRUCTIONS1="Calculez: ${DIGIT[RESULT]} plus ${DIGIT[RESUME]} et copiez" NAME="CALCULP-$RESULT-$RESUME" fi fi -INSTRUCTIONS2="...en remplaçant chaque X par la somme" +INSTRUCTIONS2="en remplaçant chaque X par la somme" } +# Sum 2 LAST numbers. Hide LAST or BEFORE LAST +CALCEND() { +END1=${INPUT:$LENINPUT-2:1} +END2=${INPUT:$LENINPUT-1:1} +ENDS=$(( END1 + END2 )) +REND=`seq 1 2 | sort -R | head -n 1` +if (( $REND == 1 ));then + # Hide LAST + NEWINPUT=${INPUT:0:LENINPUT-1}X + NAME="END-${END1}X" +else + # Hide BEFORE LAST + NEWINPUT=${INPUT:0:LENINPUT-2}X$END2 + NAME="END-X$END2" +fi +INSTRUCTIONS1="La somme des 2 derniers chiffres est $ENDS" +INSTRUCTIONS2="Copiez en remplaçant X par sa valeur" +} + +# Replace 2 X (smaller > bigger | bigger > smaller) +LEMO() { +MAXNBR=${INPUT:0:1} +MINNBR=${INPUT:0:1} +for i in `seq 1 $((LENINPUT-1))` +do + (( ${INPUT:$i:1} > $MAXNBR )) \ + && MAXNBR=${INPUT:$i:1} + (( ${INPUT:$i:1} < $MINNBR )) \ + && MINNBR=${INPUT:$i:1} +done + +for i in `seq 0 $((LENINPUT-1))` +do + if (( ${INPUT:$i:1} == $MINNBR ));then + INSTRUCTIONS1="Remplacez les X par ${DIGIT[MAXNBR]} et ${DIGIT[MINNBR]}" + INSTRUCTIONS2="! le plus PETIT en premier" + NAME="LEMO-$MINNBR-$MAXNBR" + break + elif (( ${INPUT:$i:1} == $MAXNBR ));then + INSTRUCTIONS1="Remplacez les X par ${DIGIT[MINNBR]} et ${DIGIT[MAXNBR]}" + INSTRUCTIONS2="! Le plus GRAND en premier" + NAME="LEMO-$MAXNBR-$MINNBR" + break + fi +done + +NEWINPUT=`echo $INPUT | sed "s/$MINNBR/X/"` +NEWINPUT=`echo $NEWINPUT | sed "s/$MAXNBR/X/"` +} # **************************************************************************** # @@ -150,12 +199,13 @@ INSTRUCTIONS2="...en remplaçant chaque X par la somme" # # **************************************************************************** -MODULES=(CALCUL NOTIN REPLACE REVERSE) +MODULES=(CALCUL CALCEND LEMO NOTIN REPLACE REVERSE) RMODULE=`seq 0 $(( ${#MODULES[@]} - 1)) | sort -R | head -n 1` eval "${MODULES[RMODULE]}" TEXT="$NEWINPUT" -CHAPRILURI="/var/lib/ejabberd/chapril_captchas_experimental/$(date "+%Y-%m-%d-%H%M%S")_${NAME}_${INPUT}.png" +DATE="$(date "+%Y-%m-%d-%H%M%S")" +CHAPRILURI=/var/lib/ejabberd/chapril_captchas/${DATE}_${NAME}_${INPUT}.png convert -size 300x70 xc:none -pointsize 20 \ \( -clone 0 -fill black \