diff --git a/captcha/captcha.sh b/captcha/captcha.sh index 0d56b1e..5e8da07 100755 --- a/captcha/captcha.sh +++ b/captcha/captcha.sh @@ -15,7 +15,9 @@ INPUT=$1 -TRANSFORMATIONS=(DECOUPE.A DECOUPE.B INTRUS.A INTRUS.B SOMME.A SOMME.B) +TRANSFORMATIONS=(INTRUS SOMME) + +FILENAME="/var/tmp/captcha/$(date "+%Y-%m-%d-%H%M").png" if test -n ${BASH_VERSION:-''} ; then get_random () @@ -31,23 +33,22 @@ else } fi -DECOUPE.A() +DECOUPE() { LENGTH=${#INPUT} MID=$((LENGTH / 2)) - echo "Tapez ${INPUT:0:$MID}\n suivi de ${INPUT:$MID:$MID}" -} - -DECOUPE.B() -{ - LENGTH=${#INPUT} - MID=$((LENGTH / 2)) + get_random + R=$(($R % 2)) - echo "Saisissez ${INPUT:0:$MID}\n puis ${INPUT:$MID:$MID}" + if [[ $R -eq 1 ]]; then + echo "Tapez ${INPUT:0:$MID}\n suivi de ${INPUT:$MID:$MID}" + else + echo "Saisissez ${INPUT:0:$MID}\n puis ${INPUT:$MID:$MID}" + fi } -INTRUS.A() +INTRUS() { LENGTH=${#INPUT} NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ') @@ -81,80 +82,41 @@ INTRUS.A() fi done - echo "Tapez $NEWINPUT en\n supprimant les $INTRUS" -} - -INTRUS.B() -{ - LENGTH=${#INPUT} - NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ') - SORTED_UNIQ_NUM=$(echo "${NUMBERS[@]}" | sort -u | tr '\n' ' ') - INTRUS=-1 + get_random + R=$(($R % 100)) - for i in 1 2 3 4 5 6 7 8 9 - do - if [[ ! " ${SORTED_UNIQ_NUM[@]} " =~ " ${i} " ]]; then - INTRUS=$i - break - fi - done - - # Worst case - if [[ $INTRUS -eq "-1" ]] - then - echo Tapez "$INPUT \n sans changement" - return - fi - - for num in ${NUMBERS[@]} - do - get_random - R=$(($R % 100)) - - if [[ $R -lt 60 ]]; then - NEWINPUT=${NEWINPUT}${num}${INTRUS} - else - NEWINPUT=${NEWINPUT}${num} - fi - done - - echo "Saisissez $NEWINPUT en\n enlevant les $INTRUS" -} - -SOMME.A() -{ - if [[ $(($INPUT % 2)) -eq 0 ]]; then - A=$(($INPUT / 2)) - B=$A + if [[ $R -lt 50 ]]; then + echo "Tapez $NEWINPUT en\n supprimant les $INTRUS" else - A=$(($INPUT / 2)) - B=$(($A+1)) + echo "Saisissez $NEWINPUT en\n enlevant les $INTRUS" + fi +} + +SOMME() +{ + get_random + RA=$(($RA % 100)) + + if [[ $(($INPUT % 2)) -eq 0 ]]; then + A=$(($INPUT - $RA)) + B=$RA + else + B=$(($INPUT + $RA)) + A=$RA fi get_random R=$(($R % 100)) - A=$(($A - $R)) - B=$(($B + $R)) - echo "Tapez le résultat\n de $A + $B" -} - -SOMME.B() -{ - if [[ $(($INPUT % 2)) -eq 0 ]]; then - A=$(($INPUT / 2)) - B=$A + if [[ $R -lt 25 ]]; then + echo "Tapez le résultat\n de $A + $B" + elif [[ $R -lt 50 ]]; then + echo "Sommez\n $A et $B" + elif [[ $R -lt 75 ]]; then + echo "Additionnez\n $A et $B" else - A=$(($INPUT / 2)) - B=$(($A+1)) + echo "Saisissez le résultat\n de $A + $B" fi - - get_random - R=$(($R % 100)) - A=$(($A - $R)) - B=$(($B + $R)) - - echo "Saisissez le résultat\n de $A + $B" } get_random @@ -164,6 +126,15 @@ RAND_ANGLE=$(($R % 3)) get_random RAND_INDEX=$(($R % ${#TRANSFORMATIONS[@]})) +convert -size 300x60 xc:none -pointsize 20 \ + \( -clone 0 -fill black \ + -stroke black -strokewidth 1 \ + -annotate "${RAND_ANGLE}x${RAND_ITALIC}+0+0" "\n $(${TRANSFORMATIONS[$RAND_INDEX]})" \ + -roll +$ROLL_X+0 \ + -wave "$WAVE1_AMPLITUDE"x"$WAVE1_LENGTH" \ + -roll -$ROLL_X+0 \) \ + -flatten -crop 300x60 +repage -quality 500 -depth 11 png:$FILENAME + convert -size 300x60 xc:none -pointsize 20 \ \( -clone 0 -fill black \ -stroke black -strokewidth 1 \ diff --git a/captcha/experimental.sh b/captcha/experimental.sh index 0d56b1e..5e8da07 100755 --- a/captcha/experimental.sh +++ b/captcha/experimental.sh @@ -15,7 +15,9 @@ INPUT=$1 -TRANSFORMATIONS=(DECOUPE.A DECOUPE.B INTRUS.A INTRUS.B SOMME.A SOMME.B) +TRANSFORMATIONS=(INTRUS SOMME) + +FILENAME="/var/tmp/captcha/$(date "+%Y-%m-%d-%H%M").png" if test -n ${BASH_VERSION:-''} ; then get_random () @@ -31,23 +33,22 @@ else } fi -DECOUPE.A() +DECOUPE() { LENGTH=${#INPUT} MID=$((LENGTH / 2)) - echo "Tapez ${INPUT:0:$MID}\n suivi de ${INPUT:$MID:$MID}" -} - -DECOUPE.B() -{ - LENGTH=${#INPUT} - MID=$((LENGTH / 2)) + get_random + R=$(($R % 2)) - echo "Saisissez ${INPUT:0:$MID}\n puis ${INPUT:$MID:$MID}" + if [[ $R -eq 1 ]]; then + echo "Tapez ${INPUT:0:$MID}\n suivi de ${INPUT:$MID:$MID}" + else + echo "Saisissez ${INPUT:0:$MID}\n puis ${INPUT:$MID:$MID}" + fi } -INTRUS.A() +INTRUS() { LENGTH=${#INPUT} NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ') @@ -81,80 +82,41 @@ INTRUS.A() fi done - echo "Tapez $NEWINPUT en\n supprimant les $INTRUS" -} - -INTRUS.B() -{ - LENGTH=${#INPUT} - NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ') - SORTED_UNIQ_NUM=$(echo "${NUMBERS[@]}" | sort -u | tr '\n' ' ') - INTRUS=-1 + get_random + R=$(($R % 100)) - for i in 1 2 3 4 5 6 7 8 9 - do - if [[ ! " ${SORTED_UNIQ_NUM[@]} " =~ " ${i} " ]]; then - INTRUS=$i - break - fi - done - - # Worst case - if [[ $INTRUS -eq "-1" ]] - then - echo Tapez "$INPUT \n sans changement" - return - fi - - for num in ${NUMBERS[@]} - do - get_random - R=$(($R % 100)) - - if [[ $R -lt 60 ]]; then - NEWINPUT=${NEWINPUT}${num}${INTRUS} - else - NEWINPUT=${NEWINPUT}${num} - fi - done - - echo "Saisissez $NEWINPUT en\n enlevant les $INTRUS" -} - -SOMME.A() -{ - if [[ $(($INPUT % 2)) -eq 0 ]]; then - A=$(($INPUT / 2)) - B=$A + if [[ $R -lt 50 ]]; then + echo "Tapez $NEWINPUT en\n supprimant les $INTRUS" else - A=$(($INPUT / 2)) - B=$(($A+1)) + echo "Saisissez $NEWINPUT en\n enlevant les $INTRUS" + fi +} + +SOMME() +{ + get_random + RA=$(($RA % 100)) + + if [[ $(($INPUT % 2)) -eq 0 ]]; then + A=$(($INPUT - $RA)) + B=$RA + else + B=$(($INPUT + $RA)) + A=$RA fi get_random R=$(($R % 100)) - A=$(($A - $R)) - B=$(($B + $R)) - echo "Tapez le résultat\n de $A + $B" -} - -SOMME.B() -{ - if [[ $(($INPUT % 2)) -eq 0 ]]; then - A=$(($INPUT / 2)) - B=$A + if [[ $R -lt 25 ]]; then + echo "Tapez le résultat\n de $A + $B" + elif [[ $R -lt 50 ]]; then + echo "Sommez\n $A et $B" + elif [[ $R -lt 75 ]]; then + echo "Additionnez\n $A et $B" else - A=$(($INPUT / 2)) - B=$(($A+1)) + echo "Saisissez le résultat\n de $A + $B" fi - - get_random - R=$(($R % 100)) - A=$(($A - $R)) - B=$(($B + $R)) - - echo "Saisissez le résultat\n de $A + $B" } get_random @@ -164,6 +126,15 @@ RAND_ANGLE=$(($R % 3)) get_random RAND_INDEX=$(($R % ${#TRANSFORMATIONS[@]})) +convert -size 300x60 xc:none -pointsize 20 \ + \( -clone 0 -fill black \ + -stroke black -strokewidth 1 \ + -annotate "${RAND_ANGLE}x${RAND_ITALIC}+0+0" "\n $(${TRANSFORMATIONS[$RAND_INDEX]})" \ + -roll +$ROLL_X+0 \ + -wave "$WAVE1_AMPLITUDE"x"$WAVE1_LENGTH" \ + -roll -$ROLL_X+0 \) \ + -flatten -crop 300x60 +repage -quality 500 -depth 11 png:$FILENAME + convert -size 300x60 xc:none -pointsize 20 \ \( -clone 0 -fill black \ -stroke black -strokewidth 1 \