package db import ( "context" "encoding/json" "fmt" v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/db/ent/serverconfig" ) const configKey = "server_config" func LoadServerConfig() (*v1.ServerConfig, error) { ctx := context.Background() sc, err := client.ServerConfig.Query().Where(serverconfig.KeyEQ(configKey)).Only(ctx) if err != nil { return nil, err } cfg := &v1.ServerConfig{} if err := json.Unmarshal([]byte(sc.Value), cfg); err != nil { return nil, fmt.Errorf("failed to unmarshal server config from db: %w", err) } return cfg, nil } func SaveServerConfig(cfg *v1.ServerConfig) error { ctx := context.Background() return SaveServerConfigWithContext(ctx, cfg) } func SaveServerConfigWithContext(ctx context.Context, cfg *v1.ServerConfig) error { cfg.Version = "" data, err := json.Marshal(cfg) if err != nil { return fmt.Errorf("failed to marshal server config: %w", err) } exists, err := client.ServerConfig.Query().Where(serverconfig.KeyEQ(configKey)).Exist(ctx) if err != nil { return err } if exists { _, err = client.ServerConfig.Update(). Where(serverconfig.KeyEQ(configKey)). SetValue(string(data)). Save(ctx) } else { _, err = client.ServerConfig.Create(). SetKey(configKey). SetValue(string(data)). Save(ctx) } return err } func HasServerConfig() (bool, error) { ctx := context.Background() return client.ServerConfig.Query().Where(serverconfig.KeyEQ(configKey)).Exist(ctx) } func SaveDefaultServerConfig() error { cfg := DefaultServerConfig() return SaveServerConfig(cfg) } func DefaultServerConfig() *v1.ServerConfig { return &v1.ServerConfig{ BindAddr: "0.0.0.0", BindPort: 7000, WebServer: v1.WebServerConfig{ Addr: "0.0.0.0", Port: 7500, User: "admin", Password: "admin", }, Log: v1.LogConfig{ To: "console", Level: "info", MaxDays: 3, }, } }