package handlers import ( "net/http" "sneak.berlin/go/webhooker/internal/database" ) // HandleTargetDelete handles deleting a target. A deleted // database target's archive writer is evicted and its handle // closed; the archive file is left on disk. func (h *Handlers) HandleTargetDelete() http.HandlerFunc { return h.deleteChildResource( "targetID", &database.Target{}, "failed to delete target", h.evictTargetArchiveWriter, targetDeleted, ) } // evictTargetArchiveWriter is evictArchiveWriter for one deleted // target, and leaves its archive file on disk for the same reason. // A target that is not a database target has no writer, and // evicting it does nothing. func (h *Handlers) evictTargetArchiveWriter(targetID string) { if h.archives == nil { return } h.archives.EvictTarget(targetID) } // HandleTargetToggle handles toggling a target's active state. func (h *Handlers) HandleTargetToggle() http.HandlerFunc { return h.toggleChildResource( "targetID", func(webhookID, childID string) (bool, error) { var tgt database.Target err := h.db.DB().Where( "id = ? AND webhook_id = ?", childID, webhookID, ).First(&tgt).Error if err != nil { return false, err } // Only the active column: saving the whole row would // write back the name and settings read above over an // edit saved since. active := !tgt.Active return active, h.db.DB().Model(&tgt). Update("active", active).Error }, "failed to toggle target", targetActivated, targetDeactivated, ) }