From e67d19c857622b543dc32ab68e405ed013bc65bc Mon Sep 17 00:00:00 2001 From: Rahul Rudragoudar Date: Tue, 26 Mar 2019 18:57:56 +0530 Subject: [PATCH] Add method to choose a random captcha instance each time (#28) * git ignore .db * Add method to choose random captcha --- .gitignore | 1 + src/main/scala/lc/Main.scala | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index f8da9a4..7972b04 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.class *.log *.png +*.db /bin/ /project/target/ /target/ diff --git a/src/main/scala/lc/Main.scala b/src/main/scala/lc/Main.scala index 9b70ad0..98dc2dd 100644 --- a/src/main/scala/lc/Main.scala +++ b/src/main/scala/lc/Main.scala @@ -26,11 +26,18 @@ class Captcha { val selectPstmt: PreparedStatement = con.prepareStatement("SELECT secret, provider FROM challenge WHERE token = ?") val imagePstmt: PreparedStatement = con.prepareStatement("SELECT image FROM challenge WHERE token = ?") + val filters = Map("FilterChallenge" -> new FilterChallenge, "FontFunCaptcha" -> new FontFunCaptcha, "GifCaptcha" -> new GifCaptcha, - "ShadowTextCaptcha" -> new ShadowTextCaptcha - ) + "ShadowTextCaptcha" -> new ShadowTextCaptcha) + + def getProvider(): String = { + val random = new scala.util.Random + val keys = filters.keys + val providerMap = keys.toVector(random.nextInt(keys.size)) + providerMap + } def getCaptcha(id: Id): Array[Byte] = { imagePstmt.setString(1, id.id) @@ -45,7 +52,7 @@ class Captcha { def getChallenge(param: Parameters): Id = { //TODO: eval params to choose a provider - val providerMap = "FontFunCaptcha" + val providerMap = getProvider() val provider = filters(providerMap) val challenge = provider.returnChallenge() val blob = new ByteArrayInputStream(challenge.content) @@ -63,7 +70,7 @@ class Captcha { } val task = new Runnable { - val providerMap = "FilterChallenge" + val providerMap = getProvider() val provider = filters(providerMap) def run(): Unit = { val challenge = provider.returnChallenge()