79 lines
2.1 KiB
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)
|
|
}
|