Compare commits

...

4 Commits

8 changed files with 25 additions and 24 deletions
+11 -2
View File
@@ -294,10 +294,19 @@ func TestGrantBucketPermission_Success(t *testing.T) {
}
admin.AllowBucketKeyFn = func(_ context.Context, req models.BucketKeyPermRequest) (*models.GarageBucketInfo, error) {
if req.BucketID != "id-1" || req.AccessKeyID != "AKIA" {
t.Errorf("req = %+v", req)
t.Errorf("allow req = %+v", req)
}
if !req.Permissions.Read || !req.Permissions.Write || req.Permissions.Owner {
t.Errorf("perms = %+v", req.Permissions)
t.Errorf("allow perms = %+v", req.Permissions)
}
return &models.GarageBucketInfo{ID: "id-1"}, nil
}
admin.DenyBucketKeyFn = func(_ context.Context, req models.BucketKeyPermRequest) (*models.GarageBucketInfo, error) {
if req.BucketID != "id-1" || req.AccessKeyID != "AKIA" {
t.Errorf("deny req = %+v", req)
}
if req.Permissions.Read || req.Permissions.Write || !req.Permissions.Owner {
t.Errorf("deny perms = %+v", req.Permissions)
}
return &models.GarageBucketInfo{ID: "id-1"}, nil
}
@@ -87,7 +87,7 @@ export function ObjectDetailsView() {
document.body.removeChild(a);
toast.success('Download started');
} catch {
toast.error('Download failed');
// error toast handled by axios interceptor
}
};
@@ -99,7 +99,7 @@ export function ObjectDetailsView() {
toast.success('Object deleted');
navigate(backHref);
} catch {
toast.error('Delete failed');
// error toast handled by axios interceptor
} finally {
setDeleting(false);
setDeleteOpen(false);
+2 -3
View File
@@ -44,10 +44,9 @@ export function BucketPermissions() {
accessKeyId: selectedKey,
permissions: { read, write, owner },
});
toast.success('Permissions granted');
setSelectedKey(''); setRead(false); setWrite(false); setOwner(false);
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Grant failed');
} catch {
// error toast handled by axios interceptor
}
};
+1 -4
View File
@@ -6,7 +6,6 @@ import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { EmptyState } from '@/components/ui/empty-state';
import { DangerousConfirmDialog } from '@/components/ui/dangerous-confirm-dialog';
import { toast } from 'sonner';
import { formatBytes } from '@/lib/file-utils';
import { formatDate as formatDateUtil } from '@/lib/utils';
@@ -43,10 +42,8 @@ export function BucketSettings() {
setDeleting(true);
try {
await deleteMutation.mutateAsync(bucket.name);
toast.success('Bucket deleted');
navigate('/buckets');
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Delete failed');
} catch {
setDeleting(false);
}
};
+2 -2
View File
@@ -65,8 +65,8 @@ export function BucketWebsite() {
});
await queryClient.invalidateQueries({ queryKey: ['buckets'] });
toast.success(disabling ? 'Website disabled' : 'Website configuration updated');
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Save failed');
} catch {
// error toast handled by axios interceptor
} finally {
setSaving(false);
}
+3 -7
View File
@@ -8,7 +8,6 @@ import { DangerousConfirmDialog } from '@/components/ui/dangerous-confirm-dialog
import { PageHeader } from '@/components/ui/page-header';
import { Button } from '@/components/ui/button';
import type { Bucket } from '@/types';
import { toast } from 'sonner';
export function Buckets() {
const navigate = useNavigate();
@@ -24,10 +23,8 @@ export function Buckets() {
const createBucket = async (name: string, region?: string) => {
try {
await createMutation.mutateAsync({ name, region });
toast.success(`Bucket "${name}" created`);
return true;
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Create failed');
} catch {
return false;
}
};
@@ -37,10 +34,9 @@ export function Buckets() {
setDeleting(true);
try {
await deleteMutation.mutateAsync(deleteTarget.name);
toast.success('Bucket deleted');
setDeleteTarget(null);
} catch (err) {
toast.error(err instanceof Error ? err.message : 'Delete failed');
} catch {
// error toast handled by axios interceptor
} finally {
setDeleting(false);
}
+2 -2
View File
@@ -3,8 +3,8 @@ name: garage-ui
description: A Helm chart for Garage UI - Web interface for Garage S3 object storage
icon: https://helm.noste.dev/garage.png
type: application
version: 0.2.4
appVersion: "v0.4.0"
version: 0.2.5
appVersion: "v0.4.2"
keywords:
- garage
- s3
+2 -2
View File
@@ -2,8 +2,8 @@
A Helm chart for deploying [Garage UI](https://github.com/Noooste/garage-ui), a modern web interface for managing [Garage](https://garagehq.deuxfleurs.fr/) distributed object storage systems.
[![Version](https://img.shields.io/badge/version-0.2.4-blue.svg)](Chart.yaml)
[![App Version](https://img.shields.io/badge/app%20version-v0.4.0-green.svg)](Chart.yaml)
[![Version](https://img.shields.io/badge/version-0.2.5-blue.svg)](Chart.yaml)
[![App Version](https://img.shields.io/badge/app%20version-v0.4.2-green.svg)](Chart.yaml)
## Table of Contents