admin_handlers.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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.HTML(http.StatusOK, "admin", gin.H{
  44. "navigation": gin.H{
  45. "headers": c.database.GetNavBarLinks(),
  46. "menu": c.database.GetDropdownElements(),
  47. },
  48. "Tables": c.database.GetAdminTables().Tables,
  49. })
  50. }
  51. /*
  52. @Name AddAdminTableEntry
  53. @Summary add an entry to the admin table
  54. @Tags admin
  55. @Router /admin/panel
  56. */
  57. func (c *Controller) AddAdminTableEntry(ctx *gin.Context) {
  58. tables := make(map[string][]helpers.TableData)
  59. adminPage := helpers.AdminPage{Tables: tables}
  60. err := ctx.ShouldBind(&adminPage)
  61. if err != nil {
  62. ctx.JSON(400, map[string]string{
  63. "Error": err.Error(),
  64. })
  65. return
  66. }
  67. for category := range adminPage.Tables {
  68. for entry := range adminPage.Tables[category] {
  69. err := c.database.AddAdminTableEntry(adminPage.Tables[category][entry], category)
  70. if err != nil {
  71. ctx.JSON(400, map[string]string{
  72. "Error": err.Error(),
  73. })
  74. return
  75. }
  76. }
  77. }
  78. ctx.Data(200, "text", []byte("Categories populated."))
  79. }
  80. /*
  81. @Name AddMenuItem
  82. @Summary add an entry to the sidebar menu
  83. @Tags admin
  84. @Router /admin/menu
  85. */
  86. func (c *Controller) AddMenuItem(ctx *gin.Context) {
  87. var item helpers.MenuLinkPair
  88. err := ctx.ShouldBind(&item)
  89. if err != nil {
  90. ctx.JSON(400, map[string]string{
  91. "Error": err.Error(),
  92. })
  93. return
  94. }
  95. err = c.database.AddMenuItem(item)
  96. if err != nil {
  97. ctx.JSON(400, map[string]string{
  98. "Error": err.Error(),
  99. })
  100. return
  101. }
  102. ctx.Data(200, "text", []byte("menu item added."))
  103. }
  104. /*
  105. @Name AddNavbarItem
  106. @Summary add an entry to the navbar
  107. @Tags admin
  108. @Router /admin/navbar
  109. */
  110. func (c *Controller) AddNavbarItem(ctx *gin.Context) {
  111. var item helpers.NavBarItem
  112. err := ctx.ShouldBind(&item)
  113. if err != nil {
  114. ctx.JSON(400, map[string]string{
  115. "Error": err.Error(),
  116. })
  117. return
  118. }
  119. err = c.database.AddNavbarItem(item)
  120. if err != nil {
  121. ctx.JSON(400, map[string]string{
  122. "Error": err.Error(),
  123. })
  124. return
  125. }
  126. ctx.Data(200, "text", []byte("navbar item added."))
  127. }
  128. // @Name AdminPanel
  129. // @Summary serve the admin panel page
  130. // @Tags admin
  131. // @Router /admin/panel [get]
  132. func (c *Controller) AdminPanel(ctx *gin.Context) {
  133. ctx.HTML(http.StatusOK, "admin", gin.H{
  134. "navigation": gin.H{
  135. "headers": c.database.GetNavBarLinks(),
  136. "menu": c.database.GetDropdownElements(),
  137. },
  138. "Tables": c.database.GetAdminTables().Tables,
  139. })
  140. }