admin_handlers.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package controller
  2. import (
  3. "net/http"
  4. "git.aetherial.dev/aeth/keiji/pkg/helpers"
  5. "github.com/gin-gonic/gin"
  6. )
  7. const AUTH_COOKIE_NAME = "X-Server-Auth"
  8. // @Name ServeLogin
  9. // @Summary serves the HTML login page
  10. // @Tags admin
  11. // @Router /login [get]
  12. func (c *Controller) ServeLogin(ctx *gin.Context) {
  13. cookie, _ := ctx.Cookie(AUTH_COOKIE_NAME)
  14. if c.Cache.Read(cookie) {
  15. ctx.Redirect(302, "/home")
  16. }
  17. ctx.HTML(http.StatusOK, "login", gin.H{
  18. "heading": "aetherial.dev login",
  19. })
  20. }
  21. // @Name Auth
  22. // @Summary serves recieves admin user and pass, sets a cookie
  23. // @Tags admin
  24. // @Param cred body helpers.Credentials true "Admin Credentials"
  25. // @Router /login [post]
  26. func (c *Controller) Auth(ctx *gin.Context) {
  27. var cred helpers.Credentials
  28. err := ctx.ShouldBind(&cred)
  29. if err != nil {
  30. ctx.JSON(400, map[string]string{
  31. "Error": err.Error(),
  32. })
  33. return
  34. }
  35. cookie, err := helpers.Authorize(&cred, c.Cache)
  36. if err != nil {
  37. ctx.JSON(400, map[string]string{
  38. "Error": err.Error(),
  39. })
  40. return
  41. }
  42. ctx.SetCookie(AUTH_COOKIE_NAME, cookie, 3600, "/", c.Domain, false, false)
  43. ctx.Header("HX-Redirect", "/admin/panel")
  44. }
  45. /*
  46. @Name AddAdminTableEntry
  47. @Summary add an entry to the admin table
  48. @Tags admin
  49. @Router /admin/panel
  50. */
  51. func (c *Controller) AddAdminTableEntry(ctx *gin.Context) {
  52. tables := make(map[string][]helpers.TableData)
  53. adminPage := helpers.AdminPage{Tables: tables}
  54. err := ctx.ShouldBind(&adminPage)
  55. if err != nil {
  56. ctx.JSON(400, map[string]string{
  57. "Error": err.Error(),
  58. })
  59. return
  60. }
  61. for category := range adminPage.Tables {
  62. for entry := range adminPage.Tables[category] {
  63. err := c.database.AddAdminTableEntry(adminPage.Tables[category][entry], category)
  64. if err != nil {
  65. ctx.JSON(400, map[string]string{
  66. "Error": err.Error(),
  67. })
  68. return
  69. }
  70. }
  71. }
  72. ctx.Data(200, "text", []byte("Categories populated."))
  73. }
  74. /*
  75. @Name AddMenuItem
  76. @Summary add an entry to the sidebar menu
  77. @Tags admin
  78. @Router /admin/menu
  79. */
  80. func (c *Controller) AddMenuItem(ctx *gin.Context) {
  81. var item helpers.MenuLinkPair
  82. err := ctx.ShouldBind(&item); if err != nil {
  83. ctx.JSON(400, map[string]string{
  84. "Error": err.Error(),
  85. })
  86. return
  87. }
  88. err = c.database.AddMenuItem(item); if err != nil {
  89. ctx.JSON(400, map[string]string{
  90. "Error": err.Error(),
  91. })
  92. return
  93. }
  94. ctx.Data(200, "text", []byte("menu item added."))
  95. }
  96. /*
  97. @Name AddNavbarItem
  98. @Summary add an entry to the navbar
  99. @Tags admin
  100. @Router /admin/navbar
  101. */
  102. func (c *Controller) AddNavbarItem(ctx *gin.Context) {
  103. var item helpers.NavBarItem
  104. err := ctx.ShouldBind(&item); if err != nil {
  105. ctx.JSON(400, map[string]string{
  106. "Error": err.Error(),
  107. })
  108. return
  109. }
  110. err = c.database.AddNavbarItem(item); if err != nil {
  111. ctx.JSON(400, map[string]string{
  112. "Error": err.Error(),
  113. })
  114. return
  115. }
  116. ctx.Data(200, "text", []byte("navbar item added."))
  117. }
  118. // @Name AdminPanel
  119. // @Summary serve the admin panel page
  120. // @Tags admin
  121. // @Router /admin/panel [get]
  122. func (c *Controller) AdminPanel(ctx *gin.Context) {
  123. ctx.HTML(http.StatusOK, "admin", gin.H{
  124. "navigation": gin.H{
  125. "headers": c.database.GetNavBarLinks(),
  126. "menu": c.database.GetDropdownElements(),
  127. },
  128. "Tables": c.database.GetAdminTables().Tables,
  129. })
  130. }