encryption of sqlite working

This commit is contained in:
Martin Drechsel
2025-04-28 12:18:39 +02:00
parent 2c5ec6b281
commit 410a885d21
31 changed files with 3664 additions and 1766 deletions

View File

@ -1,63 +1,52 @@
<template>
<UiDialog
:title="t('title')"
v-model:open="open"
>
<template #trigger="{ id }">
<button
class="btn btn-primary btn-outline shadow-md md:btn-lg shrink-0 flex-1 whitespace-nowrap flex-nowrap"
@click="open = true"
>
<Icon name="mdi:plus" />
{{ t('database.create') }}
</button>
</template>
<UiDialog :title="t('title')" v-model:open="open">
<template #trigger="{ id }">
<button
class="btn btn-primary btn-outline shadow-md md:btn-lg shrink-0 flex-1 whitespace-nowrap flex-nowrap"
@click="open = true"
>
<Icon name="mdi:plus" />
{{ t("database.create") }}
</button>
</template>
<form
class="flex flex-col gap-4"
@submit="onCreateAsync"
>
<!-- @keyup.enter="onCreateAsync" -->
<UiInput
:check-input="check"
:label="t('database.label')"
:placeholder="t('database.placeholder')"
:rules="vaultDatabaseSchema.name"
autofocus
prepend-icon="mdi:safe"
v-model="database.name"
/>
<form class="flex flex-col gap-4" @submit="onCreateAsync">
<!-- @keyup.enter="onCreateAsync" -->
<UiInput
:check-input="check"
:label="t('database.label')"
:placeholder="t('database.placeholder')"
:rules="vaultDatabaseSchema.name"
autofocus
prepend-icon="mdi:safe"
v-model="database.name"
/>
<UiInputPassword
:check-input="check"
:rules="vaultDatabaseSchema.password"
prepend-icon="mdi:key-outline"
v-model="database.password"
/>
</form>
<UiInputPassword
:check-input="check"
:rules="vaultDatabaseSchema.password"
prepend-icon="mdi:key-outline"
v-model="database.password"
/>
</form>
<template #buttons>
<UiButton
class="btn-error"
@click="onClose"
>
{{ t('abort') }}
</UiButton>
<template #buttons>
<UiButton class="btn-error" @click="onClose">
{{ t("abort") }}
</UiButton>
<UiButton
class="btn-primary"
@click="onCreateAsync"
>
{{ t('create') }}
</UiButton>
</template>
</UiDialog>
<UiButton class="btn-primary" @click="onCreateAsync">
{{ t("create") }}
</UiButton>
</template>
</UiDialog>
</template>
<script setup lang="ts">
import { save } from '@tauri-apps/plugin-dialog';
import { useVaultStore } from '~/stores/vault';
import { vaultDatabaseSchema } from './schema';
import { save } from "@tauri-apps/plugin-dialog";
import { useVaultStore } from "~/stores/vault";
import { vaultDatabaseSchema } from "./schema";
import Database from "@tauri-apps/plugin-sql";
const check = ref(false);
const open = ref();
@ -65,101 +54,93 @@ const open = ref();
const { t } = useI18n();
const database = reactive<{
name: string;
password: string;
path: string | null;
type: 'password' | 'text';
name: string;
password: string;
path: string | null;
type: "password" | "text";
}>({
name: '',
password: '',
path: '',
type: 'password',
name: "",
password: "",
path: "",
type: "password",
});
const initDatabase = () => {
database.name = t('database.name');
database.password = '';
database.path = '';
database.type = 'password';
database.name = t("database.name");
database.password = "";
database.path = "";
database.type = "password";
};
initDatabase();
const { add } = useSnackbar();
const { createAsync } = useVaultStore();
//const { show } = storeToRefs(useSidebarStore());
const onCreateAsync = async () => {
check.value = true;
check.value = true;
const nameCheck = vaultDatabaseSchema.name.safeParse(database.name);
const passwordCheck = vaultDatabaseSchema.password.safeParse(
database.password
);
const nameCheck = vaultDatabaseSchema.name.safeParse(database.name);
const passwordCheck = vaultDatabaseSchema.password.safeParse(database.password);
console.log(
'checks',
database.name,
nameCheck,
database.password,
passwordCheck
);
if (!nameCheck.success || !passwordCheck.success) return;
console.log("checks", database.name, nameCheck, database.password, passwordCheck);
if (!nameCheck.success || !passwordCheck.success) return;
open.value = false;
try {
database.path = await save({ defaultPath: `${database.name}.db` });
open.value = false;
try {
database.path = await save({
defaultPath: database.name.endsWith(".db") ? database.name : `${database.name}.db`,
});
console.log('data', database);
if (database.path && database.password) {
const vaultId = await createAsync({
path: database.path,
password: database.password,
});
//show.value = true;
console.log("data", database);
await navigateTo(
useLocaleRoute()({ name: 'vault', params: { vaultId } })
);
if (database.path && database.password) {
const vaultId = await createAsync({
path: database.path,
password: database.password,
});
console.log("vaultId", vaultId);
await navigateTo(useLocaleRoute()({ name: "vaultOverview", params: { vaultId } }));
}
} catch (error) {
console.error(error);
add({ type: "error", text: JSON.stringify(error) });
}
} catch (error) {
console.error(error);
add({ type: 'error', text: JSON.stringify(error) });
}
};
const onClose = () => {
open.value = false;
initDatabase();
open.value = false;
initDatabase();
};
</script>
<i18n lang="json">
{
"de": {
"database": {
"label": "Datenbankname",
"placeholder": "Passwörter",
"create": "Neue Vault anlegen",
"name": "Passwörter"
"de": {
"database": {
"label": "Datenbankname",
"placeholder": "Passwörter",
"create": "Neue Vault anlegen",
"name": "Passwörter"
},
"title": "Neue Datenbank anlegen",
"create": "Erstellen",
"abort": "Abbrechen",
"description": "Haex Vault für deine geheimsten Geheimnisse"
},
"title": "Neue Datenbank anlegen",
"create": "Erstellen",
"abort": "Abbrechen",
"description": "Haex Vault für deine geheimsten Geheimnisse"
},
"en": {
"database": {
"label": "Databasename",
"placeholder": "Databasename",
"create": "Create new Vault",
"name": "Passwords"
},
"title": "Create New Database",
"create": "Create",
"abort": "Abort",
"description": "Haex Vault for your most secret secrets"
}
"en": {
"database": {
"label": "Databasename",
"placeholder": "Databasename",
"create": "Create new Vault",
"name": "Passwords"
},
"title": "Create New Database",
"create": "Create",
"abort": "Abort",
"description": "Haex Vault for your most secret secrets"
}
}
</i18n>

View File

@ -7,7 +7,7 @@
@click="onLoadDatabase"
>
<Icon name="mdi:folder-open-outline" />
{{ t('database.open') }}
{{ t("database.open") }}
</button>
</template>
@ -21,31 +21,24 @@
/>
<template #buttons>
<UiButton
class="btn-error"
@click="onClose"
>
{{ t('abort') }}
<UiButton class="btn-error" @click="onClose">
{{ t("abort") }}
</UiButton>
<UiButton
type="submit"
class="btn-primary"
@click="onOpenDatabase"
>
{{ t('open') }}
<UiButton type="submit" class="btn-primary" @click="onOpenDatabase">
{{ t("open") }}
</UiButton>
</template>
</UiDialog>
</template>
<script setup lang="ts">
import { open } from '@tauri-apps/plugin-dialog';
import { vaultDatabaseSchema } from './schema';
import { open } from "@tauri-apps/plugin-dialog";
import { vaultDatabaseSchema } from "./schema";
const { t } = useI18n();
const isOpen = defineModel('isOpen', { type: Boolean });
const isOpen = defineModel("isOpen", { type: Boolean });
const props = defineProps({
path: String,
@ -57,19 +50,19 @@ const database = reactive<{
name: string;
password: string;
path: string | null;
type: 'password' | 'text';
type: "password" | "text";
}>({
name: '',
password: '',
path: '',
type: 'password',
name: "",
password: "",
path: "",
type: "password",
});
const initDatabase = () => {
database.name = '';
database.password = '';
database.path = '';
database.type = 'password';
database.name = "";
database.password = "";
database.path = "";
database.type = "password";
};
initDatabase();
@ -78,7 +71,7 @@ const { add } = useSnackbar();
const handleError = (error: unknown) => {
isOpen.value = false;
add({ type: 'error', text: JSON.stringify(error) });
add({ type: "error", text: JSON.stringify(error) });
//console.error(error);
};
@ -92,8 +85,8 @@ const onLoadDatabase = async () => {
directory: false,
filters: [
{
name: 'HaexVault',
extensions: ['db'],
name: "HaexVault",
extensions: ["db"],
},
],
});
@ -112,16 +105,14 @@ const onOpenDatabase = async () => {
check.value = true;
const path = database.path || props.path;
const pathCheck = vaultDatabaseSchema.path.safeParse(path);
const passwordCheck = vaultDatabaseSchema.password.safeParse(
database.password
);
const passwordCheck = vaultDatabaseSchema.password.safeParse(database.password);
if (!pathCheck.success || !passwordCheck.success || !path) {
add({ type: 'error', text: 'params falsch' });
add({ type: "error", text: "params falsch" });
return;
}
//console.log('try to open', path);
console.log("try to open", path);
const vaultId = await openAsync({
path,
@ -129,23 +120,23 @@ const onOpenDatabase = async () => {
});
if (!vaultId) {
add({ type: 'error', text: 'Vault konnte nicht geöffnet werden' });
add({ type: "error", text: "Vault konnte nicht geöffnet werden" });
return;
}
onClose();
/* await navigateTo(
await navigateTo(
localePath({
name: 'vaultGroup',
name: "vaultOverview",
params: {
vaultId,
},
query: {
showSidebar: 'true',
showSidebar: "true",
},
})
); */
);
} catch (error) {
console.log(error);
handleError(error);