mirror of
https://github.com/crocofied/CoreControl.git
synced 2025-12-17 23:47:13 +00:00
65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
import { NextResponse, NextRequest } from "next/server";
|
|
import jwt from 'jsonwebtoken';
|
|
import { prisma } from "@/lib/prisma";
|
|
import bcrypt from 'bcryptjs';
|
|
|
|
interface LoginRequest {
|
|
username: string;
|
|
password: string;
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body: LoginRequest = await request.json();
|
|
const { username, password } = body;
|
|
|
|
// Ensure JWT_SECRET is defined
|
|
if (!process.env.JWT_SECRET) {
|
|
throw new Error('JWT_SECRET is not defined');
|
|
}
|
|
|
|
let accountId: string = '';
|
|
// Check if there are any entries in user
|
|
const userCount = await prisma.user.count();
|
|
if (userCount === 0) {
|
|
if(username=== "admin@example.com" && password === "admin") {
|
|
// Hash the password
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
// Create the first user with hashed password
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
email: username,
|
|
password: hashedPassword,
|
|
},
|
|
});
|
|
|
|
// Get the account id
|
|
accountId = user.id;
|
|
} else {
|
|
return NextResponse.json({ error: "Wrong credentials" }, { status: 401 });
|
|
}
|
|
} else {
|
|
// Get the user by username
|
|
const user = await prisma.user.findUnique({
|
|
where: { email: username },
|
|
});
|
|
if (!user) {
|
|
return NextResponse.json({ error: "Wrong credentials" }, { status: 401 });
|
|
}
|
|
// Check if the password is correct
|
|
const isPasswordValid = await bcrypt.compare(password, user.password);
|
|
if (!isPasswordValid) {
|
|
return NextResponse.json({ error: "Wrong credentials" }, { status: 401 });
|
|
}
|
|
// Get the account id
|
|
accountId = user.id;
|
|
}
|
|
|
|
// Create JWT
|
|
const token = jwt.sign({ account_secret: accountId }, process.env.JWT_SECRET, { expiresIn: '7d' });
|
|
|
|
return NextResponse.json({ token });
|
|
} catch (error: any) {
|
|
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
}
|
|
} |