deletion of webmentions

This commit is contained in:
Niko Abeler 2023-08-09 20:48:16 +02:00
parent 723a6000bf
commit 653efcc487
7 changed files with 62 additions and 6 deletions

View File

@ -130,10 +130,6 @@ func (s *WebmentionService) ProcessWebmention(source string, target string) erro
}
entryId := UrlToEntryId(target)
println(entryId)
println(entryId)
println(entryId)
println(entryId)
_, err = s.EntryRepository.FindById(entryId)
if err != nil {
return err

View File

@ -70,6 +70,9 @@ func (r *DefaultEntryRepo) Create(entry model.Entry) error {
// Delete implements repository.EntryRepository.
func (r *DefaultEntryRepo) Delete(entry model.Entry) error {
if entry.ID() == "" {
return errors.New("entry not found")
}
_, err := r.db.Exec("DELETE FROM entries WHERE id = ?", entry.ID())
return err
}

View File

@ -78,8 +78,12 @@ func (repo *DefaultInteractionRepo) Create(interaction model.Interaction) error
}
// Delete implements repository.InteractionRepository.
func (*DefaultInteractionRepo) Delete(interaction model.Interaction) error {
panic("unimplemented")
func (repo *DefaultInteractionRepo) Delete(interaction model.Interaction) error {
if interaction.ID() == "" {
return errors.New("interaction not found")
}
_, err := repo.db.Exec("DELETE FROM interactions WHERE id = ?", interaction.ID())
return err
}
// FindAll implements repository.InteractionRepository.

View File

@ -51,6 +51,15 @@
{{range .Interactions}}
<li>
{{ .Content }}
{{ if $.LoggedIn }}
<form method="post" action="/admin/interactions/{{.ID}}/delete/" class="grid">
<label for="confirm">
Confirm deletion
<input type="checkbox" name="confirm" id="confirm" required />
</label>
<input type="submit" class="secondary outline" value="Delete" />
</form>
{{ end }}
</li>
{{end}}
</ul>

View File

@ -0,0 +1,41 @@
package web
import (
"owl-blogs/app/repository"
"github.com/gofiber/fiber/v2"
)
type AdminInteractionHandler struct {
interactionRepo repository.InteractionRepository
configRepo repository.ConfigRepository
}
func NewAdminInteractionHandler(configRepo repository.ConfigRepository, interactionRepo repository.InteractionRepository) *AdminInteractionHandler {
return &AdminInteractionHandler{
interactionRepo: interactionRepo,
configRepo: configRepo,
}
}
func (h *AdminInteractionHandler) HandleDelete(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
id := c.Params("id")
inter, err := h.interactionRepo.FindById(id)
entryId := inter.EntryID()
if err != nil {
return err
}
confirm := c.FormValue("confirm")
if confirm != "on" {
return c.Redirect("/posts/" + inter.ID() + "/")
}
err = h.interactionRepo.Delete(inter)
if err != nil {
return err
}
return c.Redirect("/posts/" + entryId + "/")
}

View File

@ -57,6 +57,7 @@ func NewWebApp(
adminHandler := NewAdminHandler(configRepo, configRegister, typeRegistry)
draftHandler := NewDraftHandler(entryService, configRepo)
binaryManageHandler := NewBinaryManageHandler(configRepo, binService)
adminInteractionHandler := NewAdminInteractionHandler(configRepo, interactionRepo)
admin := app.Group("/admin")
admin.Use(middleware.NewAuthMiddleware(authorService).Handle)
admin.Get("/", adminHandler.Handle)
@ -66,6 +67,7 @@ func NewWebApp(
admin.Get("/binaries/", binaryManageHandler.Handle)
admin.Post("/binaries/new/", binaryManageHandler.HandleUpload)
admin.Post("/binaries/delete", binaryManageHandler.HandleDelete)
admin.Post("/interactions/:id/delete/", adminInteractionHandler.HandleDelete)
// Editor
editor := app.Group("/editor")

View File

@ -26,6 +26,7 @@ func (h *WebmentionHandler) Handle(c *fiber.Ctx) error {
target := c.FormValue("target")
source := c.FormValue("source")
println("Incoming webmention")
println("target", target)
println("source", source)