mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-24 06:28:42 +01:00
100 lines
2.3 KiB
Go
100 lines
2.3 KiB
Go
package profile
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/amir20/dozzle/internal/auth"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type Settings struct {
|
|
Search bool `json:"search"`
|
|
MenuWidth float32 `json:"menuWidth"`
|
|
SmallerScrollbars bool `json:"smallerScrollbars"`
|
|
ShowTimestamp bool `json:"showTimestamp"`
|
|
ShowStd bool `json:"showStd"`
|
|
ShowAllContainers bool `json:"showAllContainers"`
|
|
SoftWrap bool `json:"softWrap"`
|
|
CollapseNav bool `json:"collapseNav"`
|
|
AutomaticRedirect bool `json:"automaticRedirect"`
|
|
Size string `json:"size,omitempty"`
|
|
LightTheme string `json:"lightTheme,omitempty"`
|
|
HourStyle string `json:"hourStyle,omitempty"`
|
|
}
|
|
|
|
var data_path string
|
|
|
|
func init() {
|
|
path, err := filepath.Abs("./data")
|
|
if err != nil {
|
|
log.Fatalf("Unable to get absolute path for data directory: %s", err)
|
|
return
|
|
}
|
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
if err := os.Mkdir(path, 0755); err != nil {
|
|
log.Fatalf("Unable to create data directory: %s", err)
|
|
return
|
|
}
|
|
}
|
|
data_path = path
|
|
}
|
|
|
|
func SaveUserSettings(user *auth.User, settings *Settings) error {
|
|
path := filepath.Join(data_path, user.Username)
|
|
|
|
// Create user directory if it doesn't exist
|
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
if err := os.Mkdir(path, 0755); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
settings_path := filepath.Join(path, "settings.json")
|
|
|
|
data, err := json.MarshalIndent(settings, "", " ")
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
f, err := os.Create(settings_path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer f.Close()
|
|
|
|
if _, err := f.Write(data); err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Debugf("Saved settings for user %s", user.Username)
|
|
|
|
return f.Sync()
|
|
}
|
|
|
|
func LoadUserSettings(user *auth.User) (*Settings, error) {
|
|
path := filepath.Join(data_path, user.Username)
|
|
settings_path := filepath.Join(path, "settings.json")
|
|
|
|
if _, err := os.Stat(settings_path); os.IsNotExist(err) {
|
|
return &Settings{}, errors.New("Settings file does not exist")
|
|
}
|
|
|
|
f, err := os.Open(settings_path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
var settings Settings
|
|
if err := json.NewDecoder(f).Decode(&settings); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &settings, nil
|
|
}
|