Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use server"
- import { cookies } from "next/headers"
- import { WebSessionType, PersonalAccessTokenType } from "@/types/auth"
- import { fetchBackend } from "@/lib/utils"
- /**
- * Fetches the current user's active web sessions and personal access tokens from the backend.
- *
- * @returns {Promise<{ webSessions: WebSessionType[] | null; personalAccessTokens: PersonalAccessTokenType[] | null }>} the web sessions and personal access tokens related to the given user.
- */
- export async function getUserSessions(): Promise<{
- webSessions: WebSessionType[] | null
- personalAccessTokens: PersonalAccessTokenType[] | null
- }> {
- const cookieList = await cookies()
- const laravelSessionCookie = cookieList.get('laravel_session')?.value
- const xsrfToken = cookieList.get('XSRF-TOKEN')?.value
- if (!laravelSessionCookie) {
- console.warn("No Laravel session cookie found. Cannot fetch user sessions.")
- return { webSessions: null, personalAccessTokens: null }
- }
- let webSessions: WebSessionType[] | null = null
- let personalAccessTokens: PersonalAccessTokenType[] | null = null
- // Fetch and convert web sessions to camelCase
- /* try {
- const webSessionsRes = await fetchBackend(
- "/api/user/web-sessions", "GET",
- {}, undefined, xsrfToken
- )
- if (!webSessionsRes || !webSessionsRes.ok) {
- const errorBody = await webSessionsRes?.text()
- console.error(`Failed to fetch web sessions: ${webSessionsRes?.status} ${webSessionsRes?.statusText}`)
- console.error("Error response body:", errorBody)
- } else {
- const rawWebSessionsData: any[] = await webSessionsRes.json()
- webSessions = rawWebSessionsData.map(rawSession => ({
- _id: rawSession._id,
- payload: rawSession.payload,
- lastActivity: new Date(rawSession.last_activity * 1000),
- userId: rawSession.user_id,
- ipAddress: rawSession.ip_address,
- userAgent: rawSession.user_agent,
- expiresAt: rawSession.expires_at ? new Date(rawSession.expires_at) : null,
- }))
- }
- } catch (error) {
- console.error("Error fetching web sessions:", error)
- }
- */
- // Fetch and convert pats to camelCase
- try {
- const patRes = await fetchBackend(
- "/api/user/personal-access-tokens", "GET",
- {}, undefined, xsrfToken
- )
- if (!patRes || !patRes.ok) {
- const errorBody = await patRes?.text()
- console.error(`Failed to fetch personal access tokens: ${patRes?.status} ${patRes?.statusText}`)
- console.error("Error response body:", errorBody)
- } else {
- const rawPatData: any[] = await patRes.json()
- personalAccessTokens = rawPatData.map(rawToken => ({
- _id: rawToken._id.$oid,
- name: rawToken.name,
- abilities: JSON.parse(rawToken.abilities) as string[],
- expiresAt: rawToken.expires_at ? new Date(rawToken.expires_at) : null,
- updatedAt: new Date(rawToken.updated_at),
- createdAt: new Date(rawToken.created_at),
- lastUsedAt: rawToken.last_used_at ? new Date(rawToken.last_used_at) : null,
- tokenableId: rawToken.tokenable_id.$oid,
- tokenableType: rawToken.tokenable_type
- }))
- }
- } catch (error) {
- console.error("Error fetching personal access tokens:", error)
- }
- return { webSessions, personalAccessTokens }
- }
Advertisement
Add Comment
Please, Sign In to add comment