aefaeff
This commit is contained in:
parent
f8af4a5df7
commit
0484c1dfc7
@ -43,7 +43,7 @@ export const sites = pgTable("sites", {
|
|||||||
text_color_hex: varchar("text_color_hex", { length: 6 }).default('ffffff').notNull(),
|
text_color_hex: varchar("text_color_hex", { length: 6 }).default('ffffff').notNull(),
|
||||||
title: text("title").default("The best blog in the world!"),
|
title: text("title").default("The best blog in the world!"),
|
||||||
subtitle: text("subtitle").default("Some extra info about the best blog in the world!"),
|
subtitle: text("subtitle").default("Some extra info about the best blog in the world!"),
|
||||||
domain: text("domain").default("").unique(),
|
domain: text("domain").default(null).unique(),
|
||||||
use_freebie: boolean("send_freebie").default(false),
|
use_freebie: boolean("send_freebie").default(false),
|
||||||
freebie_name: text("freebie_name").default(""),
|
freebie_name: text("freebie_name").default(""),
|
||||||
freebie_url: text("freebie_url").default(""),
|
freebie_url: text("freebie_url").default(""),
|
||||||
|
@ -29,55 +29,62 @@ export const authRoutes = (fastify, _, done) => {
|
|||||||
|
|
||||||
const [existing_user] = await db.select().from(usersTable).where(eq(usersTable.google_id, user_info.id));
|
const [existing_user] = await db.select().from(usersTable).where(eq(usersTable.google_id, user_info.id));
|
||||||
let user;
|
let user;
|
||||||
|
await db.transaction(async tx => {
|
||||||
|
try {
|
||||||
|
if (existing_user) {
|
||||||
|
user = existing_user;
|
||||||
|
|
||||||
if (existing_user) {
|
if (token.refresh_token) {
|
||||||
user = existing_user;
|
await tx.update(sessions).set({
|
||||||
|
refresh_token: token.refresh_token
|
||||||
|
}).where(eq(sessions.user_id, user.id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const customer = await createCustomer(user_info.email, user_info.name);
|
||||||
|
[user] = await tx.insert(usersTable).values({
|
||||||
|
name: user_info.name,
|
||||||
|
google_id: user_info.id,
|
||||||
|
email: user_info.email,
|
||||||
|
channel_id: channel_info.id,
|
||||||
|
uploads_playlist_id: channel_info.contentDetails.relatedPlaylists.uploads,
|
||||||
|
stripe_id: customer.id
|
||||||
|
}).returning({ id: usersTable.id });
|
||||||
|
|
||||||
if (token.refresh_token) {
|
await tx.insert(sites).values({
|
||||||
await db.update(sessions).set({
|
name: `${user_info.name}'s Website`,
|
||||||
refresh_token: token.refresh_token
|
user_id: user.id
|
||||||
}).where(eq(sessions.user_id, user.id));
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
const customer = await createCustomer(user_info.email, user_info.name);
|
|
||||||
[user] = await db.insert(usersTable).values({
|
|
||||||
name: user_info.name,
|
|
||||||
google_id: user_info.id,
|
|
||||||
email: user_info.email,
|
|
||||||
channel_id: channel_info.id,
|
|
||||||
uploads_playlist_id: channel_info.contentDetails.relatedPlaylists.uploads,
|
|
||||||
stripe_id: customer.id
|
|
||||||
}).returning({ id: usersTable.id });
|
|
||||||
|
|
||||||
await db.insert(sites).values({
|
if (user.length == 0) {
|
||||||
name: `${user_info.name}'s Website`,
|
response.status(400).send({ success: false, message: "Problem when creating user account" });
|
||||||
user_id: user.id
|
return;
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
let session_id;
|
||||||
|
if (token.refresh_token) {
|
||||||
|
let session_info = await createSession(user.id, {
|
||||||
|
access_token: token.access_token,
|
||||||
|
refresh_token: token.refresh_token,
|
||||||
|
expires_at: new Date(token.expires_at)
|
||||||
|
}, tx);
|
||||||
|
|
||||||
if (user.length == 0) {
|
session_id = session_info.session_id;
|
||||||
response.status(400).send({ success: false, message: "Problem when creating user account" });
|
}
|
||||||
|
else {
|
||||||
|
let session_info = await tx.select().from(users).leftJoin(sessions, eq(sessions.user_id, users.id)).where(eq(users.google_id, user_info.id));
|
||||||
|
if (session_info.length == 0) {
|
||||||
|
response.status(400).send({ success: false, message: "Problem when creating user account" });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
session_id = session_info[0].sessions.id
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
await tx.rollback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
let session_id;
|
|
||||||
if (token.refresh_token) {
|
|
||||||
let session_info = await createSession(user.id, {
|
|
||||||
access_token: token.access_token,
|
|
||||||
refresh_token: token.refresh_token,
|
|
||||||
expires_at: new Date(token.expires_at)
|
|
||||||
});
|
|
||||||
|
|
||||||
session_id = session_info.session_id;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
let session_info = await db.select().from(users).leftJoin(sessions, eq(sessions.user_id, users.id)).where(eq(users.google_id, user_info.id));
|
|
||||||
if (session_info.length == 0) {
|
|
||||||
response.status(400).send({ success: false, message: "Problem when creating user account" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
session_id = session_info[0].sessions.id
|
|
||||||
}
|
|
||||||
|
|
||||||
// response.setCookie("token", session_id, {
|
// response.setCookie("token", session_id, {
|
||||||
// httpOnly: false,
|
// httpOnly: false,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/** @typedef {import("fastify").FastifyInstance} FastifyInstance */
|
/** @typedef {import("fastify").FastifyInstance} FastifyInstance */
|
||||||
|
|
||||||
import { desc, eq, getTableColumns, sql } from "drizzle-orm";
|
import { and, desc, eq, getTableColumns, sql } from "drizzle-orm";
|
||||||
import { db } from "../db/index.js";
|
import { db } from "../db/index.js";
|
||||||
import { articles, articles as articlesTable, signups as signupsTable, sites, users } from "../db/schemas.js";
|
import { articles, articles as articlesTable, signups as signupsTable, sites, users } from "../db/schemas.js";
|
||||||
import { authMiddleware, authMiddlewareFn } from "../modules/middleware.js";
|
import { authMiddleware, authMiddlewareFn } from "../modules/middleware.js";
|
||||||
@ -147,6 +147,37 @@ export const dashboardRoutes = (fastify, _, done) => {
|
|||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
fastify.delete("/article", {
|
||||||
|
schema: {
|
||||||
|
querystring: {
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
id: {
|
||||||
|
type: "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
required: ["id"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, async (req, reply) => {
|
||||||
|
const [article] = await db.select(getTableColumns(articles)).from(articles).leftJoin(sites, eq(sites.id, articles.site_id)).where(and(eq(sites.user_id, req.session.user_id), eq(articles.id, req.query.id)));
|
||||||
|
|
||||||
|
if (!article) {
|
||||||
|
reply.status(404).send({
|
||||||
|
success: false,
|
||||||
|
message: "This article does not exist."
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await db.delete(articles).where(eq(articles.id, article.id));
|
||||||
|
|
||||||
|
reply.send({
|
||||||
|
success: true
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
|
||||||
fastify.post("/create", {
|
fastify.post("/create", {
|
||||||
schema: {
|
schema: {
|
||||||
body: {
|
body: {
|
||||||
|
@ -12,7 +12,7 @@ const envSchema = z.object({
|
|||||||
GOOGLE_CLIENT_ID: z.string(),
|
GOOGLE_CLIENT_ID: z.string(),
|
||||||
GOOGLE_SECRET: z.string(),
|
GOOGLE_SECRET: z.string(),
|
||||||
OPENAI_TOKEN: z.string(),
|
OPENAI_TOKEN: z.string(),
|
||||||
CERTS_URL: z.string()
|
CERTS_URL: z.string().nullable().default(null)
|
||||||
});
|
});
|
||||||
|
|
||||||
export const env = envSchema.parse(process.env);
|
export const env = envSchema.parse(process.env);
|
||||||
|
@ -12,9 +12,9 @@ import { sessions } from "../db/schemas.js";
|
|||||||
export async function createSession(user_id, {
|
export async function createSession(user_id, {
|
||||||
access_token,
|
access_token,
|
||||||
refresh_token,
|
refresh_token,
|
||||||
expires_at
|
expires_at,
|
||||||
}) {
|
}, tx = db) {
|
||||||
const [existing_session] = await db.select().from(sessions).where(eq(sessions.user_id, user_id));
|
const [existing_session] = await tx.select().from(sessions).where(eq(sessions.user_id, user_id));
|
||||||
|
|
||||||
if(existing_session) {
|
if(existing_session) {
|
||||||
return {
|
return {
|
||||||
@ -22,7 +22,7 @@ export async function createSession(user_id, {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const token = await db.insert(sessions).values({
|
const token = await tx.insert(sessions).values({
|
||||||
user_id,
|
user_id,
|
||||||
access_token: access_token,
|
access_token: access_token,
|
||||||
refresh_token: refresh_token,
|
refresh_token: refresh_token,
|
||||||
|
Loading…
Reference in New Issue
Block a user