revised init db pw to pin, and check name routine

This commit is contained in:
2025-07-28 11:39:33 +02:00
parent 4406a86f44
commit dfa5c9ade1
8 changed files with 55 additions and 49 deletions

View File

@@ -13,7 +13,8 @@
"format": "prettier --write .", "format": "prettier --write .",
"lint": "prettier --check . && eslint .", "lint": "prettier --check . && eslint .",
"test:unit": "vitest", "test:unit": "vitest",
"test": "npm run test:unit -- --run && npm run test:e2e" "test": "npm run test:unit -- --run && npm run test:e2e",
"init-db": "tsx ./src/init/init_db.ts"
}, },
"devDependencies": { "devDependencies": {
"@eslint/compat": "^1.2.9", "@eslint/compat": "^1.2.9",

View File

@@ -12,7 +12,7 @@ db.exec(createSQLStmt);
// check if there are any users; if not add one default admin one // check if there are any users; if not add one default admin one
const userPassword = 'pass-123'; const userPassword = 'pass-123';
const hashedUserPassword = new jsSHA('SHA-512', 'TEXT').update(userPassword).getHash('HEX'); const hashedUserPassword = new jsSHA('SHA-512', 'TEXT').update(userPassword).getHash('HEX');
const checkInsertSQLStmt = `INSERT INTO users (name, pin) SELECT 'admin', '${hashedUserPassword}' const checkInsertSQLStmt = `INSERT INTO users (name, pw) SELECT 'admin', '${hashedUserPassword}'
WHERE NOT EXISTS (SELECT * FROM users);`; WHERE NOT EXISTS (SELECT * FROM users);`;
db.exec(checkInsertSQLStmt); db.exec(checkInsertSQLStmt);

Binary file not shown.

View File

@@ -143,8 +143,8 @@ export const vorgangExists = function (vorgangToken: string | null) {
return found; return found;
}; };
export const vorgangNameExists = function (vorgangName: string) { export const vorgangNameExists = async (vorgangName: string) => {
const vorgaenge = getVorgaenge(); const vorgaenge = await getVorgaenge();
const vorgaengeNames = vorgaenge.map((vorgang) => vorgang.vorgangName); const vorgaengeNames = vorgaenge.map((vorgang) => vorgang.vorgangName);
const found = vorgaengeNames.indexOf(vorgangName) != -1; const found = vorgaengeNames.indexOf(vorgangName) != -1;

View File

@@ -2,7 +2,7 @@ import { getVorgaenge } from '$lib/server/vorgangService';
import type { PageServerLoad } from '../../(token-based)/view/$types'; import type { PageServerLoad } from '../../(token-based)/view/$types';
export const load: PageServerLoad = async () => { export const load: PageServerLoad = async () => {
const vorgangList = getVorgaenge(); const vorgangList = await getVorgaenge();
return { return {
vorgangList vorgangList

View File

@@ -19,13 +19,13 @@
function generatePIN() { function generatePIN() {
return Math.random() return Math.random()
.toString(36) .toString(36)
.slice(2, 2 + PINLength); .slice(2, 2 + PINLength);
} }
let vorgangPIN = '' let vorgangPIN = '';
let vorgangPINOld = '' let vorgangPINOld = '';
$: vorgangPINOld = generatePIN(); $: vorgangPINOld = generatePIN();
$: vorgangPIN = vorgangPINOld $: vorgangPIN = vorgangPINOld;
let vorgangExists = undefined; let vorgangExists = undefined;
$: vorgangExists = false; $: vorgangExists = false;
@@ -36,7 +36,7 @@
$: inProgress = form === null; $: inProgress = form === null;
let formErrors: Record<string,any> | null; let formErrors: Record<string, any> | null;
async function validateForm() { async function validateForm() {
let data = new FormData(); let data = new FormData();
@@ -139,6 +139,7 @@
// big endian! // big endian!
let file = files[0]; let file = files[0];
let file_header = file.slice(0, 4); let file_header = file.slice(0, 4);
console.log(file_header);
let header_bytes = await file_header.bytes(); let header_bytes = await file_header.bytes();
let file_header_hex = '0x' + header_bytes.toHex().toString(); let file_header_hex = '0x' + header_bytes.toHex().toString();
@@ -152,33 +153,36 @@
// `/(angemeldet)/view` return true or false // `/(angemeldet)/view` return true or false
async function checkVorgangExists(vorgangName: string) { async function checkVorgangExists(vorgangName: string) {
if (vorgangName == '') { if (vorgangName == '') {
vorgangPIN = vorgangPINOld; vorgangPIN = vorgangPINOld;
return; return;
} }
let url = `/api/list/${vorgangName}` try {
const url = `/api/list/${vorgangName}`;
const response = await fetch(url, { method: 'HEAD' });
const response = await fetch(url, { method: 'HEAD'}); if (response.status === 200) {
const status = response.status; console.log('Vorgang existiert:', vorgangName);
vorgangExists = true;
if (status == 200) { const token = await getVorgangPIN(vorgangName);
vorgangExists = true; vorgangPIN = token;
const token = await getVorgangPIN(vorgangName); return true;
vorgangPIN = token; } else {
console.log('Vorgang existiert nicht!');
return true vorgangExists = false;
vorgangPIN = vorgangPINOld;
} else { return false;
}
} catch (err) {
console.error('Fehler bei checkVorgangExists:', err);
vorgangExists = false; vorgangExists = false;
vorgangPIN = vorgangPINOld; vorgangPIN = vorgangPINOld;
return false return false;
} }
} }
async function getVorgangPIN(vorgangName: string) { async function getVorgangPIN(vorgangName: string) {
if (vorgangName == '') return; if (vorgangName == '') return;
let url = `/api/list/${vorgangName}/vorgangPIN`; let url = `/api/list/${vorgangName}/vorgangPIN`;
@@ -190,7 +194,6 @@
return -1; return -1;
} }
} }
</script> </script>
<div class="mx-auto max-w-2xl"> <div class="mx-auto max-w-2xl">
@@ -211,7 +214,7 @@
><span class="flex" ><span class="flex"
>{#if formErrors?.vorgang} >{#if formErrors?.vorgang}
<span class="inline-block mr-1"><Exclamation /></span> <span class="inline-block mr-1"><Exclamation /></span>
{/if} Vorgang</span {/if} Vorgangsname</span
></label ></label
> >
<div class="mt-2"> <div class="mt-2">
@@ -241,10 +244,10 @@
<div> <div>
<label for="name" class="block text-sm font-medium leading-6 text-gray-900" <label for="name" class="block text-sm font-medium leading-6 text-gray-900"
><span class="flex" ><span class="flex"
>{#if formErrors?.name} >{#if formErrors?.name}
<span class="inline-block mr-1"><Exclamation /></span> <span class="inline-block mr-1"><Exclamation /></span>
{/if} Name</span {/if} Modellname</span
></label ></label
> >
<div class="mt-2"> <div class="mt-2">
@@ -283,16 +286,19 @@
type="text" type="text"
name="vorgang-pin" name="vorgang-pin"
id="vorgang-pin" id="vorgang-pin"
on:input="{ (ev) => { vorgangPINOld = ev.target.value }}" on:input={(ev) => {
vorgangPINOld = ev.target.value;
}}
class="block flex-1 border-0 bg-transparent py-1.5 pl-1 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm sm:leading-6" class="block flex-1 border-0 bg-transparent py-1.5 pl-1 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm sm:leading-6"
/> />
</div> </div>
<button <button
class="rounded-md bg-blue-500 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" class="rounded-md bg-blue-500 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
on:click="{() => { on:click={() => {
vorgangPIN = vorgangPINOld = generatePIN(); }}" vorgangPIN = vorgangPINOld = generatePIN();
type="button"> }}
type="button"
>
Generiere Zugangs-PIN Generiere Zugangs-PIN
</button> </button>
</div> </div>

View File

@@ -1,8 +1,5 @@
import { client } from '$lib/minio'; import { client } from '$lib/minio';
import { import { deleteVorgangByToken, vorgangNameExists } from '$lib/server/vorgangService';
deleteVorgangByToken,
vorgangNameExists
} from '$lib/server/vorgangService';
export async function DELETE({ params }) { export async function DELETE({ params }) {
const vorgangToken = params.vorgang; const vorgangToken = params.vorgang;
@@ -29,13 +26,15 @@ export async function DELETE({ params }) {
} }
export async function HEAD({ params }) { export async function HEAD({ params }) {
const vorgangName = params.vorgang; try {
const vorgangName = params.vorgang;
const existing = await vorgangNameExists(vorgangName);
const existing = vorgangNameExists(vorgangName); return new Response(null, {
status: existing ? 200 : 404
if (existing) { });
return new Response(null, { status: 200 }); } catch (err) {
} else { console.error('Fehler im HEAD-Handler:', err);
return new Response(null, { status: 404 }); return new Response(null, { status: 500 });
} }
} }

View File

@@ -6,7 +6,7 @@ export async function GET({ params }) {
const getPINSQLStatement = `SELECT pin FROM cases WHERE name = ?;`; const getPINSQLStatement = `SELECT pin FROM cases WHERE name = ?;`;
const row = db.prepare(getPINSQLStatement).get(vorgangName); const row = db.prepare(getPINSQLStatement).get(vorgangName);
const vorgangPIN = row.pin; const vorgangPIN = row?.pin;
if (vorgangPIN) { if (vorgangPIN) {
return new Response(vorgangPIN, { status: 200 }); return new Response(vorgangPIN, { status: 200 });