diff --git a/src/main/scala/lc/captchas/DebugCaptcha.scala b/src/main/scala/lc/captchas/DebugCaptcha.scala new file mode 100644 index 0000000..d0df653 --- /dev/null +++ b/src/main/scala/lc/captchas/DebugCaptcha.scala @@ -0,0 +1,64 @@ +package lc.captchas + +import javax.imageio.ImageIO +import java.awt.Color +import java.awt.Font +import java.awt.font.TextLayout +import java.awt.image.BufferedImage +import java.io.ByteArrayOutputStream +import java.util.Map +import java.util.List + +import lc.misc.HelperFunctions +import lc.captchas.interfaces.Challenge +import lc.captchas.interfaces.ChallengeProvider + +/** This captcha is only for debuggin purposes. It creates very simple captchas that are delibertely easy to solve with OCR engines */ +class DebugCaptcha extends ChallengeProvider { + + def getId(): String = { + "DebugCaptcha" + } + + def configure(config: String): Unit = { + // TODO: Add custom config + } + + def supportedParameters(): Map[String, List[String]] = { + Map.of( + "supportedLevels", List.of("debug"), + "supportedMedia", List.of("image/png"), + "supportedInputType", List.of("text") + ) + } + + def checkAnswer(secret: String, answer: String): Boolean = { + answer.toLowerCase().equals(secret) + } + + private def simpleText(text: String): Array[Byte] = { + val img = new BufferedImage(350, 100, BufferedImage.TYPE_INT_RGB) + val font = new Font("Arial", Font.ROMAN_BASELINE, 48) + val graphics2D = img.createGraphics() + val textLayout = new TextLayout(text, font, graphics2D.getFontRenderContext()) + HelperFunctions.setRenderingHints(graphics2D) + graphics2D.setPaint(Color.WHITE) + graphics2D.fillRect(0, 0, 350, 100) + graphics2D.setPaint(Color.BLACK) + textLayout.draw(graphics2D, 15, 50) + graphics2D.dispose() + val baos = new ByteArrayOutputStream() + try { + ImageIO.write(img, "png", baos) + } catch { + case e: Exception => + e.printStackTrace() + } + baos.toByteArray() + } + + def returnChallenge(): Challenge = { + val secret = HelperFunctions.randomString(6) + new Challenge(simpleText(secret), "image/png", secret.toLowerCase()) + } +} diff --git a/src/main/scala/lc/core/captchaProviders.scala b/src/main/scala/lc/core/captchaProviders.scala index d23f888..b36fed5 100644 --- a/src/main/scala/lc/core/captchaProviders.scala +++ b/src/main/scala/lc/core/captchaProviders.scala @@ -11,7 +11,8 @@ object CaptchaProviders { //"FontFunCaptcha" -> new FontFunCaptcha, "GifCaptcha" -> new GifCaptcha, "ShadowTextCaptcha" -> new ShadowTextCaptcha, - "RainDropsCaptcha" -> new RainDropsCP + "RainDropsCaptcha" -> new RainDropsCP, + "DebugCaptcha" -> new DebugCaptcha, //"LabelCaptcha" -> new LabelCaptcha )