Config fallback support

Signed-off-by: Rahul Rudragoudar <rr83019@gmail.com>
This commit is contained in:
Rahul Rudragoudar 2021-03-29 15:29:21 +05:30
parent 30f152f7ec
commit fe8bf54196
No known key found for this signature in database
GPG Key ID: 0D2CE231A7287EBC

View File

@ -2,23 +2,37 @@ package lc.core
import scala.io.Source.fromFile
import org.json4s.{DefaultFormats, JValue, JObject, JField, JString}
import org.json4s.jackson.JsonMethods.parse
import org.json4s.jackson.JsonMethods.{parse, render, pretty}
import org.json4s.JsonDSL._
import java.io.{FileNotFoundException, File, PrintWriter}
object Config {
implicit val formats: DefaultFormats.type = DefaultFormats
private val configFile = fromFile("config.json")
private val configFilePath = "data/config.json"
private val configString =
try configFile.mkString
finally configFile.close
try {
val configFile = fromFile(configFilePath)
val configFileContent = configFile.mkString
configFile.close
configFileContent
} catch {
case _: FileNotFoundException =>
val configFileContent = getDefaultConfig()
val configFile = new PrintWriter(new File(configFilePath))
configFile.write(configFileContent)
configFile.close
configFileContent
}
private val configJson = parse(configString)
val port: Int = (configJson \ "port").extract[Int]
val throttle: Int = (configJson \ "throttle").extract[Int]
val seed: Int = (configJson \ "randomSeed").extract[Int]
val captchaExpiryTimeLimit: Int = (configJson \ "captchaExpiryTimeLimit").extract[Int]
val threadDelay: Int = (configJson \ "threadDelay").extract[Int]
val port: Int = (configJson \ AttributesEnum.PORT.toString).extract[Int]
val throttle: Int = (configJson \ AttributesEnum.THROTTLE.toString).extract[Int]
val seed: Int = (configJson \ AttributesEnum.RANDOM_SEED.toString).extract[Int]
val captchaExpiryTimeLimit: Int = (configJson \ AttributesEnum.CAPTCHA_EXPIRY_TIME_LIMIT.toString).extract[Int]
val threadDelay: Int = (configJson \ AttributesEnum.THREAD_DELAY.toString).extract[Int]
private val captchaConfigJson = (configJson \ "captchas")
val captchaConfigTransform: JValue = captchaConfigJson transformField {
@ -45,4 +59,45 @@ object Config {
valueSet
}
private def getDefaultConfig(): String = {
val defaultConfigMap =
(AttributesEnum.RANDOM_SEED.toString -> 20) ~
(AttributesEnum.PORT.toString -> 8888) ~
(AttributesEnum.CAPTCHA_EXPIRY_TIME_LIMIT.toString -> 5) ~
(AttributesEnum.THROTTLE.toString -> 10) ~
(AttributesEnum.THREAD_DELAY.toString -> 2) ~
("captchas" -> List(
(
(AttributesEnum.NAME.toString -> "FilterChallenge") ~
(ParametersEnum.ALLOWEDLEVELS.toString -> List("medium", "hard")) ~
(ParametersEnum.ALLOWEDMEDIA.toString -> List("image/png")) ~
(ParametersEnum.ALLOWEDINPUTTYPE.toString -> List("text")) ~
(AttributesEnum.CONFIG.toString -> JObject())
),
(
(AttributesEnum.NAME.toString -> "GifCaptcha") ~
(ParametersEnum.ALLOWEDLEVELS.toString -> List("hard")) ~
(ParametersEnum.ALLOWEDMEDIA.toString -> List("image/gif")) ~
(ParametersEnum.ALLOWEDINPUTTYPE.toString -> List("text")) ~
(AttributesEnum.CONFIG.toString -> JObject())
),
(
(AttributesEnum.NAME.toString -> "ShadowTextCaptcha") ~
(ParametersEnum.ALLOWEDLEVELS.toString -> List("easy")) ~
(ParametersEnum.ALLOWEDMEDIA.toString -> List("image/png")) ~
(ParametersEnum.ALLOWEDINPUTTYPE.toString -> List("text")) ~
(AttributesEnum.CONFIG.toString -> JObject())
),
(
(AttributesEnum.NAME.toString -> "RainDropsCaptcha") ~
(ParametersEnum.ALLOWEDLEVELS.toString -> List("easy", "medium")) ~
(ParametersEnum.ALLOWEDMEDIA.toString -> List("image/gif")) ~
(ParametersEnum.ALLOWEDINPUTTYPE.toString -> List("text")) ~
(AttributesEnum.CONFIG.toString -> JObject())
)
))
pretty(render(defaultConfigMap))
}
}