mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-08 12:36:44 +03:00
84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
import type { APIRoute } from "astro";
|
|
import { db, users, configs } from "@/lib/db";
|
|
import { eq, and, sql } from "drizzle-orm";
|
|
import jwt from "jsonwebtoken";
|
|
|
|
const JWT_SECRET = process.env.JWT_SECRET || "your-secret-key";
|
|
|
|
export const GET: APIRoute = async ({ request, cookies }) => {
|
|
const authHeader = request.headers.get("Authorization");
|
|
const token = authHeader?.split(" ")[1] || cookies.get("token")?.value;
|
|
|
|
if (!token) {
|
|
const userCountResult = await db
|
|
.select({ count: sql<number>`count(*)` })
|
|
.from(users);
|
|
const userCount = userCountResult[0].count;
|
|
|
|
if (userCount === 0) {
|
|
return new Response(JSON.stringify({ error: "No users found" }), {
|
|
status: 404,
|
|
headers: { "Content-Type": "application/json" },
|
|
});
|
|
}
|
|
|
|
return new Response(JSON.stringify({ error: "Unauthorized" }), {
|
|
status: 401,
|
|
headers: { "Content-Type": "application/json" },
|
|
});
|
|
}
|
|
|
|
try {
|
|
const decoded = jwt.verify(token, JWT_SECRET) as { id: string };
|
|
|
|
const userResult = await db
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.id, decoded.id))
|
|
.limit(1);
|
|
|
|
if (!userResult.length) {
|
|
return new Response(JSON.stringify({ error: "User not found" }), {
|
|
status: 404,
|
|
headers: { "Content-Type": "application/json" },
|
|
});
|
|
}
|
|
|
|
const { password, ...userWithoutPassword } = userResult[0];
|
|
|
|
const configResult = await db
|
|
.select({
|
|
scheduleConfig: configs.scheduleConfig,
|
|
})
|
|
.from(configs)
|
|
.where(and(eq(configs.userId, decoded.id), eq(configs.isActive, true)))
|
|
.limit(1);
|
|
|
|
const scheduleConfig = configResult[0]?.scheduleConfig;
|
|
|
|
const syncEnabled = scheduleConfig?.enabled ?? false;
|
|
const syncInterval = scheduleConfig?.interval ?? 3600;
|
|
const lastSync = scheduleConfig?.lastRun ?? null;
|
|
const nextSync = scheduleConfig?.nextRun ?? null;
|
|
|
|
return new Response(
|
|
JSON.stringify({
|
|
...userWithoutPassword,
|
|
syncEnabled,
|
|
syncInterval,
|
|
lastSync,
|
|
nextSync,
|
|
}),
|
|
{
|
|
status: 200,
|
|
headers: { "Content-Type": "application/json" },
|
|
}
|
|
);
|
|
} catch (error) {
|
|
return new Response(JSON.stringify({ error: "Invalid token" }), {
|
|
status: 401,
|
|
headers: { "Content-Type": "application/json" },
|
|
});
|
|
}
|
|
};
|