From 37bf3b1d7f947c36650fc0097815c9c4cec2c5cf Mon Sep 17 00:00:00 2001 From: Rahul Rudragoudar Date: Sat, 6 Apr 2019 11:30:06 +0530 Subject: [PATCH 1/3] Add Captcha thread throttle Signed-off-by: Rahul Rudragoudar --- src/main/scala/lc/Main.scala | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/main/scala/lc/Main.scala b/src/main/scala/lc/Main.scala index e09fad9..41313c2 100644 --- a/src/main/scala/lc/Main.scala +++ b/src/main/scala/lc/Main.scala @@ -18,7 +18,7 @@ import org.json4s.jackson.Serialization.{read, write} import java.util.concurrent._ import scala.Array -class Captcha { +class Captcha(throttle: Int) { val con: Connection = DriverManager.getConnection("jdbc:h2:./captcha", "sa", "") val stmt: Statement = con.createStatement() stmt.execute("CREATE TABLE IF NOT EXISTS challenge(token varchar, id varchar, secret varchar, provider varchar, contentType varchar, image blob)") @@ -26,7 +26,6 @@ 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, @@ -70,26 +69,21 @@ class Captcha { } val task = new Runnable { - val providerMap = getProvider() - val provider = filters(providerMap) def run(): Unit = { - val challenge = provider.returnChallenge() - val blob = new ByteArrayInputStream(challenge.content) - val token = scala.util.Random.nextInt(10000).toString - val id = Id(token) - insertPstmt.setString(1, token) - insertPstmt.setString(2, provider.getId) - insertPstmt.setString(3, challenge.secret) - insertPstmt.setString(4, providerMap) - insertPstmt.setString(5, challenge.contentType) - insertPstmt.setBlob(6, blob) - insertPstmt.executeUpdate() + val imageNum = stmt.executeQuery("SELECT COUNT(*) AS total FROM challenge") + var throttleIn = throttle + if(imageNum.next()) + throttleIn = (throttle-imageNum.getInt("total")) + ((10*throttle)/100).asInstanceOf[Int] + while(0 <= throttleIn-1){ + getChallenge(Parameters("","","",Option(Size(0,0)))) + throttleIn -= 1 + } } } def beginThread(delay: Int) : Unit = { - val ex = new ScheduledThreadPoolExecutor(1) - val thread = ex.scheduleAtFixedRate(task, 1, delay, TimeUnit.SECONDS) + val ex = new ScheduledThreadPoolExecutor(1) + val thread = ex.scheduleWithFixedDelay(task, 1, delay, TimeUnit.SECONDS) } def getAnswer(answer: Answer): Boolean = { @@ -124,7 +118,7 @@ case class Id(id: String) case class Answer(answer: String, id: String) class Server(port: Int){ - val captcha = new Captcha() + val captcha = new Captcha(0) val server = new HTTPServer(port) val host = server.getVirtualHost(null) @@ -175,11 +169,10 @@ class Server(port: Int){ object LCFramework{ def main(args: scala.Array[String]) { - val captcha = new Captcha() + val captcha = new Captcha(50) val server = new Server(8888) server.start() - //captcha.beginThread(2) - + captcha.beginThread(2) } } From 184d1670854a4639c3f803d5a6c3e188ae2d3d11 Mon Sep 17 00:00:00 2001 From: Rahul Rudragoudar Date: Sat, 6 Apr 2019 11:42:11 +0530 Subject: [PATCH 2/3] Add buffer to inital throttle Signed-off-by: Rahul Rudragoudar --- src/main/scala/lc/Main.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/lc/Main.scala b/src/main/scala/lc/Main.scala index 41313c2..7b885fa 100644 --- a/src/main/scala/lc/Main.scala +++ b/src/main/scala/lc/Main.scala @@ -71,9 +71,9 @@ class Captcha(throttle: Int) { val task = new Runnable { def run(): Unit = { val imageNum = stmt.executeQuery("SELECT COUNT(*) AS total FROM challenge") - var throttleIn = throttle + var throttleIn = throttle + ((10*throttle)/100).asInstanceOf[Int] if(imageNum.next()) - throttleIn = (throttle-imageNum.getInt("total")) + ((10*throttle)/100).asInstanceOf[Int] + throttleIn = (throttleIn-imageNum.getInt("total")) while(0 <= throttleIn-1){ getChallenge(Parameters("","","",Option(Size(0,0)))) throttleIn -= 1 From 89a1039c87e3f8870cc6e27021dde4e8b0791c50 Mon Sep 17 00:00:00 2001 From: Rahul Rudragoudar Date: Sat, 6 Apr 2019 23:26:51 +0530 Subject: [PATCH 3/3] Minor fixes Signed-off-by: Rahul Rudragoudar --- src/main/scala/lc/Main.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/lc/Main.scala b/src/main/scala/lc/Main.scala index 7b885fa..006a529 100644 --- a/src/main/scala/lc/Main.scala +++ b/src/main/scala/lc/Main.scala @@ -71,10 +71,10 @@ class Captcha(throttle: Int) { val task = new Runnable { def run(): Unit = { val imageNum = stmt.executeQuery("SELECT COUNT(*) AS total FROM challenge") - var throttleIn = throttle + ((10*throttle)/100).asInstanceOf[Int] + var throttleIn = (throttle*1.1).toInt if(imageNum.next()) throttleIn = (throttleIn-imageNum.getInt("total")) - while(0 <= throttleIn-1){ + while(0 < throttleIn){ getChallenge(Parameters("","","",Option(Size(0,0)))) throttleIn -= 1 } @@ -171,8 +171,8 @@ object LCFramework{ def main(args: scala.Array[String]) { val captcha = new Captcha(50) val server = new Server(8888) - server.start() captcha.beginThread(2) + server.start() } }