87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
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,
|
|
},
|
|
}
|
|
}
|
|
|
|
|