mirror of
https://github.com/komari-monitor/komari.git
synced 2025-11-06 15:03:23 +00:00
102 lines
2.9 KiB
Go
102 lines
2.9 KiB
Go
package database
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/komari-monitor/komari/database/config"
|
|
"github.com/komari-monitor/komari/database/dbcore"
|
|
"github.com/komari-monitor/komari/database/models"
|
|
)
|
|
|
|
func GetPublicInfo() (any, error) {
|
|
cst, err := config.Get()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
db := dbcore.GetDBInstance()
|
|
tc := models.ThemeConfiguration{}
|
|
err = db.Model(&models.ThemeConfiguration{}).Where("short = ?", cst.Theme).First(&tc).Error
|
|
if err != nil {
|
|
tc.Data = "{}"
|
|
}
|
|
tc_data := gin.H{}
|
|
err = json.Unmarshal([]byte(tc.Data), &tc_data)
|
|
if err != nil {
|
|
log.Printf("%v", err)
|
|
}
|
|
// Try to load theme declaration file and merge defaults for managed configuration
|
|
// Theme declarations live in ./data/theme/<short>/komari-theme.json
|
|
if cst.Theme != "" && cst.Theme != "default" {
|
|
themeConfigPath := filepath.Join("./data/theme", cst.Theme, "komari-theme.json")
|
|
if _, err := os.Stat(themeConfigPath); err == nil {
|
|
b, err := os.ReadFile(themeConfigPath)
|
|
if err == nil {
|
|
var themeDecl struct {
|
|
Configuration struct {
|
|
Type string `json:"type"`
|
|
Data []models.ManagedThemeConfigurationItem `json:"data"`
|
|
} `json:"configuration"`
|
|
}
|
|
if err := json.Unmarshal(b, &themeDecl); err == nil {
|
|
if themeDecl.Configuration.Type == "managed" {
|
|
for _, item := range themeDecl.Configuration.Data {
|
|
if item.Key == "" {
|
|
continue
|
|
}
|
|
// missing
|
|
if _, exists := tc_data[item.Key]; !exists {
|
|
var def any = item.Default
|
|
// select
|
|
if item.Type == "select" {
|
|
if def == nil || def == "" {
|
|
if item.Options != "" {
|
|
opts := strings.Split(item.Options, ",")
|
|
if len(opts) > 0 {
|
|
def = strings.TrimSpace(opts[0])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// number->0, string->"", switch->false
|
|
if def == nil {
|
|
switch item.Type {
|
|
case "number":
|
|
def = 0
|
|
case "switch":
|
|
def = false
|
|
default:
|
|
def = ""
|
|
}
|
|
}
|
|
tc_data[item.Key] = def
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return gin.H{
|
|
"sitename": cst.Sitename,
|
|
"description": cst.Description,
|
|
"custom_head": cst.CustomHead,
|
|
"custom_body": cst.CustomBody,
|
|
"oauth_enable": cst.OAuthEnabled,
|
|
"oauth_provider": cst.OAuthProvider,
|
|
"disable_password_login": cst.DisablePasswordLogin,
|
|
"allow_cors": cst.AllowCors,
|
|
"record_enabled": cst.RecordEnabled,
|
|
"record_preserve_time": cst.RecordPreserveTime,
|
|
"ping_record_preserve_time": cst.PingRecordPreserveTime,
|
|
"private_site": cst.PrivateSite,
|
|
"theme": cst.Theme,
|
|
"theme_settings": tc_data,
|
|
}, nil
|
|
}
|