11package lc .core
22
33import scala .io .Source .fromFile
4- import org .json4s .{DefaultFormats , JValue , JObject , JField , JString }
5- import org .json4s .jackson .JsonMethods .{parse , render , pretty }
6- import org .json4s .JsonDSL ._
7- import org .json4s .StringInput
8- import org .json4s .jvalue2monadic
9- import org .json4s .jvalue2extractable
4+ import com .github .plokhotnyuk .jsoniter_scala .core ._
105import java .io .{FileNotFoundException , File , PrintWriter }
116import java .{util => ju }
127import lc .misc .HelperFunctions
138
149class Config (configFilePath : String ) {
1510
16- import Config .formats
17-
1811 private val configString =
1912 try {
2013 val configFile = fromFile(configFilePath)
@@ -40,8 +33,8 @@ class Config(configFilePath: String) {
4033 }
4134 }
4235
43- private val configJson = parse (configString)
44- private val configFields : ConfigField = configJson.extract[ ConfigField ]
36+ private val appConfig = readFromString[ AppConfig ] (configString)
37+ private val configFields : ConfigField = appConfig.toConfigField
4538
4639 val port : Int = configFields.portInt.getOrElse(8888 )
4740 val address : String = configFields.address.getOrElse(" 0.0.0.0" )
@@ -53,68 +46,64 @@ class Config(configFilePath: String) {
5346 val corsHeader : String = configFields.corsHeader.getOrElse(" " )
5447 val maxAttempts : Int = Math .max(1 , (configFields.maxAttemptsRatioFloat.getOrElse(0.01f ) * bufferCount).toInt)
5548
56- private val captchaConfigJson = (configJson \ " captchas" )
57- val captchaConfigTransform : JValue = captchaConfigJson transformField { case JField (" config" , JObject (config)) =>
58- (" config" , JString (config.toString))
59- }
60- val captchaConfig : List [CaptchaConfig ] = captchaConfigTransform.extract[List [CaptchaConfig ]]
49+ val captchaConfig : List [CaptchaConfig ] = appConfig.captchas
6150 val allowedLevels : Set [String ] = captchaConfig.flatMap(_.allowedLevels).toSet
6251 val allowedMedia : Set [String ] = captchaConfig.flatMap(_.allowedMedia).toSet
6352 val allowedInputType : Set [String ] = captchaConfig.flatMap(_.allowedInputType).toSet
6453
6554 HelperFunctions .setSeed(seed)
6655
6756 private def getDefaultConfig (): String = {
68- val defaultConfigMap =
69- (AttributesEnum .RANDOM_SEED .toString -> new ju.Random ().nextInt()) ~
70- (AttributesEnum .PORT .toString -> 8888 ) ~
71- (AttributesEnum .ADDRESS .toString -> " 0.0.0.0" ) ~
72- (AttributesEnum .CAPTCHA_EXPIRY_TIME_LIMIT .toString -> 5 ) ~
73- (AttributesEnum .BUFFER_COUNT .toString -> 1000 ) ~
74- (AttributesEnum .THREAD_DELAY .toString -> 2 ) ~
75- (AttributesEnum .PLAYGROUND_ENABLED .toString -> true ) ~
76- (AttributesEnum .CORS_HEADER .toString -> " " ) ~
77- (AttributesEnum .MAX_ATTEMPTS_RATIO .toString -> 0.01f ) ~
78- (" captchas" -> List (
79- (
80- (AttributesEnum .NAME .toString -> " FilterChallenge" ) ~
81- (ParametersEnum .ALLOWEDLEVELS .toString -> List (" medium" , " hard" )) ~
82- (ParametersEnum .ALLOWEDMEDIA .toString -> List (" image/png" )) ~
83- (ParametersEnum .ALLOWEDINPUTTYPE .toString -> List (" text" )) ~
84- (ParametersEnum .ALLOWEDSIZES .toString -> List (" 350x100" )) ~
85- (AttributesEnum .CONFIG .toString -> JObject ())
86- ),
87- (
88- (AttributesEnum .NAME .toString -> " PoppingCharactersCaptcha" ) ~
89- (ParametersEnum .ALLOWEDLEVELS .toString -> List (" hard" )) ~
90- (ParametersEnum .ALLOWEDMEDIA .toString -> List (" image/gif" )) ~
91- (ParametersEnum .ALLOWEDINPUTTYPE .toString -> List (" text" )) ~
92- (ParametersEnum .ALLOWEDSIZES .toString -> List (" 350x100" )) ~
93- (AttributesEnum .CONFIG .toString -> JObject ())
94- ),
95- (
96- (AttributesEnum .NAME .toString -> " ShadowTextCaptcha" ) ~
97- (ParametersEnum .ALLOWEDLEVELS .toString -> List (" easy" )) ~
98- (ParametersEnum .ALLOWEDMEDIA .toString -> List (" image/png" )) ~
99- (ParametersEnum .ALLOWEDINPUTTYPE .toString -> List (" text" )) ~
100- (ParametersEnum .ALLOWEDSIZES .toString -> List (" 350x100" )) ~
101- (AttributesEnum .CONFIG .toString -> JObject ())
102- ),
103- (
104- (AttributesEnum .NAME .toString -> " RainDropsCaptcha" ) ~
105- (ParametersEnum .ALLOWEDLEVELS .toString -> List (" easy" , " medium" )) ~
106- (ParametersEnum .ALLOWEDMEDIA .toString -> List (" image/gif" )) ~
107- (ParametersEnum .ALLOWEDINPUTTYPE .toString -> List (" text" )) ~
108- (ParametersEnum .ALLOWEDSIZES .toString -> List (" 350x100" )) ~
109- (AttributesEnum .CONFIG .toString -> JObject ())
110- )
111- ))
57+ val defaultConfig = AppConfig (
58+ seed = Some (new ju.Random ().nextInt()),
59+ port = Some (8888 ),
60+ address = Some (" 0.0.0.0" ),
61+ captchaExpiryTimeLimit = Some (5 ),
62+ bufferCount = Some (1000 ),
63+ threadDelay = Some (2 ),
64+ playgroundEnabled = Some (true ),
65+ corsHeader = Some (" " ),
66+ maxAttemptsRatio = Some (0.01f ),
67+ captchas = List (
68+ CaptchaConfig (
69+ name = " FilterChallenge" ,
70+ allowedLevels = List (" medium" , " hard" ),
71+ allowedMedia = List (" image/png" ),
72+ allowedInputType = List (" text" ),
73+ allowedSizes = List (" 350x100" ),
74+ config = JSONString (" {}" )
75+ ),
76+ CaptchaConfig (
77+ name = " PoppingCharactersCaptcha" ,
78+ allowedLevels = List (" hard" ),
79+ allowedMedia = List (" image/gif" ),
80+ allowedInputType = List (" text" ),
81+ allowedSizes = List (" 350x100" ),
82+ config = JSONString (" {}" )
83+ ),
84+ CaptchaConfig (
85+ name = " ShadowTextCaptcha" ,
86+ allowedLevels = List (" easy" ),
87+ allowedMedia = List (" image/png" ),
88+ allowedInputType = List (" text" ),
89+ allowedSizes = List (" 350x100" ),
90+ config = JSONString (" {}" )
91+ ),
92+ CaptchaConfig (
93+ name = " RainDropsCaptcha" ,
94+ allowedLevels = List (" easy" , " medium" ),
95+ allowedMedia = List (" image/gif" ),
96+ allowedInputType = List (" text" ),
97+ allowedSizes = List (" 350x100" ),
98+ config = JSONString (" {}" )
99+ )
100+ )
101+ )
112102
113- pretty(render(defaultConfigMap ))
103+ writeToString(defaultConfig, WriterConfig .withIndentionStep( 2 ))
114104 }
115105
116106}
117107
118108object Config {
119- implicit val formats : DefaultFormats .type = DefaultFormats
120109}
0 commit comments