12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package controller
- import (
- "net/http"
- "git.aetherial.dev/aeth/keiji/pkg/helpers"
- "github.com/gin-gonic/gin"
- )
- const AUTH_COOKIE_NAME = "X-Server-Auth"
- // AddDocument uploads a document to redis
- // @Description AddDocument uploads a document to redis
- // @Tags admin
- // @Success 200
- // @Param doc body helpers.DocumentUpload true "Redis Document Upload"
- // @Router /api/v1/admin/add-document [post]
- func (c *Controller) AddDocument(ctx *gin.Context) {
- var upload helpers.DocumentUpload
- err := ctx.BindJSON(&upload)
- if err != nil {
- ctx.JSON(400, map[string]string{
- "Error": err.Error(),
- })
- return
- }
- newPost := helpers.NewDocument(upload.Name, nil, upload.Text, upload.Category)
- err = helpers.AddDocument(newPost, c.RedisConfig)
- if err != nil {
- ctx.JSON(400, map[string]string{
- "Error": err.Error(),
- })
- return
- }
- }
- // @Name ServeLogin
- // @Summary serves the HTML login page
- // @Tags admin
- // @Router /login [get]
- func (c *Controller) ServeLogin(ctx *gin.Context) {
- cookie, _ := ctx.Cookie(AUTH_COOKIE_NAME)
- if c.Cache.Read(cookie) {
- ctx.Redirect(302, "/home")
- }
- ctx.HTML(http.StatusOK, "login", gin.H{
- "heading": "aetherial.dev login",
- })
- }
- // @Name Auth
- // @Summary serves recieves admin user and pass, sets a cookie
- // @Tags admin
- // @Param cred body helpers.Credentials true "Admin Credentials"
- // @Router /login [post]
- func (c *Controller) Auth(ctx *gin.Context) {
- var cred helpers.Credentials
- err := ctx.ShouldBind(&cred)
- if err != nil {
- ctx.JSON(400, map[string]string{
- "Error": err.Error(),
- })
- return
- }
- cookie, err := helpers.Authorize(&cred, c.Cache)
- if err != nil {
- ctx.JSON(400, map[string]string{
- "Error": err.Error(),
- })
- return
- }
- ctx.SetCookie(AUTH_COOKIE_NAME, cookie, 3600, "/", c.Domain, false, false)
- ctx.Header("HX-Redirect", "/admin/panel")
- }
- // @Name AdminPanel
- // @Summary serve the admin panel page
- // @Tags admin
- // @Router /admin/panel [get]
- func (c *Controller) AdminPanel(ctx *gin.Context) {
- ctx.HTML(http.StatusOK, "admin", gin.H{
- "navigation": gin.H{
- "headers": c.database.GetNavBarLinks(),
- "menu": c.database.GetDropdownElements(),
- },
- "Tables": c.AdminTables().Tables,
- })
- }
|