package Web import Log.LogGetter import config import io.javalin.Javalin import io.javalin.apibuilder.ApiBuilder.before import io.javalin.apibuilder.ApiBuilder.get import io.javalin.apibuilder.ApiBuilder.post import org.tinylog.Logger @Suppress("unused") /** * Start WebUI Server */ class WebUI{ // regex untuk date dengan format YYYY-MM-DD private val dateRegex1 = """\d{4}-\d{2}-\d{2}""".toRegex() private var app : Javalin = Javalin.create { cfg -> cfg.staticFiles.add("/") cfg.router.apiBuilder { get("/"){ if (config.WebUsername==it.cookie("username")){ Logger.info{"${it.ip()} logged in as ${it.cookie("username")}, forward to home.html"} it.redirect("home.html") } else{ Logger.info{"${it.ip()} have not logged in, forward to login.html"} it.redirect("login.html") } } post("login.html"){ val username = it.formParam("username") val password = it.formParam("password") if (config.WebUsername==username && config.WebPassword==password) { Logger.info { "${it.ip()} login successful for user $username" } it.cookie("username", username) it.redirect("home.html") } else { Logger.info { "${it.ip()} Login failed for user $username" } it.redirect("/login.html?error=1") } } get("getLogs"){ var date = it.queryParam("date") Logger.info{"${it.ip()} User ${it.cookie("username")} requested logs for date: $date"} if (date!=null){ if (date.isNotEmpty()){ if (dateRegex1.matches(date)){ // ketemu format YYYY-MM-DD, convert format ke dd/MM/yyyy val parts = date.split("-") date = "${parts[2]}/${parts[1]}/${parts[0]}" } val logs = LogGetter().getLog(date) if (logs.isNotEmpty()){ it.json(logs) } else it.status(404).json(webReply("No logs found for the specified date")) } else it.status(400).json(webReply("Date parameter is empty")) } else it.status(400).json(webReply("Please provide a date")) } get("logout"){ Logger.info{"${it.ip()} User ${it.cookie("username")} logged out"} it.removeCookie("username") it.redirect("login.html") } get("getSetting"){ val fd = farmData(config.ActiveMQ_BrokerURL, config.ActiveMQ_Username, config.ActiveMQ_Password, config.ActiveMQ_QueueName) val aas1 = aasData(config.MySQL_AAS1, config.MySQL_AAS1_Username, config.MySQL_AAS1_Password) val aas2 = aasData(config.MySQL_AAS2, config.MySQL_AAS2_Username, config.MySQL_AAS2_Password) val aas3 = aasData(config.MySQL_AAS3, config.MySQL_AAS3_Username, config.MySQL_AAS3_Password) val setting = getSetting(fd, aas1, aas2, aas3) it.json(setting) } post("saveFARM"){ try{ val fd = it.bodyAsClass(saveFARM::class.java) config.ActiveMQ_BrokerURL = fd.farm.url config.ActiveMQ_Username = fd.farm.username config.ActiveMQ_Password = fd.farm.password config.ActiveMQ_QueueName = fd.farm.queue config.Save() it.json(webReply("success")) } catch (e: Exception){ val str = "Error saving FARM settings: ${e.message}" Logger.error { str } it.status(500).json(webReply(str)) } } post("saveAAS"){ try { val ax = it.bodyAsClass(saveAAS::class.java) config.MySQL_AAS1 = ax.aas1.url config.MySQL_AAS1_Username = ax.aas1.username config.MySQL_AAS1_Password = ax.aas1.password config.MySQL_AAS2 = ax.aas2.url config.MySQL_AAS2_Username = ax.aas2.username config.MySQL_AAS2_Password = ax.aas2.password config.MySQL_AAS3 = ax.aas3.url config.MySQL_AAS3_Username = ax.aas3.username config.MySQL_AAS3_Password = ax.aas3.password config.Save() it.json(webReply("success")) } catch (e: Exception){ val str = "Error saving AAS settings: ${e.message}" Logger.error { str } it.status(500).json(webReply(str)) } } before("home.html"){ if (config.WebUsername!=it.cookie("username")){ Logger.info {"${it.ip()} Have not logged in, forward to login.html"} it.redirect("login.html") return@before } } before("log.html"){ if (config.WebUsername!=it.cookie("username")){ Logger.info{"${it.ip()} Have not logged in, forward to login.html"} it.redirect("login.html") return@before } } before("setting.html"){ if (config.WebUsername!=it.cookie("username")){ Logger.info{"${it.ip()} Have not logged in, forward to login.html"} it.redirect("login.html") return@before } } } } /** * Start WebUI Server */ fun Start(){ app.start(config.WebPort) } /** * Stop WebUI Server */ fun Stop(){ app.stop() } }