From 3a00f5d6a55d9cde4e4887782aaac05ca6c58c57 Mon Sep 17 00:00:00 2001 From: NanamiAdmin Date: Wed, 25 Mar 2026 10:49:30 +0800 Subject: [PATCH] refactor(instance): change instance deletion to use ID instead of name - Update DBRemoveFrpcInstance to use instanceID for deletion - Modify DeleteInstanceHandler to accept and validate instanceID - Improve error messages for invalid instanceID format - Update logging to use instanceID instead of instanceName --- database.go | 4 ++-- frpAct.go | 28 +++++++++++++++++----------- os.go | 3 +-- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/database.go b/database.go index d48d86e..694abd1 100644 --- a/database.go +++ b/database.go @@ -385,8 +385,8 @@ func DBQueryFrpcInstance(userID int, instanceName string) (FrpcInstance, error) return instance, nil } -func DBRemoveFrpcInstance(userID int, instanceName string) error { - _, err := frpcDB.Exec("DELETE FROM frpcInstances WHERE userID = ? AND name = ?", userID, instanceName) +func DBRemoveFrpcInstanceByID(instanceID int) error { + _, err := frpcDB.Exec("DELETE FROM frpcInstances WHERE id = ?", instanceID) if err != nil { return fmt.Errorf("failed to delete frpc instance: %w", err) } diff --git a/frpAct.go b/frpAct.go index 8ee4138..ccf1e08 100644 --- a/frpAct.go +++ b/frpAct.go @@ -219,9 +219,15 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) { return } - instanceName := getStringFromMap(reqMap, "instanceName") - if instanceName == "" { - SendErrorResponse(w, http.StatusBadRequest, "instanceName is required") + instanceIDStr := getStringFromMap(reqMap, "instanceID") + if instanceIDStr == "" { + SendErrorResponse(w, http.StatusBadRequest, "instanceID is required") + return + } + + instanceID, err := strconv.Atoi(instanceIDStr) + if err != nil { + SendErrorResponse(w, http.StatusBadRequest, "Invalid instanceID format") return } @@ -246,10 +252,10 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) { } var instance FrpcInstance - instance, err = DBQueryFrpcInstance(userID, instanceName) + instance, err = DBQueryFrpcInstanceByID(instanceID) if err == sql.ErrNoRows { SendErrorResponse(w, http.StatusNotFound, "Instance not found") - postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] User %d tried to delete a not existed instance: %s", userID, instanceName)) + postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] User %d tried to delete a not existed instance: %d", userID, instanceID)) return } if err != nil { @@ -259,8 +265,8 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) { } if instance.BootAtStart { - if err := removeBootService(user.Username, instanceName); err != nil { - postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to remove boot service for instance %s: %v", instanceName, err)) + if err := removeBootService(user.Username, instance.Name); err != nil { + postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to remove boot service for instance %s: %v", instance.Name, err)) SendErrorResponse(w, http.StatusInternalServerError, "Failed to remove boot service") return } @@ -274,16 +280,16 @@ func DeleteInstanceHandler(w http.ResponseWriter, r *http.Request) { } } - if err := DBRemoveFrpcInstance(userID, instanceName); err != nil { - postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to delete instance %s from database: %v", instanceName, err)) + if err := DBRemoveFrpcInstanceByID(instanceID); err != nil { + postLog.Error(fmt.Sprintf("[DeleteInstanceHandler] Failed to delete instance %d from database: %v", instanceID, err)) SendErrorResponse(w, http.StatusInternalServerError, "Failed to delete instance from database") return } SendSuccessResponse(w, "Instance deleted successfully", map[string]interface{}{ - "name": instanceName, + "id": instanceID, }) - postLog.Info(fmt.Sprintf("[DeleteInstanceHandler] Instance %s deleted successfully", instanceName)) + postLog.Info(fmt.Sprintf("[DeleteInstanceHandler] Instance %d deleted successfully", instanceID)) } func ModifyInstanceHandler(w http.ResponseWriter, r *http.Request) { diff --git a/os.go b/os.go index e62c083..adaf8de 100644 --- a/os.go +++ b/os.go @@ -1,7 +1,6 @@ package main import ( - "errors" "fmt" "os" "os/exec" @@ -56,7 +55,7 @@ func createBootService(username, instanceName, configPath, runUser string) error case "windows": return createWindowsBootService(username, instanceName, configPath) default: - return errors.New("unsupported init system") + return fmt.Errorf("unsupported init system: %s", initType) } }