From e14f4007a43eb152ccf6811a0d991eb6889df4c7 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Wed, 10 Jan 2024 12:00:00 +1100 Subject: [PATCH] implement safe deletion --- controllers/controlGroups.go | 2 +- controllers/controlSafes.go | 43 +++++++++++++++++++++++++++++++++++- models/group.go | 2 +- models/safe.go | 32 +++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 3 deletions(-) diff --git a/controllers/controlGroups.go b/controllers/controlGroups.go index 29b6db0..34191c9 100644 --- a/controllers/controlGroups.go +++ b/controllers/controlGroups.go @@ -105,7 +105,7 @@ func DeleteGroupHandler(c *gin.Context) { //remove leading/trailing spaces in groupname g.GroupName = html.EscapeString(strings.TrimSpace(g.GroupName)) - // Confirm user account exists + // Confirm group exists testGroup, _ := models.GroupGetByName(g.GroupName) log.Printf("DeleteGroupHandler confirming group '%s' exists\n", g.GroupName) if (models.Group{} == testGroup) { diff --git a/controllers/controlSafes.go b/controllers/controlSafes.go index d1d8bb3..283a602 100644 --- a/controllers/controlSafes.go +++ b/controllers/controlSafes.go @@ -67,7 +67,7 @@ func AddSafeHandler(c *gin.Context) { s := models.Safe{SafeId: input.SafeId, SafeName: input.SafeName} - //remove leading/trailing spaces in groupname + //remove leading/trailing spaces in safe name s.SafeName = html.EscapeString(strings.TrimSpace(s.SafeName)) // Check if safe already exists @@ -94,3 +94,44 @@ func AddSafeHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "safe creation success"}) } + +func DeleteSafeHandler(c *gin.Context) { + var input SafeInput + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + // Input validation + if input.SafeId == 0 && len(input.SafeName) == 0 { + c.JSON(http.StatusBadRequest, gin.H{"error": "no safe name or id specified"}) + return + } + + s := models.Safe{SafeId: input.SafeId, SafeName: input.SafeName} + + //remove leading/trailing spaces in safe name + s.SafeName = html.EscapeString(strings.TrimSpace(s.SafeName)) + + // Confirm safe exists + testSafe, _ := models.SafeGetByName(s.SafeName) + log.Printf("DeleteSafeHandler confirming group '%s' exists\n", s.SafeName) + if (models.Safe{} == testSafe) { + errString := fmt.Sprintf("attempt to delete non-existing safe '%s'", s.SafeName) + log.Printf("DeleteSafeHandler %s\n", errString) + c.JSON(http.StatusBadRequest, gin.H{"error": errString}) + return + } else { + err := s.SafeDelete() + + if err != nil { + errString := fmt.Sprintf("error deleting safe : '%s'", err) + log.Printf("DeleteSafeHandler %s\n", errString) + c.JSON(http.StatusBadRequest, gin.H{"error": errString}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "safe deletion success"}) + } +} diff --git a/models/group.go b/models/group.go index 3bcbf59..6aaafa7 100644 --- a/models/group.go +++ b/models/group.go @@ -99,7 +99,7 @@ func (g *Group) GroupDelete() error { // Delete the group log.Printf("GroupDelete confirmed group exists, continuing with deletion of group '%s'\n", g.GroupName) - result, err := db.NamedExec((`DELETE FROM group WHERE GroupId = :GroupId`), g) + result, err := db.NamedExec((`DELETE FROM groups WHERE GroupId = :GroupId`), g) if err != nil { log.Printf("GroupDelete error executing sql delete : '%s'\n", err) diff --git a/models/safe.go b/models/safe.go index 406a866..ea2ba92 100644 --- a/models/safe.go +++ b/models/safe.go @@ -112,3 +112,35 @@ func (s *Safe) SafeAdd() (*Safe, error) { return s, nil } + +// SafeDelete removes a safe definition from the database +func (s *Safe) SafeDelete() error { + var err error + + // Validate group exists + safe, err := SafeGetByName(s.SafeName) + if err != nil && err.Error() == "safe not found" { + log.Printf("SafeDelete unable to validate safe exists : '%s'\n", err) + return err + } + + // Make sure we have a safe ID + if s.SafeId == 0 { + s.SafeId = safe.SafeId + } + + // Delete the safe + log.Printf("SafeDelete confirmed safe exists, continuing with deletion of safe '%s'\n", s.SafeName) + result, err := db.NamedExec((`DELETE FROM safes WHERE SafeId = :SafeId`), s) + + if err != nil { + log.Printf("SafeDelete error executing sql delete : '%s'\n", err) + return err + } else { + affected, _ := result.RowsAffected() + id, _ := result.LastInsertId() + log.Printf("SafeDelete returned result id '%d' affecting %d row(s).\n", id, affected) + } + + return nil +}