Implement safe crypto
This commit is contained in:
@@ -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>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user