Spaces:
Runtime error
Runtime error
File size: 2,015 Bytes
d9a878f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import { authCondition, refreshSessionCookie } from "$lib/server/auth";
import { collections } from "$lib/server/database";
import { ObjectId } from "mongodb";
import { DEFAULT_SETTINGS } from "$lib/types/Settings";
import { z } from "zod";
import type { UserinfoResponse } from "openid-client";
import type { Cookies } from "@sveltejs/kit";
export async function updateUser(params: {
userData: UserinfoResponse;
locals: App.Locals;
cookies: Cookies;
}) {
const { userData, locals, cookies } = params;
const {
preferred_username: username,
name,
picture: avatarUrl,
sub: hfUserId,
} = z
.object({
preferred_username: z.string(),
name: z.string(),
picture: z.string(),
sub: z.string(),
})
.parse(userData);
const existingUser = await collections.users.findOne({ hfUserId });
let userId = existingUser?._id;
if (existingUser) {
// update existing user if any
await collections.users.updateOne(
{ _id: existingUser._id },
{ $set: { username, name, avatarUrl } }
);
// refresh session cookie
refreshSessionCookie(cookies, existingUser.sessionId);
} else {
// user doesn't exist yet, create a new one
const { insertedId } = await collections.users.insertOne({
_id: new ObjectId(),
createdAt: new Date(),
updatedAt: new Date(),
username,
name,
avatarUrl,
hfUserId,
sessionId: locals.sessionId,
});
userId = insertedId;
// update pre-existing settings
const { matchedCount } = await collections.settings.updateOne(authCondition(locals), {
$set: { userId, updatedAt: new Date() },
$unset: { sessionId: "" },
});
if (!matchedCount) {
// create new default settings
await collections.settings.insertOne({
userId,
ethicsModalAcceptedAt: new Date(),
updatedAt: new Date(),
createdAt: new Date(),
...DEFAULT_SETTINGS,
});
}
}
// migrate pre-existing conversations
await collections.conversations.updateMany(authCondition(locals), {
$set: { userId },
$unset: { sessionId: "" },
});
}
|