Compare commits
No commits in common. "8e3ce097342ad7de5656589bd949f3ca9ed162f2" and "06bd632f37edda5bb485de6437f5c9ca5d4ec374" have entirely different histories.
8e3ce09734
...
06bd632f37
13
.idea/workspace.xml
generated
13
.idea/workspace.xml
generated
@ -4,9 +4,10 @@
|
|||||||
<option name="autoReloadType" value="ALL" />
|
<option name="autoReloadType" value="ALL" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="3fefb2c4-b6f9-466b-a523-53352e8d6f95" name="更改" comment=":sparkles: More event logs point">
|
<list default="true" id="3fefb2c4-b6f9-466b-a523-53352e8d6f95" name="更改" comment=":bug: Bug fixes on multi-factors based authentication">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/pkg/internal/services/ticket.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/ticket.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/pkg/internal/models/auth.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/models/auth.go" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/pkg/internal/server/api/preferences_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/preferences_api.go" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@ -153,6 +154,9 @@
|
|||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
|
<MESSAGE value=":bug: Fix compare perm node function" />
|
||||||
|
<MESSAGE value=":sparkles: Bot related bot key apis" />
|
||||||
|
<MESSAGE value=":bug: Fix bot related bot key apis path error" />
|
||||||
<MESSAGE value=":bug: Fix path parameters misplaced" />
|
<MESSAGE value=":bug: Fix path parameters misplaced" />
|
||||||
<MESSAGE value=":bug: Fix api key wasn't in auto maintain range" />
|
<MESSAGE value=":bug: Fix api key wasn't in auto maintain range" />
|
||||||
<MESSAGE value=":bug: Fix api key missing account id" />
|
<MESSAGE value=":bug: Fix api key missing account id" />
|
||||||
@ -175,10 +179,7 @@
|
|||||||
<MESSAGE value=":sparkles: Allow user view and remove notification subscriptions" />
|
<MESSAGE value=":sparkles: Allow user view and remove notification subscriptions" />
|
||||||
<MESSAGE value=":recycle: Improve notifications mark read system" />
|
<MESSAGE value=":recycle: Improve notifications mark read system" />
|
||||||
<MESSAGE value=":bug: Bug fixes on multi-factors based authentication" />
|
<MESSAGE value=":bug: Bug fixes on multi-factors based authentication" />
|
||||||
<MESSAGE value=":bug: Bug fixes on settings auth preferences" />
|
<option name="LAST_COMMIT_MESSAGE" value=":bug: Bug fixes on multi-factors based authentication" />
|
||||||
<MESSAGE value=":sparkles: Implement event recorder grpc" />
|
|
||||||
<MESSAGE value=":sparkles: More event logs point" />
|
|
||||||
<option name="LAST_COMMIT_MESSAGE" value=":sparkles: More event logs point" />
|
|
||||||
</component>
|
</component>
|
||||||
<component name="VgoProject">
|
<component name="VgoProject">
|
||||||
<settings-migrated>true</settings-migrated>
|
<settings-migrated>true</settings-migrated>
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
package grpc
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"git.solsynth.dev/hydrogen/dealer/pkg/proto"
|
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (v *Server) RecordEvent(ctx context.Context, request *proto.RecordEventRequest) (*proto.RecordEventResponse, error) {
|
|
||||||
services.AddEvent(
|
|
||||||
uint(request.GetUserId()),
|
|
||||||
request.GetAction(),
|
|
||||||
request.GetTarget(),
|
|
||||||
request.GetIp(),
|
|
||||||
request.GetUserAgent(),
|
|
||||||
)
|
|
||||||
|
|
||||||
return &proto.RecordEventResponse{IsSuccess: true}, nil
|
|
||||||
}
|
|
@ -17,7 +17,6 @@ type Server struct {
|
|||||||
proto.UnimplementedNotifierServer
|
proto.UnimplementedNotifierServer
|
||||||
proto.UnimplementedRealmServer
|
proto.UnimplementedRealmServer
|
||||||
proto.UnimplementedStreamControllerServer
|
proto.UnimplementedStreamControllerServer
|
||||||
proto.UnimplementedEventRecorderServer
|
|
||||||
health.UnimplementedHealthServer
|
health.UnimplementedHealthServer
|
||||||
|
|
||||||
srv *grpc.Server
|
srv *grpc.Server
|
||||||
@ -32,7 +31,6 @@ func NewServer() *Server {
|
|||||||
proto.RegisterNotifierServer(server.srv, server)
|
proto.RegisterNotifierServer(server.srv, server)
|
||||||
proto.RegisterRealmServer(server.srv, server)
|
proto.RegisterRealmServer(server.srv, server)
|
||||||
proto.RegisterStreamControllerServer(server.srv, server)
|
proto.RegisterStreamControllerServer(server.srv, server)
|
||||||
proto.RegisterEventRecorderServer(server.srv, server)
|
|
||||||
health.RegisterHealthServer(server.srv, server)
|
health.RegisterHealthServer(server.srv, server)
|
||||||
|
|
||||||
reflection.Register(server.srv)
|
reflection.Register(server.srv)
|
||||||
|
@ -155,7 +155,6 @@ func editUserinfo(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusInternalServerError, err.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.InvalidAuthCacheWithUser(account.ID)
|
services.InvalidAuthCacheWithUser(account.ID)
|
||||||
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"strconv"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func setAvatar(c *fiber.Ctx) error {
|
func setAvatar(c *fiber.Ctx) error {
|
||||||
@ -28,7 +27,6 @@ func setAvatar(c *fiber.Ctx) error {
|
|||||||
if err := database.C.Save(&user).Error; err != nil {
|
if err := database.C.Save(&user).Error; err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "profile.edit.avatar", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
services.InvalidAuthCacheWithUser(user.ID)
|
services.InvalidAuthCacheWithUser(user.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +52,6 @@ func setBanner(c *fiber.Ctx) error {
|
|||||||
if err := database.C.Save(&user).Error; err != nil {
|
if err := database.C.Save(&user).Error; err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "profile.edit.banner", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
services.InvalidAuthCacheWithUser(user.ID)
|
services.InvalidAuthCacheWithUser(user.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
"strconv"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -67,7 +66,6 @@ func markNotificationRead(c *fiber.Ctx) error {
|
|||||||
if err := database.C.Save(¬ify).Error; err != nil {
|
if err := database.C.Save(¬ify).Error; err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "notifications.mark.read", strconv.Itoa(int(notify.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,7 +89,6 @@ func markNotificationReadBatch(c *fiber.Ctx) error {
|
|||||||
Updates(&models.Notification{ReadAt: lo.ToPtr(time.Now())}).Error; err != nil {
|
Updates(&models.Notification{ReadAt: lo.ToPtr(time.Now())}).Error; err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "notifications.markAll.read", strconv.Itoa(int(user.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,7 +145,6 @@ func addNotifySubscriber(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
services.AddEvent(user.ID, "notifications.subscribe.push", data.DeviceID, c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(subscriber)
|
return c.JSON(subscriber)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,6 +163,5 @@ func removeNotifySubscriber(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
services.AddEvent(user.ID, "notifications.unsubscribe.push", device, c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ func authorizeThirdClient(c *fiber.Ctx) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
|
services.AddEvent(user, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
|
||||||
return c.JSON(fiber.Map{
|
return c.JSON(fiber.Map{
|
||||||
"ticket": ticket,
|
"ticket": ticket,
|
||||||
"redirect_uri": redirect,
|
"redirect_uri": redirect,
|
||||||
@ -118,7 +118,7 @@ func authorizeThirdClient(c *fiber.Ctx) error {
|
|||||||
} else if access, refresh, err := services.GetToken(ticket); err != nil {
|
} else if access, refresh, err := services.GetToken(ticket); err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
|
services.AddEvent(user, "oauth.connect", client.Alias, c.IP(), c.Get(fiber.HeaderUserAgent))
|
||||||
return c.JSON(fiber.Map{
|
return c.JSON(fiber.Map{
|
||||||
"access_token": access,
|
"access_token": access,
|
||||||
"refresh_token": refresh,
|
"refresh_token": refresh,
|
||||||
|
@ -35,8 +35,6 @@ func updateAuthPreference(c *fiber.Ctx) error {
|
|||||||
cfg, err := services.UpdateAuthPreference(user, data)
|
cfg, err := services.UpdateAuthPreference(user, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
|
||||||
services.AddEvent(user.ID, "preferences.edit", "auth", c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(cfg.Config.Data())
|
return c.JSON(cfg.Config.Data())
|
||||||
@ -72,8 +70,6 @@ func updateNotificationPreference(c *fiber.Ctx) error {
|
|||||||
notification, err := services.UpdateNotificationPreference(user, data.Config)
|
notification, err := services.UpdateNotificationPreference(user, data.Config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
|
||||||
services.AddEvent(user.ID, "preferences.edit", "notifications", c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(notification)
|
return c.JSON(notification)
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"strconv"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func getRealm(c *fiber.Ctx) error {
|
func getRealm(c *fiber.Ctx) error {
|
||||||
@ -86,10 +85,7 @@ func createRealm(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
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))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(realm)
|
return c.JSON(realm)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,8 +131,6 @@ func editRealm(c *fiber.Ctx) error {
|
|||||||
realm, err := services.EditRealm(realm)
|
realm, err := services.EditRealm(realm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
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))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(realm)
|
return c.JSON(realm)
|
||||||
@ -159,8 +153,6 @@ func deleteRealm(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
if err := services.DeleteRealm(realm); err != nil {
|
if err := services.DeleteRealm(realm); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
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))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"strconv"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func listRelationship(c *fiber.Ctx) error {
|
func listRelationship(c *fiber.Ctx) error {
|
||||||
@ -76,7 +75,6 @@ func editRelationship(c *fiber.Ctx) error {
|
|||||||
if friendship, err := services.EditRelationship(relationship); err != nil {
|
if friendship, err := services.EditRelationship(relationship); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "relationships.edit", strconv.Itoa(int(relationship.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(friendship)
|
return c.JSON(friendship)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,7 +98,6 @@ func deleteRelationship(c *fiber.Ctx) error {
|
|||||||
if err := services.DeleteRelationship(relationship); err != nil {
|
if err := services.DeleteRelationship(relationship); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "relationships.delete", strconv.Itoa(int(relationship.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(relationship)
|
return c.JSON(relationship)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -135,7 +132,6 @@ func makeFriendship(c *fiber.Ctx) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "relationships.friends.new", strconv.Itoa(relatedId), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(friend)
|
return c.JSON(friend)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,7 +164,6 @@ func makeBlockship(c *fiber.Ctx) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "relationships.blocks.new", strconv.Itoa(relatedId), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(friend)
|
return c.JSON(friend)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +183,6 @@ func acceptFriend(c *fiber.Ctx) error {
|
|||||||
if err := services.HandleFriend(user, related, true); err != nil {
|
if err := services.HandleFriend(user, related, true); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "relationships.friends.accept", strconv.Itoa(relatedId), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,7 +202,6 @@ func declineFriend(c *fiber.Ctx) error {
|
|||||||
if err := services.HandleFriend(user, related, false); err != nil {
|
if err := services.HandleFriend(user, related, false); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "relationships.friends.decline", strconv.Itoa(relatedId), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/server/exts"
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/services"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"strconv"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func listDailySignRecord(c *fiber.Ctx) error {
|
func listDailySignRecord(c *fiber.Ctx) error {
|
||||||
@ -99,7 +98,6 @@ func doDailySign(c *fiber.Ctx) error {
|
|||||||
if record, err := services.DailySign(user); err != nil {
|
if record, err := services.DailySign(user); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "dailySign", strconv.Itoa(int(record.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(record)
|
return c.JSON(record)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.solsynth.dev/hydrogen/passport/pkg/internal/database"
|
"git.solsynth.dev/hydrogen/passport/pkg/internal/database"
|
||||||
@ -91,7 +90,6 @@ func setStatus(c *fiber.Ctx) error {
|
|||||||
if status, err := services.NewStatus(user, status); err != nil {
|
if status, err := services.NewStatus(user, status); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "statuses.set", strconv.Itoa(int(status.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(status)
|
return c.JSON(status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +128,6 @@ func editStatus(c *fiber.Ctx) error {
|
|||||||
if status, err := services.EditStatus(user, status); err != nil {
|
if status, err := services.EditStatus(user, status); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
} else {
|
} else {
|
||||||
services.AddEvent(user.ID, "statuses.edit", strconv.Itoa(int(status.ID)), c.IP(), c.Get(fiber.HeaderUserAgent))
|
|
||||||
return c.JSON(status)
|
return c.JSON(status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,8 +140,6 @@ func clearStatus(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
if err := services.ClearStatus(user); err != nil {
|
if err := services.ClearStatus(user); err != nil {
|
||||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
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))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
return c.SendStatus(fiber.StatusOK)
|
||||||
|
@ -10,13 +10,13 @@ var writeEventQueue []models.ActionEvent
|
|||||||
var writeAuditQueue []models.AuditRecord
|
var writeAuditQueue []models.AuditRecord
|
||||||
|
|
||||||
// AddEvent to keep operation logs by user themselves clear to query
|
// AddEvent to keep operation logs by user themselves clear to query
|
||||||
func AddEvent(user uint, event, target, ip, ua string) {
|
func AddEvent(user models.Account, event, target, ip, ua string) {
|
||||||
writeEventQueue = append(writeEventQueue, models.ActionEvent{
|
writeEventQueue = append(writeEventQueue, models.ActionEvent{
|
||||||
Type: event,
|
Type: event,
|
||||||
Target: target,
|
Target: target,
|
||||||
IpAddress: ip,
|
IpAddress: ip,
|
||||||
UserAgent: ua,
|
UserAgent: ua,
|
||||||
AccountID: user,
|
AccountID: user.ID,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package services
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"gorm.io/datatypes"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
@ -125,20 +124,6 @@ func ActiveTicket(ticket models.AuthTicket) (models.AuthTicket, error) {
|
|||||||
|
|
||||||
if err := database.C.Save(&ticket).Error; err != nil {
|
if err := database.C.Save(&ticket).Error; err != nil {
|
||||||
return ticket, err
|
return ticket, err
|
||||||
} else {
|
|
||||||
_ = NewNotification(models.Notification{
|
|
||||||
Topic: "passport.security.alert",
|
|
||||||
Title: "New sign in alert",
|
|
||||||
Subtitle: lo.ToPtr(fmt.Sprintf("New sign in from %s", ticket.IpAddress)),
|
|
||||||
Body: fmt.Sprintf("Your account just got a new sign in from %s. Make sure you recongize this device, or sign out it immediately and reset password.", ticket.IpAddress),
|
|
||||||
Metadata: datatypes.JSONMap{
|
|
||||||
"ip_address": ticket.IpAddress,
|
|
||||||
"created_at": ticket.CreatedAt,
|
|
||||||
"available_at": ticket.AvailableAt,
|
|
||||||
},
|
|
||||||
AccountID: ticket.AccountID,
|
|
||||||
IsForcePush: true,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ticket, nil
|
return ticket, nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user