From 85031e3972e7ad1a2ea79c9ce1cb94a7cebd606d Mon Sep 17 00:00:00 2001 From: YummYume Date: Fri, 5 Jan 2024 21:13:53 +0100 Subject: [PATCH] Add auth + build --- bun.lockb | Bin 225892 -> 225100 bytes package.json | 3 +- src/app.d.ts | 20 ++++- src/hooks.server.ts | 12 +++ src/routes/+layout.server.ts | 7 +- src/routes/+layout.svelte | 15 ++-- src/routes/+page.server.ts | 35 +++++++- src/routes/account/+page.server.ts | 83 ++++++++++++++++-- src/routes/account/+page.svelte | 7 +- src/routes/account/favourites/+page.server.ts | 31 ++++++- src/routes/login/+page.server.ts | 16 +++- src/routes/recipes/[slug]/+layout.server.ts | 6 +- src/routes/recipes/[slug]/+page.server.ts | 67 ++++++++++++-- src/routes/recipes/[slug]/+page.svelte | 50 ++++++++++- .../[slug]/accompaniments/+page.server.ts | 10 ++- .../recipes/[slug]/similar/+page.server.ts | 11 ++- src/routes/register/+page.server.ts | 16 +++- src/routes/search/+page.server.ts | 17 +++- svelte.config.js | 2 +- 19 files changed, 360 insertions(+), 48 deletions(-) create mode 100644 src/hooks.server.ts diff --git a/bun.lockb b/bun.lockb index caf76b77532694a0d2b1fe5441ee2cb1d3f17c29..a887a6d28a6f9fff5f397a9d5ece91c87cf82587 100755 GIT binary patch delta 31978 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 E0q)TyG5`Po delta 32363 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

m@w@e8E- zr?Tpsp&?%t_nhL#)aaZN_3>P)E*Sf~ApHJKF9=|(J_bm0U&ZEZ*8IK9U&-n90FNIt^y9`7=l{W9x*sDqSuFbv4JK6g~9UyDqfN#PC(% zYrj`^kv)Ybum5S|3D1%oPEoWC)o=>U+A2<=tG8++aClU=p`D_E8tyan+@|?gyS7;@ z`Tnhj`dxo#%1YE~69HRlC0h>(xfK?h%1SG@<5{lQQ!?vztqI$7*`QBp81# zad{_Zr^c-N9(2L;uNc7W@IZd9+R29Pf_M2`P?>GprS-x}{M)WVV@#bdb`)k6ys9UR zk7QGK;|8Jmi&7;cCugKI{JxE*$~Qlh;_VT4Tbj9I8WQ(WnExJ(D`9T%Uwt`qo7lJg z)t9DEL||0$GJnD9-P?gX$L+m(j|T<<)n9qYF2EOv@4xuEeW7QC>(w!A_Fi~Jn8SK+ zFXsD3>^pSM-))Ss!r;crKCQj}r#^o13KL|${GPn(Lb+-4x-r;_UcrEDCVxLGD`0u- zq?7A5;?~Rjonj}xiIv`u`pqBQn(FW8eX61h&B1)S!h1d9^?-{kYQGi`^jAgi?h=a3 zU*5VK>TsO#kJO<78+*UtX3cN2lc+-diCuyQdGn#i^R|{(9eDQ-FEbSWRM&^Ocl>L8 z-8`Ht;^)6nnmC>mJr%i%cLwQZr+kXIm@PYinl`c>gnne|VXd+STNt-}?8^h1f3Zig zz6T+|pYB-M@Pk?f%jSJ}FP%SwsNH+N7-;5CdbzYburF-%O4{%G(-dn{-eP;G{HN^9 zL9{53Jtc})XT@#n=7&I4W?c!112o=z$UH=yct9LIxTpuaehBx0c*SUfEIyNY9Y(nY zj4Wi4hjELB`G|WSXYTxT?a`v#kMZCTV+|ukIlyKf#*uu{L812VA1D_-Z1c{?;${Be zaMbbdEo-lS*MJ%(CSUQ)&CBz!SWnGgB7=Zj{zO|#HFynOf$P?5^q(f^RXg@UzSc~& zGxdn(?Q<0K9X*z1e+0Bi*xR+j^Bs4TwT4*BOtgWHo0s}cer3Rpn$`uN=?UR<&wgc} zc?4cv37TfS(=CSev5#;0S(Rg=*6gut^%1R;t7BYxa{dQLwCVfR=J~zHxYTuFciXvm zvHD|NDm10croK%bagLO9XR0rezI=)COCLEYJ~1UZHQhJSneM=kG|~?%vlH znx#WAt`i#mD(m#+-XKNX3;2`Xdt9IN_U+<6px5zmeLR*eOLD2_>azUJ=`44Hn*DzO D`{0T$ diff --git a/package.json b/package.json index caa0599..e4f2fc7 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "prisma" ], "devDependencies": { - "@sveltejs/adapter-auto": "^3.0.1", - "@sveltejs/adapter-node": "^2.0.1", + "@sveltejs/adapter-node": "^2.0.2", "@sveltejs/enhanced-img": "^0.1.7", "@sveltejs/vite-plugin-svelte": "^3.0.1", "@tailwindcss/forms": "^0.5.7", diff --git a/src/app.d.ts b/src/app.d.ts index 7f3235d..aed052f 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,9 +1,17 @@ +import type { Auth as AuthType } from '$lib/server/auth'; +import type { PrismaClient } from '@prisma/client'; +import type { AuthRequest, Session } from 'lucia'; + // See https://kit.svelte.dev/docs/types#app // for information about these interfaces declare global { namespace App { // interface Error {} - // interface Locals {} + interface Locals { + db: PrismaClient; + auth: AuthRequest; + session: Session | null; + } interface PageData { seo?: { title?: string; @@ -16,6 +24,16 @@ declare global { // interface PageState {} // interface Platform {} } + + namespace Lucia { + type Auth = AuthType; + type DatabaseUserAttributes = { + username: string; + disallowedIngredients: string | null; + }; + // eslint-disable-next-line @typescript-eslint/ban-types + type DatabaseSessionAttributes = {}; + } } export {}; diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..12484db --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,12 @@ +import { auth } from '$lib/server/auth'; +import { db } from '$lib/server/db'; + +import type { Handle } from '@sveltejs/kit'; + +export const handle: Handle = async ({ event, resolve }) => { + event.locals.db = db; + event.locals.auth = auth.handleRequest(event); + event.locals.session = await event.locals.auth.validate(); + + return resolve(event); +}; diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index f9639fa..6fb6d79 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -1,11 +1,8 @@ import type { LayoutServerLoad } from './$types'; -export const load = (async () => { +export const load = (async ({ locals }) => { return { - user: { - username: 'Carlos', - disallowedIngredients: ['chocolat'], - }, + user: locals.session?.user, seo: { title: 'CookConnect', meta: { diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 97c1d9c..7420903 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -7,6 +7,7 @@ import type { LayoutData } from './$types'; + import { enhance } from '$app/forms'; import { page } from '$app/stores'; export let data: LayoutData; @@ -49,15 +50,17 @@