From 4610245b388ae79928cf0508c007609a2b3dd87d Mon Sep 17 00:00:00 2001 From: sanjana Date: Wed, 3 Jan 2018 09:12:43 +0530 Subject: [PATCH] Initial skeleton for the framework. --- build.sbt | 18 +++++++++++++++ project/Dependencies.scala | 5 +++++ project/build.properties | 1 + src/main/scala/Main.scala | 46 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 build.sbt create mode 100644 project/Dependencies.scala create mode 100644 project/build.properties create mode 100644 src/main/scala/Main.scala 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) + } +}