diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte index fe293e6b8d..5b4075bc8a 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/+page.svelte @@ -15,7 +15,7 @@ Tooltip, Typography } from '@appwrite.io/pink-svelte'; - import { isRelationship, isSpatialType, isString } from '../rows/store'; + import { isRelationship, isSpatialType, isTextType } from '../rows/store'; import { columns, type Columns, @@ -443,7 +443,7 @@ {/if} - {#if isString(column) && column.encrypt} + {#if isTextType(column) && 'encrypt' in column && column.encrypt} + import { page } from '$app/state'; + import { isCloud } from '$lib/system'; + import { getChangePlanUrl } from '$lib/stores/billing'; + import { currentPlan } from '$lib/stores/organization'; + import { + ActionMenu, + Popover, + Layout, + Selector, + Tag, + Tooltip, + Typography, + Link + } from '@appwrite.io/pink-svelte'; + + let { + encrypt = $bindable(false), + editing = false, + disabled = false, + id = 'encrypt' + }: { + encrypt?: boolean; + editing?: boolean; + disabled?: boolean; + id?: string; + } = $props(); + + const organizationId = page.data?.organization?.$id ?? page.data?.project?.teamId; + const supportsEncryption = $derived(isCloud ? $currentPlan?.databasesAllowEncrypt : true); + + + +
+ + + + + + + + Protect column against data leaks for best privacy compliance. Encrypted + columns cannot be queried. + + + + + + Available on Pro plan. Upgrade + to enable encrypted columns. + + + + +
+ + + Encryption can only be set when creating the column. + +
+ + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/longtext.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/longtext.svelte index 8087541af7..92580dcf5d 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/longtext.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/columns/longtext.svelte @@ -17,7 +17,8 @@ key, required: data.required, xdefault: data.default, - array: data.array + array: data.array, + encrypt: data.encrypt }); } export async function updateLongtext( @@ -42,17 +43,21 @@ + min={data.encrypt ? 150 : 1} + max={16383} + helper={data.encrypt + ? 'Encrypted varchar columns require a minimum size of 150.' + : undefined} /> {#if !editing} @@ -173,3 +185,7 @@ {disabled} bind:array={data.array} bind:required={data.required} /> + + + + diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createColumn.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createColumn.svelte index bddf437625..ba23a58a54 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createColumn.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/createColumn.svelte @@ -47,6 +47,7 @@ required: column?.required ?? false, array: column?.array ?? false, default: column?.default ?? null, + encrypt: (column as { encrypt?: boolean })?.encrypt ?? false, ...column } as Partial); @@ -60,7 +61,8 @@ data = { required: false, array: false, - default: null + default: null, + encrypt: false }; /* default to text */ diff --git a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte index f4f7e46b77..86cc3c7c7b 100644 --- a/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte +++ b/src/routes/(console)/project-[region]-[project]/databases/database-[database]/table-[table]/spreadsheet.svelte @@ -17,7 +17,7 @@ isRelationship, isRelationshipToMany, isSpatialType, - isString + isTextType } from './rows/store'; import { columns, @@ -1072,7 +1072,9 @@ {@const isEmptyArray = formatted === 'Empty'} {@const isDatetimeAttribute = rowColumn.type === 'datetime'} {@const isEncryptedAttribute = - isString(rowColumn) && rowColumn.encrypt} + isTextType(rowColumn) && + 'encrypt' in rowColumn && + rowColumn.encrypt} {#if isDatetimeAttribute} Timestamp