diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..40c8e58 --- /dev/null +++ b/build.sbt @@ -0,0 +1,18 @@ +import Dependencies._ + +lazy val root = (project in file(".")). + settings( + inThisBuild(List( + organization := "com.example", + scalaVersion := "2.12.3", + version := "0.1.0-SNAPSHOT")), + name := "LibreCaptcha", + libraryDependencies += scalaTest % Test, + + libraryDependencies += "com.sksamuel.scrimage" %% "scrimage-core" % "2.1.8", + + libraryDependencies += "com.sksamuel.scrimage" %% "scrimage-io-extra" % "2.1.8", + + libraryDependencies += "com.sksamuel.scrimage" %% "scrimage-filters" % "2.1.8" + +) diff --git a/project/Dependencies.scala b/project/Dependencies.scala new file mode 100644 index 0000000..69e5af0 --- /dev/null +++ b/project/Dependencies.scala @@ -0,0 +1,5 @@ +import sbt._ + +object Dependencies { + lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.0.3" +} diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..394cb75 --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.0.4 diff --git a/src/main/scala/Main.scala b/src/main/scala/Main.scala new file mode 100644 index 0000000..6b2080e --- /dev/null +++ b/src/main/scala/Main.scala @@ -0,0 +1,46 @@ +import com.sksamuel.scrimage._ +import java.io._ + +class CaptchaLibrary { + var tokenAnswer = scala.collection.mutable.Map[String, String]() + def init = {} + def shutdown = {} + def getChallenge(): Challenge = { + //choose a captcha provider randomly + val blurCaptcha = new BlurCaptcha + val (challenge, answer) = blurCaptcha.getChallenge() + tokenAnswer += challenge.token->answer + challenge + } + def checkAnswer(token: String, input: String): Boolean = { + if (tokenAnswer(token) == input) { + true + } + else { + false + } + } +} + +trait CaptchaProvider { + def getChallenge(): (Challenge, String) +} + +class Challenge(val token: String, val image: Image) + +class Answer(val token: String, val input: String) + +class BlurCaptcha extends CaptchaProvider { + def getChallenge(): (Challenge, String) = { + val inFileName = "image2.png" + var image = Image.fromStream(new FileInputStream(inFileName)) + image = image.filter(com.sksamuel.scrimage.filter.BlurFilter) + image.output(new File("blur.png")) + + val r = scala.util.Random + val token = r.nextInt(1000).toString + val challenge = new Challenge(token, image) + val answer = "about" + (challenge, answer) + } +}