From 7d7213b4577282bc9cccb622ec2ff0ce1873e51d Mon Sep 17 00:00:00 2001 From: smanylov Date: Tue, 20 Jan 2026 16:53:11 +0700 Subject: [PATCH] update token life extension --- src/app/actions/action.ts | 7 ++-- src/app/actions/auth.ts | 6 ++-- src/app/actions/session.ts | 34 +++++++++++++------ src/app/styles/global-styles.scss | 1 + .../ui/dashboard/new/dashboard-files-info.tsx | 32 ++++++++--------- .../ui/dashboard/new/dashboard-user-stats.tsx | 4 +-- src/app/ui/dashboard/stats-grid.tsx | 12 +++---- .../ui/my-content/my-content-info-block.tsx | 26 +++++++------- .../my-content/new/my-content-page-title.tsx | 2 +- .../new/my-content-stats-overview.tsx | 2 +- 10 files changed, 72 insertions(+), 54 deletions(-) diff --git a/src/app/actions/action.ts b/src/app/actions/action.ts index 5c7fc4e..360af1a 100644 --- a/src/app/actions/action.ts +++ b/src/app/actions/action.ts @@ -1,7 +1,8 @@ 'use server' -import { getSessionData } from '@/app/actions/session'; +import { getSessionData, deleteSession } from '@/app/actions/session'; import { testUserData, API_BASE_URL } from '@/app/actions/definitions'; -import {tokenLifeExtension} from '@/app/actions/auth'; +import { tokenLifeExtension } from '@/app/actions/auth'; +import { redirect } from 'next/navigation'; export async function getUserData() { const userEmail = await getSessionData('email'); @@ -55,6 +56,8 @@ export async function getUserFilesInfo() { const parsed = await response.json(); if (parsed.message_code === 0) { return parsed.message_body; + } else if (parsed.message_code === 2) { + await deleteSession(); } else { throw parsed.message_code; } diff --git a/src/app/actions/auth.ts b/src/app/actions/auth.ts index 6ffa55b..bd6a870 100644 --- a/src/app/actions/auth.ts +++ b/src/app/actions/auth.ts @@ -20,7 +20,6 @@ export async function logout() { throw error; } finally { await deleteSession(); - redirect('/login'); } } @@ -316,11 +315,12 @@ export async function tokenLifeExtension() { if (response.ok) { const parsed = await response.json(); - await updateSession(); + if (parsed.message_code === 0) { + await updateSession(parsed.message_body.token); + } } } catch (error) { await deleteSession(); - redirect('/login'); throw error; } } diff --git a/src/app/actions/session.ts b/src/app/actions/session.ts index 19b97b5..76a2191 100644 --- a/src/app/actions/session.ts +++ b/src/app/actions/session.ts @@ -3,6 +3,7 @@ /* import 'server-only'; */ import { cookies } from 'next/headers' import { SignJWT, jwtVerify } from 'jose' +import { redirect } from 'next/navigation'; /* const secretKey = process.env.SESSION_SECRET */ const secretKey = 'AAA+sq1yKte/gMgUUu/B/OyXqr45/LMYplPVOlWc+uo=' @@ -28,7 +29,7 @@ export async function decrypt(session: string | undefined = '') { } export async function createSession(token: string, email: string) { - const expiresAt = new Date(Date.now() + 60 * 60 * 1000); + const expiresAt = new Date(Date.now() + 50 * 60 * 1000); const session = await encrypt({ token, email, @@ -45,21 +46,32 @@ export async function createSession(token: string, email: string) { }); } -export async function updateSession() { - const session = (await cookies()).get('session')?.value - const payload = await decrypt(session) +export async function updateSession(newToken: string) { + const cookieStore = await cookies(); + const session = cookieStore.get('session')?.value; - if (!session || !payload) { - return null + if (!session) { + return null; } - const expiresAt = new Date(Date.now() + 60 * 60 * 1000); + const payload = await decrypt(session); - const cookieStore = await cookies() - cookieStore.set('session', session, { + if (!payload) { + return null; + } + + const updatedPayload = { + ...payload, + token: newToken, + expiresAt: new Date(Date.now() + 50 * 60 * 1000) + }; + + const updatedSession = await encrypt(updatedPayload); + + cookieStore.set('session', updatedSession, { httpOnly: true, secure: false, - expires: expiresAt, + expires: updatedPayload.expiresAt, sameSite: 'lax', path: '/', }); @@ -84,6 +96,8 @@ export async function getSessionData(type: 'token' | 'email'): Promise {t('images')} -
{filesInfo.images_quantity ? filesInfo.images_quantity : 0}
+
{filesInfo?.images_quantity ? filesInfo?.images_quantity : 0}
{t('your-image')}
{t('size')} - {filesInfo.images_size ? convertBytes(filesInfo.images_size) : 0} + {filesInfo?.images_size ? convertBytes(filesInfo?.images_size) : 0}
{t('checks')} - {filesInfo.images_check ? filesInfo.images_check : 0} + {filesInfo?.images_check ? filesInfo?.images_check : 0}
{t('violations')} - {filesInfo.images_violations ? filesInfo.images_violations : 0} + {filesInfo?.images_violations ? filesInfo?.images_violations : 0}
@@ -46,20 +46,20 @@ export default function DashboardFilesInfo() {
{t('videos')}
-
{filesInfo.videos_quantity ? filesInfo.videos_quantity : 0}
+
{filesInfo?.videos_quantity ? filesInfo?.videos_quantity : 0}
{t('your-videos')}
{t('size')} - {filesInfo.videos_size ? convertBytes(filesInfo.videos_size) : 0} + {filesInfo?.videos_size ? convertBytes(filesInfo?.videos_size) : 0}
{t('checks')} - {filesInfo.videos_check ? filesInfo.videos_check : 0} + {filesInfo?.videos_check ? filesInfo?.videos_check : 0}
{t('violations')} - {filesInfo.videos_violations ? filesInfo.videos_violations : 0} + {filesInfo?.videos_violations ? filesInfo?.videos_violations : 0}
@@ -68,20 +68,20 @@ export default function DashboardFilesInfo() {
{t('audios')}
-
{filesInfo.audios_quantity ? filesInfo.audios_quantity : 0}
+
{filesInfo?.audios_quantity ? filesInfo?.audios_quantity : 0}
{t('your-audios')}
{t('size')} - {filesInfo.audios_size ? convertBytes(filesInfo.audios_size) : 0} + {filesInfo?.audios_size ? convertBytes(filesInfo?.audios_size) : 0}
{t('checks')} - {filesInfo.audios_check ? filesInfo.audios_check : 0} + {filesInfo?.audios_check ? filesInfo?.audios_check : 0}
{t('violations')} - {filesInfo.audios_violations ? filesInfo.audios_violations : 0} + {filesInfo?.audios_violations ? filesInfo?.audios_violations : 0}
@@ -90,20 +90,20 @@ export default function DashboardFilesInfo() {
{t('documents')}
-
{filesInfo.documents_quantity ? filesInfo.documents_quantity : 0}
+
{filesInfo?.documents_quantity ? filesInfo?.documents_quantity : 0}
{t('your-documents')}
{t('size')} - {filesInfo.documents_check ? convertBytes(filesInfo.documents_check) : 0} + {filesInfo?.documents_check ? convertBytes(filesInfo?.documents_check) : 0}
{t('checks')} - {filesInfo.documents_check ? filesInfo.documents_check : 0} + {filesInfo?.documents_check ? filesInfo?.documents_check : 0}
{t('violations')} - {filesInfo.documents_violations ? filesInfo.documents_violations : 0} + {filesInfo?.documents_violations ? filesInfo?.documents_violations : 0}
diff --git a/src/app/ui/dashboard/new/dashboard-user-stats.tsx b/src/app/ui/dashboard/new/dashboard-user-stats.tsx index 3516ee8..f02a15f 100644 --- a/src/app/ui/dashboard/new/dashboard-user-stats.tsx +++ b/src/app/ui/dashboard/new/dashboard-user-stats.tsx @@ -37,7 +37,7 @@ export default function DashboardUserStats() {
НАРУШЕНИЯ
-
{filesInfo.all_files_violations ? filesInfo.all_files_violations : 0}
+
{filesInfo?.all_files_violations ? filesInfo?.all_files_violations : 0}
Требуют внимания
⚠️
@@ -45,7 +45,7 @@ export default function DashboardUserStats() {
ХРАНИЛИЩЕ
- {filesInfo.all_files_size ? convertBytes(filesInfo.all_files_size) : 0} + {filesInfo?.all_files_size ? convertBytes(filesInfo?.all_files_size) : 0}
Использовано места
💾
diff --git a/src/app/ui/dashboard/stats-grid.tsx b/src/app/ui/dashboard/stats-grid.tsx index 9e2bbdb..6819e61 100644 --- a/src/app/ui/dashboard/stats-grid.tsx +++ b/src/app/ui/dashboard/stats-grid.tsx @@ -46,10 +46,10 @@ export default function StatsGrid() { {t('images')}
- {filesInfo.images_quantity ? filesInfo.images_quantity : 0} + {filesInfo?.images_quantity ? filesInfo?.images_quantity : 0}
- {filesInfo.images_size ? convertBytes(filesInfo.images_size) : 0} + {filesInfo?.images_size ? convertBytes(filesInfo?.images_size) : 0}
0 @@ -63,10 +63,10 @@ export default function StatsGrid() { {t('videos')}
- {filesInfo.videos_quantity ? filesInfo.videos_quantity : 0} + {filesInfo?.videos_quantity ? filesInfo?.videos_quantity : 0}
- {filesInfo.videos_size ? convertBytes(filesInfo.videos_size) : 0} + {filesInfo?.videos_size ? convertBytes(filesInfo?.videos_size) : 0}
0 @@ -80,10 +80,10 @@ export default function StatsGrid() { {t('audios')}
- {filesInfo.audios_quantity ? filesInfo.audios_quantity : 0} + {filesInfo?.audios_quantity ? filesInfo?.audios_quantity : 0}
- {filesInfo.audios_size ? convertBytes(filesInfo.audios_size) : 0} + {filesInfo?.audios_size ? convertBytes(filesInfo?.audios_size) : 0}
0 diff --git a/src/app/ui/my-content/my-content-info-block.tsx b/src/app/ui/my-content/my-content-info-block.tsx index 8820ae1..96f5e9a 100644 --- a/src/app/ui/my-content/my-content-info-block.tsx +++ b/src/app/ui/my-content/my-content-info-block.tsx @@ -32,13 +32,13 @@ export default function MyContentInfoBlock() { } const sizes = { - images: filesInfo.images_size || 0, - videos: filesInfo.videos_size || 0, - audios: filesInfo.audios_size || 0, - documents: filesInfo.documents_size || 0, + images: filesInfo?.images_size || 0, + videos: filesInfo?.videos_size || 0, + audios: filesInfo?.audios_size || 0, + documents: filesInfo?.documents_size || 0, }; - const total = filesInfo.all_files_size; + const total = filesInfo?.all_files_size; const rawPercents = { images: (sizes.images / total) * 100, @@ -90,10 +90,10 @@ export default function MyContentInfoBlock() {
- {filesInfo.images_quantity || 0} {pluralizeFiles(filesInfo.images_quantity || 0)} + {filesInfo?.images_quantity || 0} {pluralizeFiles(filesInfo?.images_quantity || 0)} - {filesInfo.images_size ? convertBytes(filesInfo.images_size) : 0} + {filesInfo?.images_size ? convertBytes(filesInfo?.images_size) : 0}
@@ -110,10 +110,10 @@ export default function MyContentInfoBlock() {
- {filesInfo.videos_quantity || 0} {pluralizeFiles(filesInfo.videos_quantity || 0)} + {filesInfo?.videos_quantity || 0} {pluralizeFiles(filesInfo?.videos_quantity || 0)} - {filesInfo.videos_size ? convertBytes(filesInfo.videos_size) : 0} + {filesInfo?.videos_size ? convertBytes(filesInfo?.videos_size) : 0}
@@ -130,10 +130,10 @@ export default function MyContentInfoBlock() {
- {filesInfo.audios_quantity || 0} {pluralizeFiles(filesInfo.audios_quantity || 0)} + {filesInfo?.audios_quantity || 0} {pluralizeFiles(filesInfo?.audios_quantity || 0)} - {filesInfo.audios_size ? convertBytes(filesInfo.audios_size) : 0} + {filesInfo?.audios_size ? convertBytes(filesInfo?.audios_size) : 0}
@@ -150,10 +150,10 @@ export default function MyContentInfoBlock() {
- {filesInfo.documents_quantity || 0} {pluralizeFiles(filesInfo.documents_quantity || 0)} + {filesInfo?.documents_quantity || 0} {pluralizeFiles(filesInfo?.documents_quantity || 0)} - {filesInfo.documents_size ? convertBytes(filesInfo.documents_size) : 0} + {filesInfo?.documents_size ? convertBytes(filesInfo?.documents_size) : 0}
diff --git a/src/app/ui/my-content/new/my-content-page-title.tsx b/src/app/ui/my-content/new/my-content-page-title.tsx index fba6b62..afb6691 100644 --- a/src/app/ui/my-content/new/my-content-page-title.tsx +++ b/src/app/ui/my-content/new/my-content-page-title.tsx @@ -40,7 +40,7 @@ export default function MyContentPageTitleColorFrame({ title, description }: { t
-
{filesInfo.all_files_size ? convertBytes(filesInfo.all_files_size) : 0}
+
{filesInfo?.all_files_size ? convertBytes(filesInfo?.all_files_size) : 0}
Хранилище
diff --git a/src/app/ui/my-content/new/my-content-stats-overview.tsx b/src/app/ui/my-content/new/my-content-stats-overview.tsx index 97a0c70..277567a 100644 --- a/src/app/ui/my-content/new/my-content-stats-overview.tsx +++ b/src/app/ui/my-content/new/my-content-stats-overview.tsx @@ -51,7 +51,7 @@ export default function MyContentStatsOverview() {
💾
+0%
-
{filesInfo.all_files_size ? convertBytes(filesInfo.all_files_size) : 0}
+
{filesInfo?.all_files_size ? convertBytes(filesInfo?.all_files_size) : 0}
Хранилище