42 lines
1.1 KiB
Scala
42 lines
1.1 KiB
Scala
package lc.core
|
|
|
|
import lc.captchas._
|
|
import lc.captchas.interfaces.ChallengeProvider
|
|
import lc.captchas.interfaces.Challenge
|
|
|
|
object CaptchaProviders {
|
|
private val providers = Map(
|
|
"FilterChallenge" -> new FilterChallenge,
|
|
//"FontFunCaptcha" -> new FontFunCaptcha,
|
|
"GifCaptcha" -> new GifCaptcha,
|
|
"ShadowTextCaptcha" -> new ShadowTextCaptcha,
|
|
"RainDropsCaptcha" -> new RainDropsCP
|
|
//"LabelCaptcha" -> new LabelCaptcha
|
|
)
|
|
|
|
def generateChallengeSamples(): Map[String, Challenge] = {
|
|
providers.map {
|
|
case (key, provider) =>
|
|
(key, provider.returnChallenge())
|
|
}
|
|
}
|
|
|
|
private val seed = System.currentTimeMillis.toString.substring(2, 6).toInt
|
|
private val random = new scala.util.Random(seed)
|
|
|
|
private def getNextRandomInt(max: Int) =
|
|
random.synchronized {
|
|
random.nextInt(max)
|
|
}
|
|
|
|
def getProviderById(id: String): ChallengeProvider = {
|
|
return providers(id)
|
|
}
|
|
|
|
def getProvider(): ChallengeProvider = {
|
|
val keys = providers.keys
|
|
val providerIndex = keys.toVector(getNextRandomInt(keys.size))
|
|
providers(providerIndex)
|
|
}
|
|
}
|