From 258bd7d31523ccde2a8876eace056e2ff5c23b40 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Fri, 23 Sep 2022 18:28:25 +0200 Subject: [PATCH] feat: add some features to keys and platforms --- .../console/project-[project]/+layout.svelte | 4 + .../project-[project]/overview/+layout.svelte | 37 ++- .../overview/keys/+page.svelte | 15 ++ .../keys/[key]/+page@project-[project].svelte | 221 +++++++++++++++++- .../overview/keys/[key]/delete.svelte | 42 ++++ .../overview/keys/create.svelte | 55 +++++ .../overview/platforms/+page.svelte | 40 ++-- .../[platform]/+page@project-[project].svelte | 111 ++++++++- .../platforms/[platform]/appleIOS.svelte | 60 +++++ .../platforms/[platform]/appleMacOS.svelte | 60 +++++ .../platforms/[platform]/appleTvOS.svelte | 60 +++++ .../platforms/[platform]/appleWatchOS.svelte | 60 +++++ .../platforms/[platform]/delete.svelte | 42 ++++ .../[platform]/flutterAndroid.svelte | 59 +++++ .../platforms/[platform]/flutterIOS.svelte | 60 +++++ .../platforms/[platform]/flutterLinux.svelte | 57 +++++ .../platforms/[platform]/flutterMacOS.svelte | 60 +++++ .../[platform]/flutterWindows.svelte | 57 +++++ .../overview/platforms/[platform]/web.svelte | 59 +++++ .../overview/platforms/create.svelte | 12 +- 20 files changed, 1125 insertions(+), 46 deletions(-) create mode 100644 src/routes/console/project-[project]/overview/keys/[key]/delete.svelte create mode 100644 src/routes/console/project-[project]/overview/keys/create.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/appleIOS.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/appleMacOS.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/appleTvOS.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/appleWatchOS.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/delete.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/flutterAndroid.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/flutterIOS.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/flutterLinux.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/flutterMacOS.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/flutterWindows.svelte create mode 100644 src/routes/console/project-[project]/overview/platforms/[platform]/web.svelte diff --git a/src/routes/console/project-[project]/+layout.svelte b/src/routes/console/project-[project]/+layout.svelte index 1fc2d60d8..04544bef2 100644 --- a/src/routes/console/project-[project]/+layout.svelte +++ b/src/routes/console/project-[project]/+layout.svelte @@ -56,7 +56,11 @@ await project.load(projectId); if ($organization?.$id !== $project?.teamId) { await organization.load($project.teamId); + } else { + organization.load($project.teamId); } + } else { + project.load(projectId); } updateLayout({ diff --git a/src/routes/console/project-[project]/overview/+layout.svelte b/src/routes/console/project-[project]/overview/+layout.svelte index 00e1078ef..010742493 100644 --- a/src/routes/console/project-[project]/overview/+layout.svelte +++ b/src/routes/console/project-[project]/overview/+layout.svelte @@ -1,10 +1,12 @@ diff --git a/src/routes/console/project-[project]/overview/keys/+page.svelte b/src/routes/console/project-[project]/overview/keys/+page.svelte index 5dfb63b21..e79b4733c 100644 --- a/src/routes/console/project-[project]/overview/keys/+page.svelte +++ b/src/routes/console/project-[project]/overview/keys/+page.svelte @@ -1,5 +1,6 @@

API Keys

+
+

Platforms

+ + + +
@@ -55,3 +68,5 @@ {/each}
+ + diff --git a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte index 687d4e379..7fa472404 100644 --- a/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte +++ b/src/routes/console/project-[project]/overview/keys/[key]/+page@project-[project].svelte @@ -2,14 +2,40 @@ import { afterNavigate } from '$app/navigation'; import { base } from '$app/paths'; import { page } from '$app/stores'; + import { CardGrid } from '$lib/components'; + import { scopes } from '$lib/constants'; + import { + Button, + Form, + FormList, + InputCheckbox, + InputNumber, + InputPassword, + InputText + } from '$lib/elements/forms'; + import { toLocaleDateTime } from '$lib/helpers/date'; + import { Container } from '$lib/layout'; import { updateLayout } from '$lib/stores/layout'; + import { addNotification } from '$lib/stores/notifications'; + import { sdkForConsole } from '$lib/stores/sdk'; import { onMount } from 'svelte'; + import { project } from '../../../store'; + import Delete from './delete.svelte'; import { key } from './store'; const projectId = $page.params.project; const keyId = $page.params.key; + const activeScopes = scopes.reduce((prev, next) => { + prev[next] = false; + + return prev; + }, {}); let loaded = false; + let showDelete = false; + let name: string = null; + let secret: string = null; + let expire: number = null; onMount(handle); afterNavigate(handle); @@ -19,6 +45,14 @@ await key.load(projectId, keyId); } + name ??= $key.name; + secret ??= $key.secret; + expire ??= $key.expire; + unselectAll(); + $key.scopes.forEach((scope) => { + activeScopes[scope] = true; + }); + updateLayout({ navigate: event, back: `${base}/console/project-${$page.params.project}/overview/keys`, @@ -39,12 +73,193 @@ }); loaded = true; } + + async function updateName() { + try { + await sdkForConsole.projects.updateKey($project.$id, $key.$id, name, $key.scopes); + project.load($project.$id); + addNotification({ + type: 'success', + message: 'API Key name has been updated' + }); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + } + + async function updateExpire() { + try { + await sdkForConsole.projects.updateKey( + $project.$id, + $key.$id, + $key.name, + $key.scopes, + expire + ); + project.load($project.$id); + addNotification({ + type: 'success', + message: 'API Key expiration has been updated' + }); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + } + + async function updateScopes() { + console.log(scopes.filter((scope) => activeScopes[scope])); + try { + await sdkForConsole.projects.updateKey( + $project.$id, + $key.$id, + $key.name, + scopes.filter((scope) => activeScopes[scope]) + ); + project.load($project.$id); + addNotification({ + type: 'success', + message: 'API Key scopes has been updated' + }); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + } + + function unselectAll() { + for (const scope in activeScopes) { + activeScopes[scope] = false; + } + } Appwrite - API Key -{#if loaded} - -{/if} + + {#if loaded} + +
+
{$key.name}
+
+ +

+ Last accessed: {toLocaleDateTime($key.$updatedAt)}
+ Scopes granted: {$key.scopes.length} +

+
+
+
+ +
API Key Secret
+ + + + + + + + + +
+
+
+ +
Update Name
+

Choose any name that will help you distinguish between API keys.

+ + + + + + + + + +
+
+
+ +
Update Scopes
+

+ You can choose which permission scope to grant your application. It is a best + practice to allow only the permissions you need to meet your project goals. +

+ + + {#each scopes as scope} + + {/each} + + + + + + +
+
+
+ +
Update Expiration Date
+

Choose any name that will help you distinguish between API keys.

+ + + + + + + + + +
+
+ +
+
Delete API Key
+
+

The API Key will be permanently deleted. This action is irreversible.

+ +
+
+
+
{$key.name}
+

Last accessed: {toLocaleDateTime($key.$updatedAt)}

+
+
+
+
+ + + + +
+ {/if} +
+ + diff --git a/src/routes/console/project-[project]/overview/keys/[key]/delete.svelte b/src/routes/console/project-[project]/overview/keys/[key]/delete.svelte new file mode 100644 index 000000000..102db7f60 --- /dev/null +++ b/src/routes/console/project-[project]/overview/keys/[key]/delete.svelte @@ -0,0 +1,42 @@ + + +
+ + Delete API Key +

The API Key will be permanently deleted. This action is irreversible.

+ + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/keys/create.svelte b/src/routes/console/project-[project]/overview/keys/create.svelte new file mode 100644 index 000000000..80765d20c --- /dev/null +++ b/src/routes/console/project-[project]/overview/keys/create.svelte @@ -0,0 +1,55 @@ + + +
+ + Create API Key + + + {#each scopes as scope} + + {/each} + + + + + + +
diff --git a/src/routes/console/project-[project]/overview/platforms/+page.svelte b/src/routes/console/project-[project]/overview/platforms/+page.svelte index d5cb7c93a..d9c32cc40 100644 --- a/src/routes/console/project-[project]/overview/platforms/+page.svelte +++ b/src/routes/console/project-[project]/overview/platforms/+page.svelte @@ -1,6 +1,7 @@ -

- Platforms - -

- + + diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte index cc57f5300..26e0b151e 100644 --- a/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/+page@project-[project].svelte @@ -2,14 +2,46 @@ import { afterNavigate } from '$app/navigation'; import { base } from '$app/paths'; import { page } from '$app/stores'; + import { CardGrid } from '$lib/components'; + import { Button, Form, FormList, InputText } from '$lib/elements/forms'; + import { Container } from '$lib/layout'; import { updateLayout } from '$lib/stores/layout'; - import { onMount } from 'svelte'; + import { addNotification } from '$lib/stores/notifications'; + import { sdkForConsole } from '$lib/stores/sdk'; + import { onMount, SvelteComponent } from 'svelte'; + import { project } from '../../../store'; import { platform } from './store'; + import Delete from './delete.svelte'; + import Web from './web.svelte'; + import FlutterIos from './flutterIOS.svelte'; + import FlutterAndroid from './flutterAndroid.svelte'; + import FlutterLinux from './flutterLinux.svelte'; + import FlutterMacOs from './flutterMacOS.svelte'; + import FlutterWindows from './flutterWindows.svelte'; + import AppleiOs from './appleIOS.svelte'; + import AppleMacOs from './appleMacOS.svelte'; + import AppleWatchOs from './appleWatchOS.svelte'; + import AppleTvos from './appleTvOS.svelte'; const projectId = $page.params.project; const platformId = $page.params.platform; + const types: Record = { + web: Web, + android: Web, + 'apple-ios': AppleiOs, + 'apple-macos': AppleMacOs, + 'apple-watchos': AppleWatchOs, + 'apple-tvos': AppleTvos, + 'flutter-ios': FlutterIos, + 'flutter-android': FlutterAndroid, + 'flutter-linux': FlutterLinux, + 'flutter-macos': FlutterMacOs, + 'flutter-windows': FlutterWindows + }; let loaded = false; + let showDelete = false; + let name: string = null; onMount(handle); afterNavigate(handle); @@ -19,9 +51,11 @@ await platform.load(projectId, platformId); } + name ??= $platform.name; + updateLayout({ navigate: event, - back: `${base}/console/project-${$page.params.project}/overview/platforms`, + back: `${base}/console/project-${projectId}/overview/platforms`, title: $platform.name, level: 4, breadcrumbs: [ @@ -39,12 +73,73 @@ }); loaded = true; } + + const updateName = async () => { + try { + await sdkForConsole.projects.updatePlatform($project.$id, $platform.$id, name); + project.load($project.$id); + addNotification({ + type: 'success', + message: 'Platform name has been updated' + }); + } catch (error) { + addNotification({ + type: 'error', + message: error.message + }); + } + }; - - Appwrite - Platform - + + {#if loaded} +
+ +
Update Name
+

+ Choose any name that will help you distinguish between platforms. +

+ + + + + -{#if loaded} - -{/if} + + + +
+
+ + + + +
+
Delete Platform
+
+

The Platform will be permanently deleted. This action is irreversible.

+ +
+
+ +
+
{$platform.name}
+

{$platform.hostname}

+
+
+
+
+ + + + +
+ {/if} +
+ + diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/appleIOS.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/appleIOS.svelte new file mode 100644 index 000000000..14d34096b --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/appleIOS.svelte @@ -0,0 +1,60 @@ + + +
+ +
Update Bundle ID
+

+ You can find your Bundle Identifier in the General tab for your app's primary target in + Xcode. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/appleMacOS.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/appleMacOS.svelte new file mode 100644 index 000000000..14d34096b --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/appleMacOS.svelte @@ -0,0 +1,60 @@ + + +
+ +
Update Bundle ID
+

+ You can find your Bundle Identifier in the General tab for your app's primary target in + Xcode. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/appleTvOS.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/appleTvOS.svelte new file mode 100644 index 000000000..14d34096b --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/appleTvOS.svelte @@ -0,0 +1,60 @@ + + +
+ +
Update Bundle ID
+

+ You can find your Bundle Identifier in the General tab for your app's primary target in + Xcode. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/appleWatchOS.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/appleWatchOS.svelte new file mode 100644 index 000000000..14d34096b --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/appleWatchOS.svelte @@ -0,0 +1,60 @@ + + +
+ +
Update Bundle ID
+

+ You can find your Bundle Identifier in the General tab for your app's primary target in + Xcode. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/delete.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/delete.svelte new file mode 100644 index 000000000..1c1d4b637 --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/delete.svelte @@ -0,0 +1,42 @@ + + +
+ + Delete Platform +

The Platform will be permanently deleted. This action is irreversible.

+ + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/flutterAndroid.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterAndroid.svelte new file mode 100644 index 000000000..f29907097 --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterAndroid.svelte @@ -0,0 +1,59 @@ + + +
+ +
Update Package Name
+

+ Your package name is generally the applicationId in your app-level build.gradle file. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/flutterIOS.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterIOS.svelte new file mode 100644 index 000000000..14d34096b --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterIOS.svelte @@ -0,0 +1,60 @@ + + +
+ +
Update Bundle ID
+

+ You can find your Bundle Identifier in the General tab for your app's primary target in + Xcode. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/flutterLinux.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterLinux.svelte new file mode 100644 index 000000000..8323a7d6d --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterLinux.svelte @@ -0,0 +1,57 @@ + + +
+ +
Update Package Name
+

Your application name.

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/flutterMacOS.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterMacOS.svelte new file mode 100644 index 000000000..14d34096b --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterMacOS.svelte @@ -0,0 +1,60 @@ + + +
+ +
Update Bundle ID
+

+ You can find your Bundle Identifier in the General tab for your app's primary target in + Xcode. +

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/flutterWindows.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterWindows.svelte new file mode 100644 index 000000000..8323a7d6d --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/flutterWindows.svelte @@ -0,0 +1,57 @@ + + +
+ +
Update Package Name
+

Your application name.

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/[platform]/web.svelte b/src/routes/console/project-[project]/overview/platforms/[platform]/web.svelte new file mode 100644 index 000000000..2d1a7efd4 --- /dev/null +++ b/src/routes/console/project-[project]/overview/platforms/[platform]/web.svelte @@ -0,0 +1,59 @@ + + +
+ +
Update Hostname
+

You can use * to allow wildcard hostnames or subdomains.

+ + + + + + + + + +
+
diff --git a/src/routes/console/project-[project]/overview/platforms/create.svelte b/src/routes/console/project-[project]/overview/platforms/create.svelte index f0a2b5068..11c0597f8 100644 --- a/src/routes/console/project-[project]/overview/platforms/create.svelte +++ b/src/routes/console/project-[project]/overview/platforms/create.svelte @@ -1,6 +1,6 @@
Add Platform - - + + + +