done with upgrades..... I believe
This commit is contained in:
@@ -7,108 +7,110 @@ import { z } from "zod";
|
||||
import { dbApiUser } from "$lib/server/db/apiuser.db";
|
||||
import type { ServerError } from "$lib/utils/data.types";
|
||||
import {
|
||||
isSessionValidInStore,
|
||||
removeSessionFromStore,
|
||||
setSessionToRedis,
|
||||
isSessionValidInStore,
|
||||
removeSessionFromStore,
|
||||
setSessionToRedis,
|
||||
} from "$lib/server/utils/session.service";
|
||||
|
||||
export const apiAuthRouter = createTRPCRouter({
|
||||
getCaptcha: protectedProcedure.mutation(async () => {
|
||||
try {
|
||||
const uuid = getUUID();
|
||||
const res = await fetch(
|
||||
`${constants.SCRAP_API_URL}/verify/image?uuid=${uuid}`,
|
||||
{
|
||||
headers: {
|
||||
...constants.SCRAP_API_BASE_HEADERS,
|
||||
Accept:
|
||||
"image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
|
||||
},
|
||||
},
|
||||
);
|
||||
const bloob = await res.blob();
|
||||
const imageBuffer = Buffer.from(await bloob.arrayBuffer());
|
||||
const base64String = imageBuffer.toString("base64");
|
||||
return { id: uuid, image: base64String };
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw new TRPCError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Error getting captcha image.",
|
||||
});
|
||||
}
|
||||
}),
|
||||
|
||||
getNewSession: protectedProcedure
|
||||
.input(
|
||||
z.object({
|
||||
captchaId: z.string().min(1),
|
||||
captchaAnswer: z.string().min(1),
|
||||
userId: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.mutation(async ({ input }) => {
|
||||
console.log("[=] Getting new session... ", input);
|
||||
try {
|
||||
const { captchaId, captchaAnswer } = input;
|
||||
let { userId, userType, password } =
|
||||
await dbApiUser.getRandomDistributor();
|
||||
|
||||
if (input.userId) {
|
||||
let _user = await dbApiUser.getUserById(input.userId);
|
||||
console.log("[=] User :: ", _user?.userId);
|
||||
if (!_user) {
|
||||
return {
|
||||
success: false,
|
||||
errors: [{ message: "User not found." }],
|
||||
};
|
||||
}
|
||||
userId = _user.userId;
|
||||
userType = _user.userType;
|
||||
password = _user.password;
|
||||
getCaptcha: protectedProcedure.mutation(async () => {
|
||||
try {
|
||||
const uuid = getUUID();
|
||||
const res = await fetch(
|
||||
`${constants.SCRAP_API_URL}/verify/image?uuid=${uuid}`,
|
||||
{
|
||||
headers: {
|
||||
...constants.SCRAP_API_BASE_HEADERS,
|
||||
Accept: "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
|
||||
},
|
||||
},
|
||||
);
|
||||
const bloob = await res.blob();
|
||||
const imageBuffer = Buffer.from(await bloob.arrayBuffer());
|
||||
const base64String = imageBuffer.toString("base64");
|
||||
return { id: uuid, image: base64String };
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw new TRPCError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Error getting captcha image.",
|
||||
});
|
||||
}
|
||||
console.log(`[=] Getting session token for user ${userId}...`);
|
||||
const token = await getSessionToken({
|
||||
code: captchaAnswer,
|
||||
verifyToken: captchaId,
|
||||
userId: userId,
|
||||
userType: userType,
|
||||
password: password,
|
||||
});
|
||||
console.log("[=] Token Response :: ", JSON.stringify(token, null, 2));
|
||||
if (!token.ok) {
|
||||
return {
|
||||
success: false,
|
||||
errors: [{ message: token.message }],
|
||||
};
|
||||
}
|
||||
await setSessionToRedis(token.message, input.userId ?? "");
|
||||
return { success: true, errors: [] as ServerError };
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw new TRPCError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Error getting new session.",
|
||||
});
|
||||
}
|
||||
}),
|
||||
|
||||
isApiSessionValid: protectedProcedure
|
||||
.input(
|
||||
z.object({
|
||||
checkingUserSession: z.boolean(),
|
||||
userId: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ input }) => {
|
||||
return { valid: await isSessionValidInStore(input.userId) };
|
||||
}),
|
||||
getNewSession: protectedProcedure
|
||||
.input(
|
||||
z.object({
|
||||
captchaId: z.string().min(1),
|
||||
captchaAnswer: z.string().min(1),
|
||||
userId: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.mutation(async ({ input }) => {
|
||||
console.log("[=] Getting new session... ", input);
|
||||
try {
|
||||
const { captchaId, captchaAnswer } = input;
|
||||
let { userId, userType, password } =
|
||||
await dbApiUser.getRandomDistributor();
|
||||
|
||||
logoutUser: protectedProcedure
|
||||
.input(z.object({ userId: z.string().optional() }))
|
||||
.mutation(async ({ input }) => {
|
||||
const { userId } = input;
|
||||
await removeSessionFromStore(userId);
|
||||
return { success: true, errors: [] as ServerError };
|
||||
}),
|
||||
if (input.userId) {
|
||||
let _user = await dbApiUser.getUserById(input.userId);
|
||||
console.log("[=] User :: ", _user?.userId);
|
||||
if (!_user) {
|
||||
return {
|
||||
success: false,
|
||||
errors: [{ message: "User not found." }],
|
||||
};
|
||||
}
|
||||
userId = _user.userId;
|
||||
userType = _user.userType;
|
||||
password = _user.password;
|
||||
}
|
||||
console.log(`[=] Getting session token for user ${userId}...`);
|
||||
const token = await getSessionToken({
|
||||
code: captchaAnswer,
|
||||
verifyToken: captchaId,
|
||||
userId: userId,
|
||||
userType: userType,
|
||||
password: password,
|
||||
});
|
||||
console.log(
|
||||
"[=] Token Response :: ",
|
||||
JSON.stringify(token, null, 2),
|
||||
);
|
||||
if (!token.ok) {
|
||||
return {
|
||||
success: false,
|
||||
errors: [{ message: token.message }],
|
||||
};
|
||||
}
|
||||
await setSessionToRedis(token.message, input.userId ?? "");
|
||||
return { success: true, errors: [] as ServerError };
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw new TRPCError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Error getting new session.",
|
||||
});
|
||||
}
|
||||
}),
|
||||
|
||||
isApiSessionValid: protectedProcedure
|
||||
.input(
|
||||
z.object({
|
||||
checkingUserSession: z.boolean(),
|
||||
userId: z.string().optional(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ input }) => {
|
||||
return { valid: await isSessionValidInStore(input.userId) };
|
||||
}),
|
||||
|
||||
logoutUser: protectedProcedure
|
||||
.input(z.object({ userId: z.string().optional() }))
|
||||
.mutation(async ({ input }) => {
|
||||
const { userId } = input;
|
||||
await removeSessionFromStore(userId);
|
||||
return { success: true, errors: [] as ServerError };
|
||||
}),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user