commit 25/11/2025
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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")))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user