User center page

This commit is contained in:
2024-04-21 12:20:06 +08:00
parent ee6e7324b2
commit 6b26cad796
23 changed files with 353 additions and 61 deletions

View File

@ -113,7 +113,7 @@ func editUserinfo(c *fiber.Ctx) error {
func killSession(c *fiber.Ctx) error {
user := c.Locals("principal").(models.Account)
id, _ := c.ParamsInt("sessionId", 0)
id, _ := c.ParamsInt("ticketId", 0)
if err := database.C.Delete(&models.AuthTicket{}, &models.AuthTicket{
BaseModel: models.BaseModel{ID: uint(id)},

View File

@ -28,29 +28,29 @@ func preConnect(c *fiber.Ctx) error {
user := c.Locals("principal").(models.Account)
var session models.AuthTicket
var ticket models.AuthTicket
if err := database.C.Where(&models.AuthTicket{
AccountID: user.ID,
ClientID: &client.ID,
}).Where("last_grant_at IS NULL").First(&session).Error; err == nil {
if session.ExpiredAt != nil && session.ExpiredAt.Unix() < time.Now().Unix() {
}).Where("last_grant_at IS NULL").First(&ticket).Error; err == nil {
if ticket.ExpiredAt != nil && ticket.ExpiredAt.Unix() < time.Now().Unix() {
return c.JSON(fiber.Map{
"client": client,
"session": nil,
"client": client,
"ticket": nil,
})
} else {
session, err = services.RegenSession(session)
ticket, err = services.RegenSession(ticket)
}
return c.JSON(fiber.Map{
"client": client,
"session": session,
"client": client,
"ticket": ticket,
})
}
return c.JSON(fiber.Map{
"client": client,
"session": nil,
"client": client,
"ticket": nil,
})
}
@ -86,7 +86,7 @@ func doConnect(c *fiber.Ctx) error {
} else {
services.AddEvent(user, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(fiber.Map{
"session": ticket,
"ticket": ticket,
"redirect_uri": redirect,
})
}

View File

@ -12,7 +12,7 @@ func getTickets(c *fiber.Ctx) error {
offset := c.QueryInt("offset", 0)
var count int64
var sessions []models.AuthTicket
var tickets []models.AuthTicket
if err := database.C.
Where(&models.AuthTicket{AccountID: user.ID}).
Model(&models.AuthTicket{}).
@ -25,12 +25,12 @@ func getTickets(c *fiber.Ctx) error {
Where(&models.AuthTicket{AccountID: user.ID}).
Limit(take).
Offset(offset).
Find(&sessions).Error; err != nil {
Find(&tickets).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
return c.JSON(fiber.Map{
"count": count,
"data": sessions,
"data": tickets,
})
}

View File

@ -88,7 +88,7 @@ func NewServer() {
me.Put("/page", authMiddleware, editPersonalPage)
me.Get("/events", authMiddleware, getEvents)
me.Get("/tickets", authMiddleware, getTickets)
me.Delete("/sessions/:sessionId", authMiddleware, killSession)
me.Delete("/tickets/:ticketId", authMiddleware, killSession)
me.Post("/confirm", doRegisterConfirm)

View File

@ -1,7 +1,48 @@
package ui
import "github.com/gofiber/fiber/v2"
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/sujit-baniya/flash"
"html/template"
"time"
)
func selfUserinfoPage(c *fiber.Ctx) error {
return c.Render("views/users/me/index", fiber.Map{})
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,
}, "views/layouts/user-center")
}

View File

@ -12,12 +12,10 @@ func MapUserInterface(A *fiber.App, authFunc func(c *fiber.Ctx, overrides ...str
if cookie := c.Cookies(services.CookieAccessKey); len(cookie) > 0 {
token = cookie
}
fmt.Println(token)
c.Locals("token", token)
if err := authFunc(c); err != nil {
fmt.Println(err)
uri := c.Request().URI().FullURI()
return c.Redirect(fmt.Sprintf("/sign-in?redirect_uri=%s", string(uri)))
} else {

View File

@ -12,7 +12,7 @@ func getOtherUserinfo(c *fiber.Ctx) error {
var account models.Account
if err := database.C.
Where(&models.Account{Name: alias}).
Omit("sessions", "challenges", "factors", "events", "clients", "notifications", "notify_subscribers").
Omit("tickets", "challenges", "factors", "events", "clients", "notifications", "notify_subscribers").
Preload("Profile").
First(&account).Error; err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())