content_handlers.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package controller
  2. import (
  3. "time"
  4. "io"
  5. "bytes"
  6. "log"
  7. "git.aetherial.dev/aeth/keiji/pkg/helpers"
  8. "github.com/gin-gonic/gin"
  9. )
  10. func (c *Controller) ServeBlogDirectory(ctx *gin.Context) {
  11. ctx.HTML(200, "admin", gin.H{
  12. "navigation": gin.H{
  13. "menu": c.database.GetDropdownElements(),
  14. "headers": c.database.GetNavBarLinks(),
  15. },
  16. "Tables": c.database.GetAdminTables().Tables,
  17. })
  18. }
  19. func (c *Controller) GetBlogPostEditor(ctx *gin.Context) {
  20. post, exist := ctx.Params.Get("id")
  21. if !exist {
  22. ctx.JSON(404, map[string]string{
  23. "Error": "the requested file could not be found",
  24. })
  25. return
  26. }
  27. doc, err := c.database.GetDocument(helpers.Identifier(post))
  28. if err != nil {
  29. ctx.JSON(500, map[string]string{
  30. "Error": err.Error(),
  31. })
  32. return
  33. }
  34. ctx.HTML(200, "blogpost_editor", gin.H{
  35. "navigation": gin.H{
  36. "menu": c.database.GetDropdownElements(),
  37. "headers": c.database.GetNavBarLinks(),
  38. },
  39. "HttpMethod": "patch",
  40. "Ident": doc.Ident,
  41. "Topics": helpers.Topics,
  42. "DefaultTopic": doc.Category,
  43. "Created": doc.Created,
  44. "Body": doc.Body,
  45. })
  46. }
  47. func (c *Controller) UpdateBlogPost(ctx *gin.Context) {
  48. var doc helpers.Document
  49. err := ctx.ShouldBind(&doc); if err != nil {
  50. ctx.HTML(500, "upload_status", gin.H{"UpdateMessage": "Update Failed!", "Color": "red"})
  51. return
  52. }
  53. err = c.database.UpdateDocument(doc); if err != nil {
  54. ctx.HTML(400, "upload_status", gin.H{"UpdateMessage": "Update Failed!", "Color": "red"})
  55. return
  56. }
  57. ctx.HTML(200, "upload_status", gin.H{"UpdateMessage": "Update Successful!", "Color": "green"})
  58. }
  59. func (c *Controller) ServeNewBlogPage(ctx *gin.Context) {
  60. ctx.HTML(200, "new_blogpost", gin.H{
  61. "navigation": gin.H{
  62. "menu": c.database.GetDropdownElements(),
  63. "headers": c.database.GetNavBarLinks(),
  64. },
  65. "HttpMethod": "post",
  66. "Topics": helpers.Topics,
  67. "Created": time.Now().UTC().String(),
  68. })
  69. }
  70. func (c *Controller) MakeBlogPost(ctx *gin.Context) {
  71. var doc helpers.Document
  72. err := ctx.ShouldBind(&doc); if err != nil {
  73. ctx.HTML(500, "upload_status", gin.H{"UpdateMessage": "Update Failed!", "Color": "red"})
  74. return
  75. }
  76. err = c.database.AddDocument(doc); if err != nil {
  77. ctx.HTML(400, "upload_status", gin.H{"UpdateMessage": "Update Failed!", "Color": "red"})
  78. return
  79. }
  80. ctx.HTML(200, "upload_status", gin.H{"UpdateMessage": "Update Successful!", "Color": "green"})
  81. }
  82. func (c *Controller) ServeFileUpload(ctx *gin.Context) {
  83. ctx.HTML(200, "upload", gin.H{
  84. "navigation": gin.H{
  85. "menu": c.database.GetDropdownElements(),
  86. "headers": c.database.GetNavBarLinks(),
  87. },
  88. })
  89. }
  90. func (c *Controller) SaveFile(ctx *gin.Context) {
  91. var img helpers.Image
  92. err := ctx.ShouldBind(&img); if err != nil {
  93. ctx.HTML(500, "upload_status", gin.H{"UpdateMessage": err, "Color": "red"})
  94. return
  95. }
  96. file, err := ctx.FormFile("file")
  97. if err != nil {
  98. ctx.HTML(500, "upload_status", gin.H{"UpdateMessage": err, "Color": "red"})
  99. return
  100. }
  101. fh, err := file.Open()
  102. if err != nil {
  103. ctx.HTML(500, "upload_status", gin.H{"UpdateMessage": err, "Color": "red"})
  104. return
  105. }
  106. fb := make([]byte, file.Size)
  107. var output bytes.Buffer
  108. for {
  109. n, err := fh.Read(fb)
  110. if err == io.EOF {
  111. break
  112. }
  113. if err != nil {
  114. log.Fatal(err)
  115. }
  116. output.Write(fb[:n])
  117. }
  118. err = c.database.AddImage(fb, img.Title, img.Desc); if err != nil {
  119. ctx.HTML(500, "upload_status", gin.H{"UpdateMessage": err, "Color": "red"})
  120. return
  121. }
  122. ctx.HTML(200, "upload_status", gin.H{"UpdateMessage": "Update Successful!", "Color": "green"})
  123. }