52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ui
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"git.solsynth.dev/hydrogen/passport/pkg/database"
 | |
| 	"git.solsynth.dev/hydrogen/passport/pkg/models"
 | |
| 	"github.com/gofiber/fiber/v2"
 | |
| 	"github.com/gomarkdown/markdown"
 | |
| 	"github.com/gomarkdown/markdown/html"
 | |
| 	"github.com/gomarkdown/markdown/parser"
 | |
| 	"github.com/spf13/viper"
 | |
| 	"github.com/sujit-baniya/flash"
 | |
| 	"html/template"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| func selfUserinfoPage(c *fiber.Ctx) error {
 | |
| 	user := c.Locals("principal").(models.Account)
 | |
| 
 | |
| 	var data models.Account
 | |
| 	if err := database.C.
 | |
| 		Where(&models.Account{BaseModel: models.BaseModel{ID: user.ID}}).
 | |
| 		Preload("Profile").
 | |
| 		Preload("PersonalPage").
 | |
| 		Preload("Contacts").
 | |
| 		First(&data).Error; err != nil {
 | |
| 		return fiber.NewError(fiber.StatusInternalServerError, err.Error())
 | |
| 	}
 | |
| 
 | |
| 	var birthday = "Unknown"
 | |
| 	if data.Profile.Birthday != nil {
 | |
| 		birthday = data.Profile.Birthday.Format(time.RFC822)
 | |
| 	}
 | |
| 
 | |
| 	doc := parser.
 | |
| 		NewWithExtensions(parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock).
 | |
| 		Parse([]byte(data.PersonalPage.Content))
 | |
| 
 | |
| 	renderer := html.NewRenderer(html.RendererOptions{Flags: html.CommonFlags | html.HrefTargetBlank})
 | |
| 
 | |
| 	return c.Render("views/users/me", fiber.Map{
 | |
| 		"info":          flash.Get(c)["message"],
 | |
| 		"uid":           fmt.Sprintf("%08d", data.ID),
 | |
| 		"joined_at":     data.CreatedAt.Format(time.RFC822),
 | |
| 		"birthday_at":   birthday,
 | |
| 		"personal_page": template.HTML(markdown.Render(doc, renderer)),
 | |
| 		"userinfo":      data,
 | |
| 		"avatar":        fmt.Sprintf("%s/api/attachments/%s", viper.GetString("paperclip.endpoint"), data.Avatar),
 | |
| 		"banner":        fmt.Sprintf("%s/api/attachments/%s", viper.GetString("paperclip.endpoint"), data.Banner),
 | |
| 	}, "views/layouts/user-center")
 | |
| }
 |