diff options
| author | diogo464 <[email protected]> | 2025-08-24 22:14:12 +0100 |
|---|---|---|
| committer | diogo464 <[email protected]> | 2025-08-24 22:14:12 +0100 |
| commit | 876ec492906f77ee4c18ee236ba2f30ddddb5d10 (patch) | |
| tree | 123ad2b3a0a5616c3b1d2fc52d25caef59e334d8 | |
| parent | e4917874be67de24f934e069b53e1726599c6cc5 (diff) | |
feat: add authentication checks for upload and create folder buttons
- Check user authentication before opening file picker or create folder dialog
- Display error toast message when user is not authenticated
- Maintain existing functionality for authenticated users
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
| -rw-r--r-- | frontend/components/drive/DriveDirectoryClient.tsx | 34 | ||||
| -rw-r--r-- | frontend/components/drive/DriveDirectoryView.tsx | 3 |
2 files changed, 34 insertions, 3 deletions
diff --git a/frontend/components/drive/DriveDirectoryClient.tsx b/frontend/components/drive/DriveDirectoryClient.tsx index d238065..330c7a0 100644 --- a/frontend/components/drive/DriveDirectoryClient.tsx +++ b/frontend/components/drive/DriveDirectoryClient.tsx | |||
| @@ -36,6 +36,7 @@ import { formatFileSize } from "@/lib/utils" | |||
| 36 | import { DriveMoveDialog } from "./DriveMoveDialog" | 36 | import { DriveMoveDialog } from "./DriveMoveDialog" |
| 37 | import { StorageUsage } from "./StorageUsage" | 37 | import { StorageUsage } from "./StorageUsage" |
| 38 | import type { StorageData } from "@/lib/storage" | 38 | import type { StorageData } from "@/lib/storage" |
| 39 | import type { UserAuth } from "@/lib/auth_types" | ||
| 39 | 40 | ||
| 40 | function formatDate(timestamp: number): string { | 41 | function formatDate(timestamp: number): string { |
| 41 | return new Date(timestamp * 1000).toISOString().split('T')[0] | 42 | return new Date(timestamp * 1000).toISOString().split('T')[0] |
| @@ -64,9 +65,10 @@ interface DriveDirectoryClientProps { | |||
| 64 | files: DriveLsEntry[] | 65 | files: DriveLsEntry[] |
| 65 | breadcrumbs: Breadcrumb[] | 66 | breadcrumbs: Breadcrumb[] |
| 66 | storageData: StorageData | 67 | storageData: StorageData |
| 68 | userAuth: UserAuth | ||
| 67 | } | 69 | } |
| 68 | 70 | ||
| 69 | export function DriveDirectoryClient({ path, files, breadcrumbs, storageData }: DriveDirectoryClientProps) { | 71 | export function DriveDirectoryClient({ path, files, breadcrumbs, storageData, userAuth }: DriveDirectoryClientProps) { |
| 70 | const [selectedFiles, setSelectedFiles] = useState<Set<string>>(new Set()) | 72 | const [selectedFiles, setSelectedFiles] = useState<Set<string>>(new Set()) |
| 71 | const [renameDialogOpen, setRenameDialogOpen] = useState(false) | 73 | const [renameDialogOpen, setRenameDialogOpen] = useState(false) |
| 72 | const [infoDialogOpen, setInfoDialogOpen] = useState(false) | 74 | const [infoDialogOpen, setInfoDialogOpen] = useState(false) |
| @@ -414,6 +416,32 @@ export function DriveDirectoryClient({ path, files, breadcrumbs, storageData }: | |||
| 414 | } | 416 | } |
| 415 | } | 417 | } |
| 416 | 418 | ||
| 419 | const handleUploadButtonClick = () => { | ||
| 420 | if (!userAuth.isLoggedIn) { | ||
| 421 | toast({ | ||
| 422 | title: "Authentication required", | ||
| 423 | description: "User is not authenticated. Please log in to upload files.", | ||
| 424 | variant: "destructive" | ||
| 425 | }) | ||
| 426 | return | ||
| 427 | } | ||
| 428 | |||
| 429 | fileInputRef.current?.click() | ||
| 430 | } | ||
| 431 | |||
| 432 | const handleCreateFolderButtonClick = () => { | ||
| 433 | if (!userAuth.isLoggedIn) { | ||
| 434 | toast({ | ||
| 435 | title: "Authentication required", | ||
| 436 | description: "User is not authenticated. Please log in to create folders.", | ||
| 437 | variant: "destructive" | ||
| 438 | }) | ||
| 439 | return | ||
| 440 | } | ||
| 441 | |||
| 442 | setCreateFolderDialogOpen(true) | ||
| 443 | } | ||
| 444 | |||
| 417 | return ( | 445 | return ( |
| 418 | <div className="space-y-6"> | 446 | <div className="space-y-6"> |
| 419 | {/* Storage Info */} | 447 | {/* Storage Info */} |
| @@ -443,14 +471,14 @@ export function DriveDirectoryClient({ path, files, breadcrumbs, storageData }: | |||
| 443 | <div className="flex items-center gap-2 sm:gap-2"> | 471 | <div className="flex items-center gap-2 sm:gap-2"> |
| 444 | <Button | 472 | <Button |
| 445 | variant="secondary" | 473 | variant="secondary" |
| 446 | onClick={() => setCreateFolderDialogOpen(true)} | 474 | onClick={handleCreateFolderButtonClick} |
| 447 | className="flex-1 sm:flex-none" | 475 | className="flex-1 sm:flex-none" |
| 448 | > | 476 | > |
| 449 | <FolderPlus className="mr-2 h-4 w-4" /> | 477 | <FolderPlus className="mr-2 h-4 w-4" /> |
| 450 | Create Folder | 478 | Create Folder |
| 451 | </Button> | 479 | </Button> |
| 452 | <Button | 480 | <Button |
| 453 | onClick={() => fileInputRef.current?.click()} | 481 | onClick={handleUploadButtonClick} |
| 454 | disabled={uploading} | 482 | disabled={uploading} |
| 455 | className="flex-1 sm:flex-none" | 483 | className="flex-1 sm:flex-none" |
| 456 | > | 484 | > |
diff --git a/frontend/components/drive/DriveDirectoryView.tsx b/frontend/components/drive/DriveDirectoryView.tsx index de9d70a..b20a111 100644 --- a/frontend/components/drive/DriveDirectoryView.tsx +++ b/frontend/components/drive/DriveDirectoryView.tsx | |||
| @@ -2,6 +2,7 @@ import { DriveLsEntry } from "@/lib/drive_types" | |||
| 2 | import { DriveDirectoryClient } from "./DriveDirectoryClient" | 2 | import { DriveDirectoryClient } from "./DriveDirectoryClient" |
| 3 | import { DriveHeader } from "./DriveHeader" | 3 | import { DriveHeader } from "./DriveHeader" |
| 4 | import type { StorageData } from "@/lib/storage" | 4 | import type { StorageData } from "@/lib/storage" |
| 5 | import { Auth_get_user } from "@/lib/auth" | ||
| 5 | 6 | ||
| 6 | interface DriveDirectoryViewProps { | 7 | interface DriveDirectoryViewProps { |
| 7 | path: string | 8 | path: string |
| @@ -47,6 +48,7 @@ function sortFiles(files: DriveLsEntry[]): DriveLsEntry[] { | |||
| 47 | export async function DriveDirectoryView({ path, files, storageData }: DriveDirectoryViewProps) { | 48 | export async function DriveDirectoryView({ path, files, storageData }: DriveDirectoryViewProps) { |
| 48 | const sortedFiles = sortFiles(files) | 49 | const sortedFiles = sortFiles(files) |
| 49 | const breadcrumbs = generateBreadcrumbs(path) | 50 | const breadcrumbs = generateBreadcrumbs(path) |
| 51 | const userAuth = await Auth_get_user() | ||
| 50 | 52 | ||
| 51 | return ( | 53 | return ( |
| 52 | <div className="container mx-auto p-6 space-y-6"> | 54 | <div className="container mx-auto p-6 space-y-6"> |
| @@ -56,6 +58,7 @@ export async function DriveDirectoryView({ path, files, storageData }: DriveDire | |||
| 56 | files={sortedFiles} | 58 | files={sortedFiles} |
| 57 | breadcrumbs={breadcrumbs} | 59 | breadcrumbs={breadcrumbs} |
| 58 | storageData={storageData} | 60 | storageData={storageData} |
| 61 | userAuth={userAuth} | ||
| 59 | /> | 62 | /> |
| 60 | </div> | 63 | </div> |
| 61 | ) | 64 | ) |
