diff --git a/src-tauri/src/srv/creddy_server.rs b/src-tauri/src/srv/creddy_server.rs index 8f71f53..b1981e3 100644 --- a/src-tauri/src/srv/creddy_server.rs +++ b/src-tauri/src/srv/creddy_server.rs @@ -1,4 +1,3 @@ -use sqlx::types::uuid::Uuid; use tauri::{AppHandle, Manager}; use tokio::io::{AsyncReadExt, AsyncWriteExt}; @@ -7,7 +6,6 @@ use crate::credentials::{ self, Credential, CredentialRecord, - Crypto, DockerCredential, }; use crate::errors::*; diff --git a/src/views/ManageCredentials.svelte b/src/views/ManageCredentials.svelte index 9e9a1c2..93e2558 100644 --- a/src/views/ManageCredentials.svelte +++ b/src/views/ManageCredentials.svelte @@ -6,9 +6,8 @@ import AwsCredential from './credentials/AwsCredential.svelte'; import ConfirmDelete from './credentials/ConfirmDelete.svelte'; + import DockerCredential from './credentials/DockerCredential.svelte'; import SshKey from './credentials/SshKey.svelte'; - // import NewSshKey from './credentials/NewSshKey.svelte'; - // import EditSshKey from './credentials/EditSshKey.svelte'; import Icon from '../ui/Icon.svelte'; import Nav from '../ui/Nav.svelte'; @@ -16,6 +15,7 @@ let records = null $: awsRecords = (records || []).filter(r => r.credential.type === 'AwsBase'); $: sshRecords = (records || []).filter(r => r.credential.type === 'Ssh'); + $: dockerRecords = (records || []).filter(r => r.credential.type === 'Docker'); let defaults = writable({}); async function loadCreds() { @@ -47,6 +47,17 @@ records = records; } + function newDocker() { + records.push({ + id: crypto.randomUUID(), + name: null, + is_default: false, + credential: {type: 'Docker', ServerURL: '', Username: '', Secret: ''}, + isNew: true, + }); + records = records; + } + let confirmDelete; function handleDelete(evt) { const record = evt.detail; @@ -117,6 +128,29 @@ {/if} +
+
+

Docker credentials

+
+ + {#if dockerRecords.length > 0} + {#each dockerRecords as record (record.id)} + + {/each} + + {:else if records !== null} +
+
You have no saved Docker credentials.
+ +
+ {/if} +
diff --git a/src/views/credentials/AwsCredential.svelte b/src/views/credentials/AwsCredential.svelte index a99f98b..3905399 100644 --- a/src/views/credentials/AwsCredential.svelte +++ b/src/views/credentials/AwsCredential.svelte @@ -5,20 +5,19 @@ import ErrorAlert from '../../ui/ErrorAlert.svelte'; import Icon from '../../ui/Icon.svelte'; + import PassphraseInput from '../../ui/PassphraseInput.svelte'; + export let record; export let defaults; - import PassphraseInput from '../../ui/PassphraseInput.svelte'; - - const dispatch = createEventDispatcher(); let showDetails = record.isNew ? true : false; let local = JSON.parse(JSON.stringify(record)); $: isModified = JSON.stringify(local) !== JSON.stringify(record); - + // explicitly subscribe to updates to `default`, so that we can update // our local copy even if the component hasn't been recreated // (sadly we can't use a reactive binding because reasons I guess) @@ -31,7 +30,7 @@ showDetails = false; } - + diff --git a/src/views/credentials/ConfirmDelete.svelte b/src/views/credentials/ConfirmDelete.svelte index 4960626..131fa69 100644 --- a/src/views/credentials/ConfirmDelete.svelte +++ b/src/views/credentials/ConfirmDelete.svelte @@ -26,9 +26,12 @@ if (record.credential.type === 'AwsBase') { return 'AWS credential'; } - if (record.credential.type === 'Ssh') { + else if (record.credential.type === 'Ssh') { return 'SSH key'; } + else { + return `${record.credential.type} credential`; + } } diff --git a/src/views/credentials/DockerCredential.svelte b/src/views/credentials/DockerCredential.svelte new file mode 100644 index 0000000..0c3dfc9 --- /dev/null +++ b/src/views/credentials/DockerCredential.svelte @@ -0,0 +1,105 @@ + + +
+
+ {#if !record.isNew} + {#if showDetails} + + {:else} +

+ {record.name} +

+ {/if} + {/if} + +
+ + +
+
+ + {#if showDetails} +
alert.run(saveCredential)} + > + + +
+ {#if record.isNew} + Name + + {/if} + + Server URL + + + Password +
+ +
+
+ +
+ {#if isModified} + + {/if} +
+ + {/if} +