Captcha : More simple sum and save in /var/tmp

This commit is contained in:
Adrien Bourmault 2021-01-08 21:34:02 +01:00 committed by root
parent 76d6b4f3d4
commit 321161ef89
2 changed files with 94 additions and 152 deletions

View File

@ -15,7 +15,9 @@
INPUT=$1 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 if test -n ${BASH_VERSION:-''} ; then
get_random () get_random ()
@ -31,23 +33,22 @@ else
} }
fi fi
DECOUPE.A() DECOUPE()
{ {
LENGTH=${#INPUT} LENGTH=${#INPUT}
MID=$((LENGTH / 2)) MID=$((LENGTH / 2))
echo "Tapez ${INPUT:0:$MID}\n suivi de ${INPUT:$MID:$MID}" get_random
} R=$(($R % 2))
DECOUPE.B()
{
LENGTH=${#INPUT}
MID=$((LENGTH / 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} LENGTH=${#INPUT}
NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ') NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ')
@ -81,80 +82,41 @@ INTRUS.A()
fi fi
done done
echo "Tapez $NEWINPUT en\n supprimant les $INTRUS" get_random
} R=$(($R % 100))
INTRUS.B()
{
LENGTH=${#INPUT}
NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ')
SORTED_UNIQ_NUM=$(echo "${NUMBERS[@]}" | sort -u | tr '\n' ' ')
INTRUS=-1
for i in 1 2 3 4 5 6 7 8 9 if [[ $R -lt 50 ]]; then
do echo "Tapez $NEWINPUT en\n supprimant les $INTRUS"
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
else else
A=$(($INPUT / 2)) echo "Saisissez $NEWINPUT en\n enlevant les $INTRUS"
B=$(($A+1)) 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 fi
get_random get_random
R=$(($R % 100)) R=$(($R % 100))
A=$(($A - $R))
B=$(($B + $R))
echo "Tapez le résultat\n de $A + $B" if [[ $R -lt 25 ]]; then
} echo "Tapez le résultat\n de $A + $B"
elif [[ $R -lt 50 ]]; then
SOMME.B() echo "Sommez\n $A et $B"
{ elif [[ $R -lt 75 ]]; then
if [[ $(($INPUT % 2)) -eq 0 ]]; then echo "Additionnez\n $A et $B"
A=$(($INPUT / 2))
B=$A
else else
A=$(($INPUT / 2)) echo "Saisissez le résultat\n de $A + $B"
B=$(($A+1))
fi fi
get_random
R=$(($R % 100))
A=$(($A - $R))
B=$(($B + $R))
echo "Saisissez le résultat\n de $A + $B"
} }
get_random get_random
@ -164,6 +126,15 @@ RAND_ANGLE=$(($R % 3))
get_random get_random
RAND_INDEX=$(($R % ${#TRANSFORMATIONS[@]})) 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 \ convert -size 300x60 xc:none -pointsize 20 \
\( -clone 0 -fill black \ \( -clone 0 -fill black \
-stroke black -strokewidth 1 \ -stroke black -strokewidth 1 \

View File

@ -15,7 +15,9 @@
INPUT=$1 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 if test -n ${BASH_VERSION:-''} ; then
get_random () get_random ()
@ -31,23 +33,22 @@ else
} }
fi fi
DECOUPE.A() DECOUPE()
{ {
LENGTH=${#INPUT} LENGTH=${#INPUT}
MID=$((LENGTH / 2)) MID=$((LENGTH / 2))
echo "Tapez ${INPUT:0:$MID}\n suivi de ${INPUT:$MID:$MID}" get_random
} R=$(($R % 2))
DECOUPE.B()
{
LENGTH=${#INPUT}
MID=$((LENGTH / 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} LENGTH=${#INPUT}
NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ') NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ')
@ -81,80 +82,41 @@ INTRUS.A()
fi fi
done done
echo "Tapez $NEWINPUT en\n supprimant les $INTRUS" get_random
} R=$(($R % 100))
INTRUS.B()
{
LENGTH=${#INPUT}
NUMBERS=$(echo $INPUT | grep -o . | tr '\n' ' ')
SORTED_UNIQ_NUM=$(echo "${NUMBERS[@]}" | sort -u | tr '\n' ' ')
INTRUS=-1
for i in 1 2 3 4 5 6 7 8 9 if [[ $R -lt 50 ]]; then
do echo "Tapez $NEWINPUT en\n supprimant les $INTRUS"
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
else else
A=$(($INPUT / 2)) echo "Saisissez $NEWINPUT en\n enlevant les $INTRUS"
B=$(($A+1)) 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 fi
get_random get_random
R=$(($R % 100)) R=$(($R % 100))
A=$(($A - $R))
B=$(($B + $R))
echo "Tapez le résultat\n de $A + $B" if [[ $R -lt 25 ]]; then
} echo "Tapez le résultat\n de $A + $B"
elif [[ $R -lt 50 ]]; then
SOMME.B() echo "Sommez\n $A et $B"
{ elif [[ $R -lt 75 ]]; then
if [[ $(($INPUT % 2)) -eq 0 ]]; then echo "Additionnez\n $A et $B"
A=$(($INPUT / 2))
B=$A
else else
A=$(($INPUT / 2)) echo "Saisissez le résultat\n de $A + $B"
B=$(($A+1))
fi fi
get_random
R=$(($R % 100))
A=$(($A - $R))
B=$(($B + $R))
echo "Saisissez le résultat\n de $A + $B"
} }
get_random get_random
@ -164,6 +126,15 @@ RAND_ANGLE=$(($R % 3))
get_random get_random
RAND_INDEX=$(($R % ${#TRANSFORMATIONS[@]})) 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 \ convert -size 300x60 xc:none -pointsize 20 \
\( -clone 0 -fill black \ \( -clone 0 -fill black \
-stroke black -strokewidth 1 \ -stroke black -strokewidth 1 \