93 lines
2.6 KiB
Go
93 lines
2.6 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"sproutclaw-web/internal/db"
|
|
"sproutclaw-web/internal/models"
|
|
)
|
|
|
|
// RegisterWebuiConfig registers WebUI config and avatar routes.
|
|
func RegisterWebuiConfig(r *gin.RouterGroup, database *db.DB) {
|
|
r.GET("/avatars", handleGetAvatars(database))
|
|
r.GET("/webui/config", handleGetWebuiConfig(database))
|
|
r.POST("/webui/config", handleSetWebuiConfig(database))
|
|
r.POST("/webui/config/delete", handleDeleteWebuiConfig(database))
|
|
}
|
|
|
|
func handleGetAvatars(database *db.DB) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
user, _ := database.GetConfig("userAvatarUrl")
|
|
agent, _ := database.GetConfig("agentAvatarUrl")
|
|
c.JSON(http.StatusOK, models.AvatarsResponse{
|
|
UserAvatarURL: normalizeAvatarURL(user),
|
|
AgentAvatarURL: normalizeAvatarURL(agent),
|
|
})
|
|
}
|
|
}
|
|
|
|
func normalizeAvatarURL(u string) string {
|
|
if strings.HasPrefix(u, "http://") || strings.HasPrefix(u, "https://") {
|
|
return u
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func handleGetWebuiConfig(database *db.DB) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
key := c.Query("key")
|
|
if key != "" {
|
|
val, _ := database.GetConfig(key)
|
|
c.JSON(http.StatusOK, gin.H{"key": key, "value": val})
|
|
return
|
|
}
|
|
all, err := database.AllConfig()
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, models.ErrorResponse{Error: err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"entries": all})
|
|
}
|
|
}
|
|
|
|
func handleSetWebuiConfig(database *db.DB) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
var req models.WebuiConfigSetRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, models.ErrorResponse{Error: err.Error()})
|
|
return
|
|
}
|
|
if req.Entries != nil {
|
|
for k, v := range req.Entries {
|
|
if err := database.SetConfig(k, v); err != nil {
|
|
c.JSON(http.StatusInternalServerError, models.ErrorResponse{Error: err.Error()})
|
|
return
|
|
}
|
|
}
|
|
} else if req.Key != "" {
|
|
if err := database.SetConfig(req.Key, req.Value); err != nil {
|
|
c.JSON(http.StatusInternalServerError, models.ErrorResponse{Error: err.Error()})
|
|
return
|
|
}
|
|
}
|
|
c.JSON(http.StatusOK, models.OKResponse{OK: true})
|
|
}
|
|
}
|
|
|
|
func handleDeleteWebuiConfig(database *db.DB) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
var req models.WebuiConfigDeleteRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, models.ErrorResponse{Error: err.Error()})
|
|
return
|
|
}
|
|
if err := database.DeleteConfig(req.Key); err != nil {
|
|
c.JSON(http.StatusInternalServerError, models.ErrorResponse{Error: err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, models.OKResponse{OK: true})
|
|
}
|
|
}
|