refactor(frpc): restructure instance management and config handling
- Move instance-related structs and functions to config.go - Remove serverAddr, serverPort, and authMethod from database schema - Implement new config parsing and encoding with nested key support - Update service management to use instanceID instead of username/name - Add GetServiceNameByInstanceID helper function - Update API documentation for auth.method field change
This commit is contained in:
+26
-17
@@ -31,9 +31,6 @@ type FrpcInstance struct {
|
||||
ID int
|
||||
UserID int
|
||||
Name string
|
||||
ServerAddr string
|
||||
ServerPort string
|
||||
AuthMethod string
|
||||
BootAtStart bool
|
||||
RunUser string
|
||||
ConfigPath string
|
||||
@@ -275,9 +272,6 @@ func InitFrpcDatabase(dbPath string) error {
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
userID INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
serverAddr TEXT NOT NULL,
|
||||
serverPort TEXT NOT NULL,
|
||||
auth_method TEXT NOT NULL,
|
||||
bootAtStart INTEGER NOT NULL DEFAULT 0,
|
||||
runUser TEXT NOT NULL DEFAULT 'root',
|
||||
configPath TEXT NOT NULL,
|
||||
@@ -353,8 +347,8 @@ func DBQuerySpecificUser(userID int) (User, error) { // Query user by ID
|
||||
}
|
||||
|
||||
func DBAddFrpcInstance(instance FrpcInstance) error {
|
||||
_, err := frpcDB.Exec("INSERT INTO frpcInstances (userID, name, serverAddr, serverPort, auth_method, bootAtStart, runUser, configPath, createdAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
instance.UserID, instance.Name, instance.ServerAddr, instance.ServerPort, instance.AuthMethod, instance.BootAtStart, instance.RunUser, instance.ConfigPath, time.Now().Format(time.RFC3339))
|
||||
_, err := frpcDB.Exec("INSERT INTO frpcInstances (userID, name, bootAtStart, runUser, configPath, createdAt) VALUES (?, ?, ?, ?, ?, ?)",
|
||||
instance.UserID, instance.Name, instance.BootAtStart, instance.RunUser, instance.ConfigPath, time.Now().Format(time.RFC3339))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to insert frpc instance: %w", err)
|
||||
}
|
||||
@@ -364,8 +358,8 @@ func DBAddFrpcInstance(instance FrpcInstance) error {
|
||||
func DBQueryFrpcInstanceByID(instanceID int) (FrpcInstance, error) {
|
||||
var instance FrpcInstance
|
||||
var createdAtStr string
|
||||
err := frpcDB.QueryRow("SELECT id, userID, name, serverAddr, serverPort, auth_method, bootAtStart, runUser, configPath, createdAt FROM frpcInstances WHERE id = ?", instanceID).Scan(
|
||||
&instance.ID, &instance.UserID, &instance.Name, &instance.ServerAddr, &instance.ServerPort, &instance.AuthMethod, &instance.BootAtStart, &instance.RunUser, &instance.ConfigPath, &createdAtStr)
|
||||
err := frpcDB.QueryRow("SELECT id, userID, name, bootAtStart, runUser, configPath, createdAt FROM frpcInstances WHERE id = ?", instanceID).Scan(
|
||||
&instance.ID, &instance.UserID, &instance.Name, &instance.BootAtStart, &instance.RunUser, &instance.ConfigPath, &createdAtStr)
|
||||
if err != nil {
|
||||
return instance, fmt.Errorf("failed to query frpc instance: %w", err)
|
||||
}
|
||||
@@ -376,8 +370,8 @@ func DBQueryFrpcInstanceByID(instanceID int) (FrpcInstance, error) {
|
||||
func DBQueryFrpcInstance(userID int, instanceName string) (FrpcInstance, error) {
|
||||
var instance FrpcInstance
|
||||
var createdAtStr string
|
||||
err := frpcDB.QueryRow("SELECT id, userID, name, serverAddr, serverPort, auth_method, bootAtStart, runUser, configPath, createdAt FROM frpcInstances WHERE userID = ? AND name = ?", userID, instanceName).Scan(
|
||||
&instance.ID, &instance.UserID, &instance.Name, &instance.ServerAddr, &instance.ServerPort, &instance.AuthMethod, &instance.BootAtStart, &instance.RunUser, &instance.ConfigPath, &createdAtStr)
|
||||
err := frpcDB.QueryRow("SELECT id, userID, name, bootAtStart, runUser, configPath, createdAt FROM frpcInstances WHERE userID = ? AND name = ?", userID, instanceName).Scan(
|
||||
&instance.ID, &instance.UserID, &instance.Name, &instance.BootAtStart, &instance.RunUser, &instance.ConfigPath, &createdAtStr)
|
||||
if err != nil {
|
||||
return instance, fmt.Errorf("failed to query frpc instance: %w", err)
|
||||
}
|
||||
@@ -394,8 +388,8 @@ func DBRemoveFrpcInstanceByID(instanceID int) error {
|
||||
}
|
||||
|
||||
func DBUpdateFrpcInstance(instance FrpcInstance) error {
|
||||
_, err := frpcDB.Exec("UPDATE frpcInstances SET name = ?, serverAddr = ?, serverPort = ?, auth_method = ?, bootAtStart = ?, runUser = ?, configPath = ? WHERE id = ?",
|
||||
instance.Name, instance.ServerAddr, instance.ServerPort, instance.AuthMethod, instance.BootAtStart, instance.RunUser, instance.ConfigPath, instance.ID)
|
||||
_, err := frpcDB.Exec("UPDATE frpcInstances SET bootAtStart = ?, runUser = ?, configPath = ? WHERE id = ?",
|
||||
instance.BootAtStart, instance.RunUser, instance.ConfigPath, instance.ID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update frpc instance: %w", err)
|
||||
}
|
||||
@@ -404,8 +398,7 @@ func DBUpdateFrpcInstance(instance FrpcInstance) error {
|
||||
|
||||
func DBListFrpcInstances() ([]FrpcInstance, error) {
|
||||
rows, err := frpcDB.Query(`
|
||||
SELECT fi.id, fi.userID, fi.name, fi.serverAddr, fi.serverPort, fi.auth_method,
|
||||
fi.bootAtStart, fi.runUser, fi.configPath, fi.createdAt, u.username
|
||||
SELECT fi.id, fi.userID, fi.name, fi.bootAtStart, fi.runUser, fi.configPath, fi.createdAt, u.username
|
||||
FROM frpcInstances fi
|
||||
JOIN userLogin u ON fi.userID = u.userID
|
||||
`)
|
||||
@@ -418,7 +411,7 @@ func DBListFrpcInstances() ([]FrpcInstance, error) {
|
||||
for rows.Next() {
|
||||
var instance FrpcInstance
|
||||
var createdAtStr string
|
||||
if err := rows.Scan(&instance.ID, &instance.UserID, &instance.Name, &instance.ServerAddr, &instance.ServerPort, &instance.AuthMethod, &instance.BootAtStart, &instance.RunUser, &instance.ConfigPath, &createdAtStr, &instance.CreatedBy); err != nil {
|
||||
if err := rows.Scan(&instance.ID, &instance.UserID, &instance.Name, &instance.BootAtStart, &instance.RunUser, &instance.ConfigPath, &createdAtStr, &instance.CreatedBy); err != nil {
|
||||
return nil, fmt.Errorf("failed to scan frpc instance: %w", err)
|
||||
}
|
||||
instance.CreatedAt, _ = time.Parse(time.RFC3339, createdAtStr)
|
||||
@@ -431,3 +424,19 @@ func DBListFrpcInstances() ([]FrpcInstance, error) {
|
||||
|
||||
return instances, nil
|
||||
}
|
||||
|
||||
func GetServiceNameByInstanceID(instanceID int) (string, error) {
|
||||
instance, err := DBQueryFrpcInstanceByID(instanceID)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to query frpc instance: %w", err)
|
||||
}
|
||||
|
||||
user, err := GetUserByID(instance.UserID)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to get user info: %w", err)
|
||||
}
|
||||
|
||||
serviceName := fmt.Sprintf("superfrpc_%s_%s", user.Username, instance.Name)
|
||||
postLog.Debug(fmt.Sprintf("[GetServiceNameByInstanceID] instanceID: %d, serviceName: %s", instanceID, serviceName))
|
||||
return serviceName, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user