admin_handlers.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. // AddDocument uploads a document to redis
  9. // @Description AddDocument uploads a document to redis
  10. // @Tags admin
  11. // @Success 200
  12. // @Param doc body helpers.DocumentUpload true "Redis Document Upload"
  13. // @Router /api/v1/admin/add-document [post]
  14. func (c *Controller) AddDocument(ctx *gin.Context) {
  15. var upload helpers.DocumentUpload
  16. err := ctx.BindJSON(&upload)
  17. if err != nil {
  18. ctx.JSON(400, map[string]string{
  19. "Error": err.Error(),
  20. })
  21. return
  22. }
  23. newPost := helpers.NewDocument(upload.Name, nil, upload.Text, upload.Category)
  24. err = helpers.AddDocument(newPost, c.RedisConfig)
  25. if err != nil {
  26. ctx.JSON(400, map[string]string{
  27. "Error": err.Error(),
  28. })
  29. return
  30. }
  31. }
  32. // @Name ServeLogin
  33. // @Summary serves the HTML login page
  34. // @Tags admin
  35. // @Router /login [get]
  36. func (c *Controller) ServeLogin(ctx *gin.Context) {
  37. cookie, _ := ctx.Cookie(AUTH_COOKIE_NAME)
  38. if c.Cache.Read(cookie) {
  39. ctx.Redirect(302, "/home")
  40. }
  41. ctx.HTML(http.StatusOK, "login", gin.H{
  42. "heading": "aetherial.dev login",
  43. })
  44. }
  45. // @Name Auth
  46. // @Summary serves recieves admin user and pass, sets a cookie
  47. // @Tags admin
  48. // @Param cred body helpers.Credentials true "Admin Credentials"
  49. // @Router /login [post]
  50. func (c *Controller) Auth(ctx *gin.Context) {
  51. var cred helpers.Credentials
  52. err := ctx.ShouldBind(&cred)
  53. if err != nil {
  54. ctx.JSON(400, map[string]string{
  55. "Error": err.Error(),
  56. })
  57. return
  58. }
  59. cookie, err := helpers.Authorize(&cred, c.Cache)
  60. if err != nil {
  61. ctx.JSON(400, map[string]string{
  62. "Error": err.Error(),
  63. })
  64. return
  65. }
  66. ctx.SetCookie(AUTH_COOKIE_NAME, cookie, 3600, "/", c.Domain, false, false)
  67. ctx.Header("HX-Redirect", "/admin/panel")
  68. }
  69. // @Name AdminPanel
  70. // @Summary serve the admin panel page
  71. // @Tags admin
  72. // @Router /admin/panel [get]
  73. func (c *Controller) AdminPanel(ctx *gin.Context) {
  74. ctx.HTML(http.StatusOK, "admin", gin.H{
  75. "navigation": gin.H{
  76. "headers": c.Headers().Elements,
  77. "menu": c.Menu(),
  78. },
  79. "Tables": c.AdminTables().Tables,
  80. })
  81. }