added jwt token
This commit is contained in:
@@ -3,4 +3,6 @@ export const Config = {
|
|||||||
sms_api_secret: "0957b611d575febff1ae0fc51070c8b7",
|
sms_api_secret: "0957b611d575febff1ae0fc51070c8b7",
|
||||||
sms_api_request_endpoint: "https://otp.thaibulksms.com/v2/otp/request",
|
sms_api_request_endpoint: "https://otp.thaibulksms.com/v2/otp/request",
|
||||||
sms_api_verify_endpoint: "https://otp.thaibulksms.com/v2/otp/verify",
|
sms_api_verify_endpoint: "https://otp.thaibulksms.com/v2/otp/verify",
|
||||||
|
jwt_secret:
|
||||||
|
"T4kE6/tIqCVEZYg9lwsqeJjYfOoXTXSXDEMyParsJjj57CjSdkrfPOLWP74/9lJpcBA=",
|
||||||
};
|
};
|
||||||
|
|||||||
34
src/trpc.ts
34
src/trpc.ts
@@ -1,6 +1,9 @@
|
|||||||
import { initTRPC } from "@trpc/server";
|
import { initTRPC } from "@trpc/server";
|
||||||
import type { CreateHTTPContextOptions } from "@trpc/server/adapters/standalone";
|
import type { CreateHTTPContextOptions } from "@trpc/server/adapters/standalone";
|
||||||
import { db } from "./db";
|
import { db } from "./db";
|
||||||
|
import * as jwt from "jsonwebtoken";
|
||||||
|
import { Config } from "./config";
|
||||||
|
import { z } from "zod";
|
||||||
const t = initTRPC.context<Context>().create();
|
const t = initTRPC.context<Context>().create();
|
||||||
|
|
||||||
export const router = t.router;
|
export const router = t.router;
|
||||||
@@ -35,8 +38,10 @@ type Context = Awaited<ReturnType<typeof createContext>>;
|
|||||||
|
|
||||||
export const createContext = async (opts: CreateHTTPContextOptions) => {
|
export const createContext = async (opts: CreateHTTPContextOptions) => {
|
||||||
const authorizationHeader = opts.req.headers.authorization || "";
|
const authorizationHeader = opts.req.headers.authorization || "";
|
||||||
|
|
||||||
const bearerToken = authorizationHeader.split(" ")[1];
|
const bearerToken = authorizationHeader.split(" ")[1];
|
||||||
const phone = verifyToken(bearerToken);
|
console.log(authorizationHeader, bearerToken);
|
||||||
|
const phone = await verifyToken(bearerToken);
|
||||||
if (phone !== null) {
|
if (phone !== null) {
|
||||||
let user = await db.query.user.findFirst({
|
let user = await db.query.user.findFirst({
|
||||||
where: (user, { eq }) => eq(user.phone, phone),
|
where: (user, { eq }) => eq(user.phone, phone),
|
||||||
@@ -53,7 +58,28 @@ export const createContext = async (opts: CreateHTTPContextOptions) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function verifyToken(token: string): string | null {
|
async function verifyToken(token: string): Promise<string | null> {
|
||||||
//TODO: Implement token verification
|
try {
|
||||||
return "08999";
|
let rs = await new Promise((resolve, reject) => {
|
||||||
|
jwt.verify(token, Config.jwt_secret, (err, decoded) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve(decoded);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
let data = z
|
||||||
|
.object({
|
||||||
|
phone: z.string(),
|
||||||
|
})
|
||||||
|
.safeParse(rs);
|
||||||
|
if (data.success) {
|
||||||
|
return data.data.phone;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { z } from "zod";
|
|||||||
import { SQL, eq } from "drizzle-orm";
|
import { SQL, eq } from "drizzle-orm";
|
||||||
import { Config } from "./config";
|
import { Config } from "./config";
|
||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
|
import * as jwt from "jsonwebtoken";
|
||||||
|
|
||||||
const userInsertSchema = createInsertSchema(user);
|
const userInsertSchema = createInsertSchema(user);
|
||||||
const opinionInsertSchema = createInsertSchema(userOpinion)
|
const opinionInsertSchema = createInsertSchema(userOpinion)
|
||||||
@@ -157,7 +158,6 @@ async function requestOtp(phone: string) {
|
|||||||
|
|
||||||
async function verifyOtp(token: string, pin: string) {
|
async function verifyOtp(token: string, pin: string) {
|
||||||
try {
|
try {
|
||||||
console.log(token, pin);
|
|
||||||
let pt = await db.query.phoneToken.findFirst({
|
let pt = await db.query.phoneToken.findFirst({
|
||||||
where: (pt, { eq }) => eq(pt.token, token),
|
where: (pt, { eq }) => eq(pt.token, token),
|
||||||
orderBy: (pt, { desc }) => desc(pt.createdOn),
|
orderBy: (pt, { desc }) => desc(pt.createdOn),
|
||||||
@@ -189,8 +189,10 @@ async function verifyOtp(token: string, pin: string) {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await db.delete(phoneToken).where(eq(phoneToken.phone, pt.phone));
|
await db.delete(phoneToken).where(eq(phoneToken.phone, pt.phone));
|
||||||
console.log(rs, pt.phone);
|
const token = jwt.sign({ phone: pt.phone }, Config.jwt_secret, {
|
||||||
return rs;
|
expiresIn: "3d",
|
||||||
|
});
|
||||||
|
return token;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|||||||
Reference in New Issue
Block a user