diff --git a/frontend/src/network/network.ts b/frontend/src/network/network.ts index 2b0d806..7cb6b39 100644 --- a/frontend/src/network/network.ts +++ b/frontend/src/network/network.ts @@ -63,12 +63,16 @@ class Network { if (!app.token) { return; } - const res = await this.getUserInfo(app.user!.username) + const res = await this.getMe() if (!res.success && res.message.includes("Invalid token")) { app.token = null; app.user = null; app.saveData(); window.location.reload(); + } else { + app.user = res.data!; + app.token = res.data!.token; + app.saveData(); } } @@ -105,6 +109,19 @@ class Network { } } + async getMe(): Promise> { + try { + const response = await axios.get(`${this.apiBaseUrl}/user/me`) + return response.data + } catch (e: any) { + console.error(e) + return { + success: false, + message: e.toString(), + } + } + } + async getUserInfo(username: string): Promise> { try { const response = await axios.get(`${this.apiBaseUrl}/user/info`, { diff --git a/server/api/user.go b/server/api/user.go index a5c2dd0..7609882 100644 --- a/server/api/user.go +++ b/server/api/user.go @@ -318,6 +318,23 @@ func handleSetUserBio(c fiber.Ctx) error { }) } +// handleGetMe retrieves the current user's information and refreshes the token +func handleGetMe(c fiber.Ctx) error { + uid, ok := c.Locals("uid").(uint) + if !ok { + return model.NewUnAuthorizedError("Unauthorized") + } + user, err := service.GetMe(uid) + if err != nil { + return err + } + return c.Status(fiber.StatusOK).JSON(model.Response[model.UserViewWithToken]{ + Success: true, + Data: user, + Message: "User information retrieved successfully", + }) +} + func AddUserRoutes(r fiber.Router) { u := r.Group("user") u.Post("/register", handleUserRegister) @@ -333,4 +350,5 @@ func AddUserRoutes(r fiber.Router) { u.Get("/info", handleGetUserInfo) u.Post("/username", handleChangeUsername) u.Post("/bio", handleSetUserBio) + u.Get("/me", handleGetMe) } diff --git a/server/service/user.go b/server/service/user.go index a5988f3..05c6029 100644 --- a/server/service/user.go +++ b/server/service/user.go @@ -307,3 +307,15 @@ func SetUserBio(uid uint, bio string) (model.UserView, error) { } return user.ToView(), nil } + +func GetMe(uid uint) (model.UserViewWithToken, error) { + user, err := dao.GetUserByID(uid) + if err != nil { + return model.UserViewWithToken{}, err + } + token, err := utils.GenerateToken(user.ID) + if err != nil { + return model.UserViewWithToken{}, err + } + return user.ToView().WithToken(token), nil +}