Implement safe crypto

This commit is contained in:
nocnico
2025-04-28 20:22:39 +02:00
parent b5e96e02c3
commit 0fa4e1107b
5 changed files with 33 additions and 42 deletions

View File

@@ -1,20 +0,0 @@
"use client";
import { usePannelStore } from "_store/pannelStore";
import { cn } from "helpers/cn";
export const OpenButton = () => {
const { setOpen, isOpen } = usePannelStore();
return (
<button
onClick={() => {
setOpen(true);
}}
className={cn(
"btn rounded-r-none absolute inset-y-2.5 right-0 z-999999 transition-all duration-500 ease",
isOpen && "transform translate-x-full",
)}
>
Neuer Einsatz
</button>
);
};

View File

@@ -1,6 +1,5 @@
"use client"; "use client";
import { OpenButton } from "dispatch/_components/pannel/OpenButton";
import { Pannel } from "dispatch/_components/pannel/Pannel"; import { Pannel } from "dispatch/_components/pannel/Pannel";
import { usePannelStore } from "_store/pannelStore"; import { usePannelStore } from "_store/pannelStore";
import { cn } from "helpers/cn"; import { cn } from "helpers/cn";
@@ -13,7 +12,6 @@ const DispatchPage = () => {
<div className="relative flex-1 flex transition-all duration-500 ease w-full"> <div className="relative flex-1 flex transition-all duration-500 ease w-full">
{/* <MapToastCard2 /> */} {/* <MapToastCard2 /> */}
<div className="flex flex-1 relative"> <div className="flex flex-1 relative">
<OpenButton />
<Map /> <Map />
</div> </div>
<div <div

View File

@@ -1,5 +1,4 @@
"use server"; "use server";
import { PrismaClient } from "@prisma/client";
import { prisma, Prisma } from "@repo/db"; import { prisma, Prisma } from "@repo/db";
import bcrypt from "bcryptjs"; import bcrypt from "bcryptjs";
import { sendMailByTemplate } from "../../../../helper/mail"; import { sendMailByTemplate } from "../../../../helper/mail";
@@ -14,7 +13,11 @@ export const editUser = async (id: string, data: Prisma.UserUpdateInput) => {
}; };
export const resetPassword = async (id: string) => { export const resetPassword = async (id: string) => {
const password = Math.random().toString(36).slice(-8); const array = new Uint8Array(8);
crypto.getRandomValues(array);
const password = Array.from(array, (byte) =>
("0" + (byte % 36).toString(36)).slice(-1),
).join("");
const hashedPassword = await bcrypt.hash(password, 12); const hashedPassword = await bcrypt.hash(password, 12);
const user = await prisma.user.update({ const user = await prisma.user.update({

View File

@@ -1,24 +1,30 @@
'use server'; "use server";
import { getServerSession } from '../../../api/auth/[...nextauth]/auth'; import { getServerSession } from "../../../api/auth/[...nextauth]/auth";
import { Service } from '../page'; import { Service } from "../page";
import { PrismaClient } from '@repo/db'; import { PrismaClient } from "@repo/db";
const prisma = new PrismaClient(); const prisma = new PrismaClient();
export const generateToken = async (service: Service) => { export const generateToken = async (service: Service) => {
const session = await getServerSession(); const session = await getServerSession();
if (!session) return null; if (!session) return null;
const accessToken = Array.from({ length: 10 }, () => const key = await crypto.subtle.generateKey(
Math.floor(Math.random() * 10) { name: "HMAC", hash: "SHA-256" },
).join(''); true,
["sign"],
);
const exportedKey = await crypto.subtle.exportKey("raw", key);
const accessToken = Array.from(new Uint8Array(exportedKey))
.map((byte) => byte.toString(16).padStart(2, "0"))
.join("");
const code = await prisma.oAuthToken.create({ const code = await prisma.oAuthToken.create({
data: { data: {
clientId: service.id, clientId: service.id,
userId: session.user.id, userId: session.user.id,
accessToken: accessToken, accessToken: accessToken,
}, },
}); });
return code; return code;
}; };

View File

@@ -16,7 +16,11 @@ export const resetPassword = async (email: string) => {
return { error: "Nutzer nicht gefunden" }; return { error: "Nutzer nicht gefunden" };
} }
const password = Math.random().toString(36).slice(-8); const array = new Uint8Array(8);
crypto.getRandomValues(array);
const password = Array.from(array, (byte) =>
("0" + (byte % 36).toString(36)).slice(-1),
).join("");
const hashedPassword = await bcrypt.hash(password, 12); const hashedPassword = await bcrypt.hash(password, 12);
await prisma.user.update({ await prisma.user.update({
where: { where: {