♻️ Refactored event audit system

This commit is contained in:
2025-03-15 16:37:47 +08:00
parent 35e5eadb05
commit 32e91e2601
15 changed files with 113 additions and 69 deletions

View File

@ -170,7 +170,7 @@ func updateUserinfo(c *fiber.Ctx) error {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
services.AddEvent(user.ID, "profile.edit", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "profile.edit", nil, c.IP(), c.Get(fiber.HeaderUserAgent))
services.InvalidAuthCacheWithUser(account.ID)
return c.SendStatus(fiber.StatusOK)
@ -195,7 +195,7 @@ func updateAccountLanguage(c *fiber.Ctx) error {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
services.AddEvent(user.ID, "profile.edit.language", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "profile.edit.language", nil, c.IP(), c.Get(fiber.HeaderUserAgent))
services.InvalidAuthCacheWithUser(user.ID)
user.Language = data.Language

View File

@ -1,8 +1,6 @@
package api
import (
"strconv"
"git.solsynth.dev/hypernet/paperclip/pkg/filekit"
"git.solsynth.dev/hypernet/paperclip/pkg/proto"
"git.solsynth.dev/hypernet/passport/pkg/authkit/models"
@ -33,7 +31,7 @@ func setAvatar(c *fiber.Ctx) error {
if err := database.C.Save(&user).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "profile.edit.avatar", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "profile.edit.avatar", nil, c.IP(), c.Get(fiber.HeaderUserAgent))
services.InvalidAuthCacheWithUser(user.ID)
}
@ -71,7 +69,7 @@ func setBanner(c *fiber.Ctx) error {
if err := database.C.Save(&user).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "profile.edit.banner", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "profile.edit.banner", nil, c.IP(), c.Get(fiber.HeaderUserAgent))
services.InvalidAuthCacheWithUser(user.ID)
}

View File

@ -6,7 +6,6 @@ import (
"git.solsynth.dev/hypernet/passport/pkg/internal/services"
"git.solsynth.dev/hypernet/passport/pkg/internal/web/exts"
"github.com/gofiber/fiber/v2"
"strconv"
)
func listCheckInRecord(c *fiber.Ctx) error {
@ -99,7 +98,9 @@ func doCheckIn(c *fiber.Ctx) error {
if record, err := services.CheckIn(user); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "checkIn", strconv.Itoa(int(record.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "checkIn", map[string]any{
"check_in_record": record,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(record)
}
}

View File

@ -1,7 +1,6 @@
package api
import (
"strconv"
"time"
"git.solsynth.dev/hypernet/passport/pkg/authkit/models"
@ -87,7 +86,9 @@ func markNotificationRead(c *fiber.Ctx) error {
if err := database.C.Save(&notify).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "notifications.mark.read", strconv.Itoa(int(notify.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "notifications.mark.read", map[string]any{
"notification_id": notify.ID,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.SendStatus(fiber.StatusOK)
}
}
@ -111,7 +112,9 @@ func markNotificationReadBatch(c *fiber.Ctx) error {
Updates(&models.Notification{ReadAt: lo.ToPtr(time.Now())}).Error; err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "notifications.markBatch.read", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "notifications.markBatch.read", map[string]any{
"notification_id": data.MessageIDs,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.SendStatus(fiber.StatusOK)
}
}
@ -127,7 +130,9 @@ func markNotificationAllRead(c *fiber.Ctx) error {
Updates(&models.Notification{ReadAt: lo.ToPtr(time.Now())}); tx.Error != nil {
return fiber.NewError(fiber.StatusInternalServerError, tx.Error.Error())
} else {
services.AddEvent(user.ID, "notifications.markAll.read", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "notifications.markAll.read", map[string]any{
"count": tx.RowsAffected,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(fiber.Map{
"count": tx.RowsAffected,
})
@ -186,7 +191,9 @@ func addNotifySubscriber(c *fiber.Ctx) error {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
services.AddEvent(user.ID, "notifications.subscribe.push", data.DeviceID, c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "notifications.subscribe.push", map[string]any{
"device_id": data.DeviceID,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(subscriber)
}
@ -205,6 +212,8 @@ func removeNotifySubscriber(c *fiber.Ctx) error {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
services.AddEvent(user.ID, "notifications.unsubscribe.push", device, c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "notifications.unsubscribe.push", map[string]any{
"device_id": device,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.SendStatus(fiber.StatusOK)
}

View File

@ -95,7 +95,9 @@ func authorizeThirdClient(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "oauth.connect", map[string]any{
"client": client,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(fiber.Map{
"ticket": ticket,
"redirect_uri": redirect,
@ -118,7 +120,9 @@ func authorizeThirdClient(c *fiber.Ctx) error {
} else if access, refresh, err := services.GetToken(ticket); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "oauth.connect", map[string]any{
"client": client,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(fiber.Map{
"access_token": access,
"refresh_token": refresh,

View File

@ -36,7 +36,10 @@ func updateAuthPreference(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "preferences.edit", "auth", c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "preferences.edit", map[string]any{
"type": "auth",
"preferences": data,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
}
return c.JSON(cfg.Config.Data())
@ -73,7 +76,10 @@ func updateNotificationPreference(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "preferences.edit", "notifications", c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "preferences.edit", map[string]any{
"type": "notify",
"preferences": data,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
}
return c.JSON(notification)

View File

@ -1,8 +1,6 @@
package api
import (
"strconv"
"git.solsynth.dev/hypernet/passport/pkg/authkit/models"
"git.solsynth.dev/hypernet/passport/pkg/internal/database"
"git.solsynth.dev/hypernet/passport/pkg/internal/services"
@ -88,7 +86,9 @@ func createRealm(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "realms.new", strconv.Itoa(int(realm.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "realms.new", map[string]any{
"realm": realm,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
}
return c.JSON(realm)
@ -138,7 +138,9 @@ func editRealm(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "realms.edit", strconv.Itoa(int(realm.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "realms.edit", map[string]any{
"realm": realm,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
}
return c.JSON(realm)
@ -162,7 +164,9 @@ func deleteRealm(c *fiber.Ctx) error {
if err := services.DeleteRealm(realm); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "realms.delete", strconv.Itoa(int(realm.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "realms.delete", map[string]any{
"realm": realm,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
}
return c.SendStatus(fiber.StatusOK)

View File

@ -87,7 +87,9 @@ func editRelationship(c *fiber.Ctx) error {
if friendship, err := services.EditRelationship(relationship); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "relationships.edit", strconv.Itoa(int(relationship.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "relationships.edit", map[string]any{
"relationship": relationship,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(friendship)
}
}
@ -111,7 +113,9 @@ func deleteRelationship(c *fiber.Ctx) error {
if err := services.DeleteRelationship(relationship); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "relationships.delete", strconv.Itoa(int(relationship.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "relationships.delete", map[string]any{
"relationship": relationship,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(relationship)
}
}
@ -149,7 +153,9 @@ func makeFriendship(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "relationships.friends.new", strconv.Itoa(int(related.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "relationships.friends.new", map[string]any{
"related": related,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(friend)
}
}
@ -185,7 +191,9 @@ func makeBlockship(c *fiber.Ctx) error {
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "relationships.blocks.new", strconv.Itoa(int(related.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "relationships.blocks.new", map[string]any{
"related": related,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(friend)
}
}
@ -205,7 +213,9 @@ func acceptFriend(c *fiber.Ctx) error {
if err := services.HandleFriend(user, related, true); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "relationships.friends.accept", strconv.Itoa(relatedId), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "relationships.friends.accept", map[string]any{
"related": related,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.SendStatus(fiber.StatusOK)
}
}
@ -225,7 +235,9 @@ func declineFriend(c *fiber.Ctx) error {
if err := services.HandleFriend(user, related, false); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "relationships.friends.decline", strconv.Itoa(relatedId), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "relationships.friends.decline", map[string]any{
"related": related,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.SendStatus(fiber.StatusOK)
}
}

View File

@ -2,7 +2,6 @@ package api
import (
"fmt"
"strconv"
"time"
"git.solsynth.dev/hypernet/passport/pkg/authkit/models"
@ -91,7 +90,9 @@ func setStatus(c *fiber.Ctx) error {
if status, err := services.NewStatus(user, status); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "statuses.set", strconv.Itoa(int(status.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "statuses.set", map[string]any{
"status": status,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(status)
}
}
@ -130,7 +131,9 @@ func editStatus(c *fiber.Ctx) error {
if status, err := services.EditStatus(user, status); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else {
services.AddEvent(user.ID, "statuses.edit", strconv.Itoa(int(status.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "statuses.edit", map[string]any{
"status": status,
}, c.IP(), c.Get(fiber.HeaderUserAgent))
return c.JSON(status)
}
}
@ -144,7 +147,7 @@ func clearStatus(c *fiber.Ctx) error {
if err := services.ClearStatus(user); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} else {
services.AddEvent(user.ID, "statuses.clear", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
services.AddEvent(user.ID, "statuses.clear", nil, c.IP(), c.Get(fiber.HeaderUserAgent))
}
return c.SendStatus(fiber.StatusOK)