From 6106a0e397c62a84752b1bdd9025346eb8b9c6b7 Mon Sep 17 00:00:00 2001 From: itqop Date: Tue, 30 Dec 2025 18:16:59 +0300 Subject: [PATCH] fixes --- .../src/app/repositories/share_repository.py | 10 ++++++++-- frontend/src/pages/LibraryPage.tsx | 20 ++++++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/backend/src/app/repositories/share_repository.py b/backend/src/app/repositories/share_repository.py index d95143b..27ae51f 100644 --- a/backend/src/app/repositories/share_repository.py +++ b/backend/src/app/repositories/share_repository.py @@ -118,6 +118,12 @@ class ShareRepository: """ if share.revoked_at: return False - if share.expires_at and share.expires_at < datetime.now(timezone.utc): - return False + if share.expires_at: + # Ensure both datetimes are timezone-aware for comparison + now = datetime.now(timezone.utc) + expires_at = share.expires_at + if expires_at.tzinfo is None: + expires_at = expires_at.replace(tzinfo=timezone.utc) + if expires_at < now: + return False return True diff --git a/frontend/src/pages/LibraryPage.tsx b/frontend/src/pages/LibraryPage.tsx index 4fa5036..1cd9fbf 100644 --- a/frontend/src/pages/LibraryPage.tsx +++ b/frontend/src/pages/LibraryPage.tsx @@ -102,7 +102,25 @@ export default function LibraryPage() { }; const handleCopyShareLink = () => { - navigator.clipboard.writeText(shareLink); + // Fallback for HTTP (clipboard API requires HTTPS) + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(shareLink); + } else { + // Fallback method for HTTP + const textArea = document.createElement('textarea'); + textArea.value = shareLink; + textArea.style.position = 'fixed'; + textArea.style.left = '-999999px'; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + try { + document.execCommand('copy'); + } catch (err) { + console.error('Failed to copy:', err); + } + document.body.removeChild(textArea); + } showSnackbar('Ссылка скопирована'); setShareDialogOpen(false); setShareLink('');