/* * Copyright (C) 2023 Jonni Liljamo * * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for * more information. */ package handlers import ( "log" "net" "net/http" "git.src.quest/~skye/felu-ddns/internal/db" "github.com/gin-gonic/gin" ) type postDomainData struct { Domain string `form:"domain"` ARecord string `form:"a_record"` } func PostDomain() gin.HandlerFunc { return func(c *gin.Context) { data := &postDomainData{} if err := c.Bind(data); err != nil { log.Printf("[felu] ERROR: Could not bind domain data: %v", err) c.String(http.StatusBadRequest, "Could not bind domain data") return } if data.Domain == "" { c.String(http.StatusBadRequest, "Domain can't be empty") c.Abort() return } if net.ParseIP(data.ARecord).To4() == nil { c.String(http.StatusBadRequest, "The A record is invalid") c.Abort() return } userId, exists := c.Get("user_id") if !exists { c.String(http.StatusInternalServerError, "This should not be possible, but don't quote me on that") c.Abort() return } err := db.CreateDomain(data.Domain, data.ARecord, userId.(string)) if err != nil { // FIXME: Handle better c.String(http.StatusInternalServerError, "Something went wrong while creating a new domain") c.Abort() return } c.Header("HX-Trigger", "update-domain-list") } } func DeleteDomain() gin.HandlerFunc { return func(c *gin.Context) { id := c.Param("id") err := db.DeleteDomain(id) if err != nil { // FIXME: Handle better c.String(http.StatusInternalServerError, "Something went wrong while creating deleting the domain") c.Abort() return } c.Header("HX-Trigger", "update-domain-list") } }