Skip to content

Commit 52366fa

Browse files
fix(auth): missing checks in telegram link (trpc side)
1 parent 87f0359 commit 52366fa

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

backend/src/db/columns.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import { sql } from "drizzle-orm";
22
import { timestamp } from "drizzle-orm/pg-core";
33

44
export const timeColumns = {
5-
updatedAt: timestamp("updated_at", { precision: 3 }).$onUpdate(
6-
() => sql`now()`,
7-
),
8-
createdAt: timestamp("created_at", { precision: 3 })
9-
.default(sql`now()`)
10-
.notNull(),
11-
}
5+
updatedAt: timestamp("updated_at", { precision: 3 }).$onUpdate(
6+
() => new Date(),
7+
),
8+
createdAt: timestamp("created_at", { precision: 3 })
9+
.default(sql`now()`)
10+
.notNull(),
11+
};

backend/src/routers/tg/link.ts

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { DB, SCHEMA } from "@/db";
22
import { logger } from "@/logger";
33
import { createTRPCRouter, publicProcedure } from "@/trpc";
4-
import { and, eq } from "drizzle-orm";
4+
import { eq } from "drizzle-orm";
55
import { z } from "zod";
66

77
export default createTRPCRouter({
@@ -19,27 +19,37 @@ export default createTRPCRouter({
1919
try {
2020
const { code, telegramId, telegramUsername } = input;
2121
const s = SCHEMA.TG.link;
22-
const res = await DB.update(s)
23-
.set({ telegramId })
24-
.where(
25-
and(eq(s.code, code), eq(s.telegramUsername, telegramUsername)),
26-
)
27-
.returning();
22+
const rows = await DB.select().from(s).where(eq(s.code, code));
23+
if (!rows || rows.length === 0)
24+
return { success: false, error: "Not found" };
2825

29-
if (res.length !== 1) return { success: false };
26+
const {
27+
userId,
28+
telegramUsername: savedTgUsername,
29+
ttl,
30+
createdAt,
31+
} = rows[0];
32+
if (savedTgUsername !== telegramUsername)
33+
return { success: false, error: "Username mismatch" };
34+
35+
if (createdAt.getTime() + ttl * 1000 < Date.now())
36+
return { success: false, error: "Expired code" };
37+
38+
await DB.update(s).set({ telegramId }).where(eq(s.code, code));
3039

3140
const u = SCHEMA.AUTH.users;
32-
await DB.update(u)
41+
await DB.update(u) // update the auth.user table
3342
.set({ telegramId, telegramUsername })
34-
.where(eq(u.id, res[0].userId));
43+
.where(eq(u.id, userId));
3544

36-
return { success: true };
45+
return { success: true, error: undefined };
3746
} catch (e) {
3847
logger.error(
3948
e,
40-
"There was an error while linking telegram to user table",
49+
"There was an unexpected error while linking telegram to user table",
4150
);
42-
return { success: false };
51+
if (e instanceof Error) return { success: false, error: e.message };
52+
return { success: false, error: JSON.stringify(e) };
4353
}
4454
}),
4555
});

0 commit comments

Comments
 (0)