diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte
index 18baa01f7..ca1aa0cf5 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/create/+page.svelte
@@ -114,7 +114,7 @@
size: f.size,
name: f.name,
removable: true,
- extension: f.type,
+ extension: f.type
};
})}
on:remove={(e) => (files = removeFile(e.detail, files))} />
diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte
index 92c45c8d2..0956c471e 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/+page.svelte
@@ -3,7 +3,7 @@
import { Container } from '$lib/layout';
import { Button } from '$lib/elements/forms';
import { columns, file, tokens } from './store';
- import { toLocaleDate, toLocaleDateTime } from '$lib/helpers/date';
+ import { diffDays, toLocaleDate, toLocaleDateTime } from '$lib/helpers/date';
import { sdk } from '$lib/stores/sdk';
import { addNotification } from '$lib/stores/notifications';
import { calculateSize } from '$lib/helpers/sizeConvertion';
@@ -19,6 +19,7 @@
import {
ActionMenu,
Alert,
+ Badge,
Button as PinkButton,
InteractiveText,
Layout,
@@ -189,6 +190,20 @@
return [...groups].join(', ');
}
+ function getExpiryDetails(token: Models.ResourceToken): {
+ status: 'success' | 'warning' | 'error' | null;
+ message: string | null;
+ } {
+ if (token.expire === '') token.expire = null;
+ const isExpired = token.expire !== null && new Date(token.expire) < new Date();
+ const isExpiring = token.expire && diffDays(new Date(), new Date(token.expire)) < 14;
+
+ return {
+ status: isExpired ? 'error' : isExpiring ? 'warning' : null,
+ message: isExpired ? 'Expired' : isExpiring ? 'Expires soon' : null
+ };
+ }
+
onMount(async () => {
filePermissions = $file?.$permissions;
});
@@ -240,119 +255,125 @@
-
-
- File tokens
- Use tokens to provide public access to the file.
-
- {#if $tokens.total}
-
-
-
+
+ File tokens
+ Use tokens to provide public access to the file.
+
+ {#if $tokens.total}
+
+
+
-
-
- {#each $columns as { id, title } (id)}
- {title}
- {/each}
-
+
+
+ {#each $columns as { id, title } (id)}
+ {title}
+ {/each}
+
- {#each $tokens.tokens as token}
-
- {toLocaleDate(token.$createdAt)}
+ {#each $tokens.tokens as token}
+
+ {toLocaleDate(token.$createdAt)}
- {token.expire
- ? cleanFormattedDate(token.expire)
- : 'never'}
+
+
+ {@const expiration = getExpiryDetails(token)}
+ {token.expire ? cleanFormattedDate(token.expire) : 'Never'}
- {token.accessedAt
- ? cleanFormattedDate(token.accessedAt, true)
- : 'never'}
-
-
- {#if token.$permissions.length}
-
- {getPermissionGroups(token.$permissions)}
-
- {:else}
- none
+ {#if expiration.status}
+
{/if}
-
+
+
-
-
-
- {/each}
-
- {:else}
- (showManageToken = true)}
- >Create new file token
- {/if}
-
-
-
+ {
+ toggle();
+ showManageToken = true;
+ selectedFileToken = token;
+ }}>
+ Edit expiry
+
+ {
+ toggle();
+ showManageToken = true;
+ tokenPermissionsMode = true;
+ selectedFileToken = token;
+ }}>
+ Edit permissions
+
+ {
+ toggle();
+ tokenDeleteMode = true;
+ showManageToken = true;
+ selectedFileToken = token;
+ }}>
+ Delete
+
+
+
+
+
+
+
+ {/each}
+
+ {:else}
+ (showManageToken = true)}>Create new file token
+ {/if}
+
+
Permissions
@@ -424,9 +445,3 @@
on:deleted={async () => await deleteFileToken(selectedFileToken)} />
-
-
diff --git a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts
index 8042caf2a..2f5748362 100644
--- a/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts
+++ b/src/routes/(console)/project-[region]-[project]/storage/bucket-[bucket]/file-[file]/store.ts
@@ -14,7 +14,7 @@ export const cachedJwts = writable