admin_handlers.go 2.1 KB

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