help me
This commit is contained in:
		
							parent
							
								
									52a0ba1b3b
								
							
						
					
					
						commit
						83bc981152
					
				
					 23 changed files with 9034 additions and 927 deletions
				
			
		|  | @ -1,53 +0,0 @@ | |||
| import type { User, Note } from "@prisma/client"; | ||||
| 
 | ||||
| import { prisma } from "~/db.server"; | ||||
| 
 | ||||
| export type { Note } from "@prisma/client"; | ||||
| 
 | ||||
| export function getNote({ | ||||
|   id, | ||||
|   userId, | ||||
| }: Pick<Note, "id"> & { | ||||
|   userId: User["id"]; | ||||
| }) { | ||||
|   return prisma.note.findFirst({ | ||||
|     where: { id, userId }, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| export function getNoteListItems({ userId }: { userId: User["id"] }) { | ||||
|   return prisma.note.findMany({ | ||||
|     where: { userId }, | ||||
|     select: { id: true, title: true }, | ||||
|     orderBy: { updatedAt: "desc" }, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| export function createNote({ | ||||
|   body, | ||||
|   title, | ||||
|   userId, | ||||
| }: Pick<Note, "body" | "title"> & { | ||||
|   userId: User["id"]; | ||||
| }) { | ||||
|   return prisma.note.create({ | ||||
|     data: { | ||||
|       title, | ||||
|       body, | ||||
|       user: { | ||||
|         connect: { | ||||
|           id: userId, | ||||
|         }, | ||||
|       }, | ||||
|     }, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| export function deleteNote({ | ||||
|   id, | ||||
|   userId, | ||||
| }: Pick<Note, "id"> & { userId: User["id"] }) { | ||||
|   return prisma.note.deleteMany({ | ||||
|     where: { id, userId }, | ||||
|   }); | ||||
| } | ||||
|  | @ -1,59 +1,65 @@ | |||
| import type { Password, User } from "@prisma/client"; | ||||
| import bcrypt from "@node-rs/bcrypt"; | ||||
| 
 | ||||
| import { prisma } from "~/db.server"; | ||||
| import type {User} from "@prisma/client"; | ||||
| import { AccessTokenResponse, DiscordUser } from "~/discord/index"; | ||||
| export type {User, Border} from "@prisma/client"; | ||||
| 
 | ||||
| export type { User } from "@prisma/client"; | ||||
| export async function getUserByDiscordId(discord_id: User["discord_id"]) { | ||||
|   return prisma.user.findUnique({ where: { discord_id: discord_id || undefined }}); | ||||
| } | ||||
| 
 | ||||
| export async function getUserById(id: User["id"]) { | ||||
|   return prisma.user.findUnique({ where: { id } }); | ||||
| } | ||||
| 
 | ||||
| export async function getUserByEmail(email: User["email"]) { | ||||
|   return prisma.user.findUnique({ where: { email } }); | ||||
| } | ||||
| 
 | ||||
| export async function createUser(email: User["email"], password: string) { | ||||
|   const hashedPassword = await bcrypt.hash(password, 10); | ||||
| /// SHOULD ONLY BE USED WITH A CORRESPONDING OAUTH TOKEN
 | ||||
| export async function createUser(discord_id: User["discord_id"]) { | ||||
| 
 | ||||
|   return prisma.user.create({ | ||||
|     data: { | ||||
|       email, | ||||
|       password: { | ||||
|         create: { | ||||
|           hash: hashedPassword, | ||||
|         }, | ||||
|       }, | ||||
|       discord_id | ||||
|     }, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| export async function deleteUserByEmail(email: User["email"]) { | ||||
|   return prisma.user.delete({ where: { email } }); | ||||
| export async function createDiscordLogin(discord_id: DiscordUser["id"], token_response: AccessTokenResponse) { | ||||
|   return prisma.discordUser.create({ | ||||
|     data: { | ||||
|       discord_id, | ||||
|       access_token: token_response.access_token, | ||||
|       refresh_token: token_response.refresh_token, | ||||
|       expires: new Date(token_response.expires) | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| 
 | ||||
| export async function verifyLogin( | ||||
|   email: User["email"], | ||||
|   password: Password["hash"] | ||||
| ) { | ||||
|   const userWithPassword = await prisma.user.findUnique({ | ||||
|     where: { email }, | ||||
|     include: { | ||||
|       password: true, | ||||
|     }, | ||||
|   }); | ||||
| export type SessionInformation = { | ||||
|   bearer_token: string, | ||||
|   refresh_token: string | ||||
| }; | ||||
| 
 | ||||
|   if (!userWithPassword || !userWithPassword.password) { | ||||
|     return null; | ||||
| export async function discordIdentify(bearer_token: string, refresh_token: string): Promise<DiscordUser | SessionInformation | undefined> { | ||||
|   let user_info = await ( | ||||
|     await fetch("https://discord.com/api/users/@me", { | ||||
|      headers: { | ||||
|        Authorization: `Bearer ${bearer_token}` | ||||
|       } | ||||
|     }) | ||||
|   ).json(); | ||||
| 
 | ||||
|   if (!user_info["id"]) { | ||||
|     const form_data = new FormData(); | ||||
|     form_data.append("client_id", process.env.DISCORD_CLIENT_ID || ""); | ||||
|     form_data.append("client_secret", process.env.DISCORD_CLIENT_SECRET || ""); | ||||
|     form_data.append("grant_type", "refresh_token"); | ||||
|     form_data.append("refresh_token", refresh_token); | ||||
|     let refresh_info = await (await fetch("https://discord.com/api/oauth2/token", { | ||||
|       method: "POST", | ||||
|       body: form_data | ||||
|     })).json(); | ||||
| 
 | ||||
|     return refresh_info; | ||||
|   } | ||||
| 
 | ||||
|   const isValid = await bcrypt.verify(password, userWithPassword.password.hash); | ||||
| 
 | ||||
|   if (!isValid) { | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   const { password: _password, ...userWithoutPassword } = userWithPassword; | ||||
| 
 | ||||
|   return userWithoutPassword; | ||||
| } | ||||
|   return user_info; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue