openpdu/src/webui/mqtt_ui.go

79 lines
2.1 KiB
Go

package webui
import (
"strings"
"git.openpdu.org/OpenPDU/openpdu/mqtt"
"github.com/spf13/viper"
"gopkg.in/macaron.v1"
)
type MQTTReconfigFunction func()
var mqttReconfigFunction MQTTReconfigFunction
func SetMQTTReconfigFunction(f MQTTReconfigFunction) {
mqttReconfigFunction = f
}
func mqttPage(ctx *macaron.Context) {
ctx.Data["schema"] = viper.GetString("Mqtt.Schema")
ctx.Data["host"] = viper.GetString("Mqtt.Host")
ctx.Data["port"] = viper.GetString("Mqtt.Port")
ctx.Data["clientid"] = viper.GetString("Mqtt.CliendID")
ctx.Data["prefix"] = viper.GetString("Mqtt.Prefix")
ctx.Data["username"] = viper.GetString("Mqtt.Username")
ctx.Data["password"] = viper.GetString("Mqtt.Password")
ctx.Data["homeassistant"] = viper.GetString("Mqtt.homeassistant")
if mqtt.Connected() {
ctx.Data["mqttstatus"] = "Connected"
} else {
ctx.Data["mqttstatus"] = "Disconnected"
}
ctx.Data["schemas"] = []string{"tcp", "ssl", "ws"}
ctx.HTML(200, "mqtt")
}
type MQTTPostForm struct {
Schema string `form:"schema" binding:"Required"`
Host string `form:"host" binding:"Required"`
Port string `form:"port" binding:"Required"`
Prefix string `form:"prefix" binding:"Required"`
ClientID string `form:"clientid" binding:"Required"`
Username string `form:"username"`
Password string `form:"password"`
HomeAssistant bool `form:"homeassistant"`
}
func mqttPost(ctx *macaron.Context, f MQTTPostForm) {
schema := strings.ToLower(strings.TrimSpace(f.Schema))
switch schema {
case
"tcp",
"ssl",
"ws":
viper.Set("Mqtt.Schema", schema)
default:
mqttPage(ctx)
return
}
viper.Set("Mqtt.Host", strings.ToLower(strings.TrimSpace(f.Host)))
viper.Set("Mqtt.Port", strings.ToLower(strings.TrimSpace(f.Port)))
viper.Set("Mqtt.CliendID", strings.TrimSpace(f.ClientID))
viper.Set("Mqtt.Prefix", strings.TrimSpace(f.Prefix))
viper.Set("Mqtt.Username", strings.TrimSpace(f.Username))
viper.Set("Mqtt.Password", f.Password)
viper.Set("Mqtt.HomeAssistant", f.HomeAssistant)
viper.WriteConfig()
if mqttReconfigFunction != nil {
go mqttReconfigFunction()
}
mqttPage(ctx)
}