Files
FarmToAAS/src/Web/WebUI.kt
2026-01-22 13:57:34 +07:00

154 lines
6.0 KiB
Kotlin

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()
}
}