feat: ent ORM, admin UI, client auth, Fyne GUI, Windows/MSI packaging
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user