commit 25/11/2025

This commit is contained in:
2025-11-25 10:21:17 +07:00
parent 74413a7fb8
commit 080d75946b
7 changed files with 402 additions and 5 deletions

View File

@@ -33,7 +33,7 @@ lateinit var audioPlayer: AudioPlayer
val StreamerOutputs: MutableMap<String, BarixConnection> = HashMap()
lateinit var udpreceiver: UDPReceiver
lateinit var tcpreceiver: TCPReceiver
const val version = "0.0.15 (24/11/2025)"
const val version = "0.0.16 (25/11/2025)"
// AAS 64 channels
const val max_channel = 64

View File

@@ -53,7 +53,7 @@ import java.util.UUID
@Suppress("unused")
class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val _config: configFile) {
class WebApp(val listenPort: Int, var userlist: List<Pair<String, String>>, val _config: configFile) {
lateinit var app: Javalin
lateinit var semiauto: Javalin
@@ -119,11 +119,103 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
//it.sessionAttribute("user", user.first)
it.cookie("aas-user", user.first)
// Redirect to home page
it.redirect("home.html")
if (user.first== GetAdminUserFromConfig()){
it.redirect("homeadmin.html")
} else {
it.redirect("homeviewer.html")
}
}
}
// home for admin user
path("homeadmin.html") {
before { CheckUsers(it) }
ws("/ws") { ws ->
// WebSocket endpoint for home
ws.onConnect {
it.enableAutomaticPings()
}
ws.onMessage { wsMessageContext ->
path("home.html") {
try {
val cmd =
objectmapper.readValue(wsMessageContext.message(), WebsocketCommand::class.java)
when (cmd.command) {
"getSystemTime" -> {
val systemtime = LocalDateTime.now().format(datetimeformat1)
val uptime = GetUptime()
SendReply(
wsMessageContext,
cmd.command,
if (uptime.isNotEmpty()) "Date & Time : $systemtime\nSystem Uptime : $uptime" else "Date & Time : $systemtime"
)
}
"getCPUStatus" -> {
Somecodes.getCPUUsage { vv ->
val sv = GetSensorsInfo()
if (sv.isNotEmpty()) {
SendReply(wsMessageContext, cmd.command, vv + "\n" + sv)
} else {
SendReply(wsMessageContext, cmd.command, vv)
}
}
}
"getMemoryStatus" -> {
SendReply(wsMessageContext, cmd.command, Somecodes.getMemoryUsage())
}
"getDiskStatus" -> {
SendReply(wsMessageContext, cmd.command, Somecodes.getDiskUsage())
}
"getNetworkStatus" -> {
Somecodes.GetNetworkStatus { nn ->
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(nn)
)
}
}
"getPagingQueue" -> {
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(db.queuepagingDB.List)
)
}
"getAASQueue" -> {
SendReply(
wsMessageContext,
cmd.command,
objectmapper.writeValueAsString(db.queuetableDB.List)
)
}
"getStreamerOutputs" -> {
val reply: List<StreamerOutputData> =
StreamerOutputs.map { so -> StreamerOutputData.fromBarixConnection(so.value) }
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(reply))
}
else -> {
SendReply(wsMessageContext, cmd.command, "Unknown command")
}
}
} catch (e: Exception) {
if (e.message != null && (e.message is String) && e.message!!.isNotEmpty()) {
Logger.error { "Error processing WebSocket message: ${e.message}" }
}
}
}
}
}
// home for viewer user
path("homeviewer.html") {
before { CheckUsers(it) }
ws("/ws") { ws ->
// WebSocket endpoint for home
@@ -2137,6 +2229,35 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
}
}
}
path("WebAccess"){
get {
val value = object {
val adminpass = _config.Get(configKeys.WEBAPP_ADMIN_PASSWORD.key)
val viewerpass = _config.Get(configKeys.WEBAPP_VIEWER_PASSWORD.key)
}
it.result(objectmapper.writeValueAsString(value))
}
post{
val json : JsonNode = objectmapper.readTree(it.body())
val adminpass = json.get("adminpass").asText("")
val viewerpass = json.get("viewerpass").asText("")
if(ValidString(adminpass) && ValidString(viewerpass)){
_config.Set(configKeys.WEBAPP_ADMIN_PASSWORD.key, adminpass)
_config.Set(configKeys.WEBAPP_VIEWER_PASSWORD.key, viewerpass)
_config.Save()
Logger.info { "Changed Web Access Passwords" }
// update userlist
userlist = listOf(
Pair(_config.Get(configKeys.WEBAPP_ADMIN_USERNAME.key), _config.Get(configKeys.WEBAPP_ADMIN_PASSWORD.key)),
Pair(_config.Get(configKeys.WEBAPP_VIEWER_USERNAME.key), _config.Get(configKeys.WEBAPP_VIEWER_PASSWORD.key))
)
it.result(objectmapper.writeValueAsString(resultMessage("OK")))
} else {
it.status(400)
.result(objectmapper.writeValueAsString(resultMessage("Password cannot be empty")))
}
}
}
}