diff options
Diffstat (limited to 'controllers/post.go')
-rw-r--r-- | controllers/post.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/controllers/post.go b/controllers/post.go new file mode 100644 index 0000000..4ec49c4 --- /dev/null +++ b/controllers/post.go @@ -0,0 +1,51 @@ +package controllers + +import ( + "log" + "paperchan.club/database" + "paperchan.club/themagicpipe" + "database/sql" + "github.com/gofiber/fiber/v2" + "strconv" +) + +// data received by /api/post +type PostApi struct { + Picture string `json:"picture" xml:"picture" form:"picture"` + Thread string `json:"thread" xml:"thread" form:"thread"` +} + +func Publish(c *fiber.Ctx) error { + p := new(PostApi) + if err := c.BodyParser(p); err != nil { + return c.JSON(fiber.Map{ + "status": "error", + }) + } + picture := p.Picture + var thread sql.NullInt32 + if parsed, err := strconv.ParseInt(p.Thread, 10, 32); err != nil { + thread.Valid = false + } else { + thread.Int32 = int32(parsed) + thread.Valid = true + } + ip := c.IP() + fixedPic, err := themagicpipe.DataURLConverter(picture) + if err != nil { + return c.JSON(fiber.Map{ + "status": "error", + }) + } + db := database.DB + if _, err := db.Exec("INSERT INTO \"post\" (picture, ip_address, thread) VALUES ($1, $2, $3)", fixedPic, ip, thread); err == nil { + return c.JSON(fiber.Map{ + "status": "ok", + }) + } else { + log.Println(err) + return c.JSON(fiber.Map{ + "status": "database error", + }) + } +} |