From e624359585e6517f070bd97116d566112661a7c3 Mon Sep 17 00:00:00 2001 From: Luz Ojeda Date: Tue, 9 Apr 2024 22:12:17 -0300 Subject: [PATCH] Develop (#54) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Close burgermenu after search * Set instructions white/space paragraph to pre-line to preserve newline characters * Sett the x-api-key header on the api calls * Update security headers sent in hooks.server.ts and update Dockerfile with api key * Correct X-Content-Type-Options header value * Slugify recipe name in RecipeCard * Use replaceAll * Layout adjustments * Set header opacity to 0.95 * Add header bottom border when burgermenu is open * Deslugify recipe name when not found * Add see more recipes button in home * Set navbar max height to 100vh in mobile to fix not being able to submit button on smaller heights * Use pnpm instead of npm * Update height of images * Squashed commit of the following: commit 5c8a4167dbcf0cedf233e08acbe028457fd2e31a Author: Luz Date: Fri Apr 5 15:57:58 2024 -0300 Add space after Preparación in individual recipe page commit 923799cd47d00d8e51f4198d8934ffcd4d1efdbf Author: Luz Date: Fri Apr 5 15:47:54 2024 -0300 Change laptop grid to 4 commit adf8c38f848e50c0b1aec813c1dfe7bb92a78a87 Author: Luz Ojeda Date: Fri Apr 5 15:28:36 2024 -0300 Develop (#39) * Close burgermenu after search * Set instructions white/space paragraph to pre-line to preserve newline characters * Sett the x-api-key header on the api calls * Update security headers sent in hooks.server.ts and update Dockerfile with api key * Correct X-Content-Type-Options header value * Slugify recipe name in RecipeCard * Use replaceAll * Layout adjustments * Set header opacity to 0.95 commit af717281cdbebbf730ada38758aa5adb287beda9 Author: Luz Ojeda Date: Wed Apr 3 18:33:44 2024 -0300 Develop (#35) * Close burgermenu after search * Set instructions white/space paragraph to pre-line to preserve newline characters * Sett the x-api-key header on the api calls * Update security headers sent in hooks.server.ts and update Dockerfile with api key * Correct X-Content-Type-Options header value * Slugify recipe name in RecipeCard * Use replaceAll * Layout adjustments * Format * Squashed commit of the following: commit 5c8a4167dbcf0cedf233e08acbe028457fd2e31a Author: Luz Date: Fri Apr 5 15:57:58 2024 -0300 Add space after Preparación in individual recipe page commit 923799cd47d00d8e51f4198d8934ffcd4d1efdbf Author: Luz Date: Fri Apr 5 15:47:54 2024 -0300 Change laptop grid to 4 commit adf8c38f848e50c0b1aec813c1dfe7bb92a78a87 Author: Luz Ojeda Date: Fri Apr 5 15:28:36 2024 -0300 Develop (#39) * Close burgermenu after search * Set instructions white/space paragraph to pre-line to preserve newline characters * Sett the x-api-key header on the api calls * Update security headers sent in hooks.server.ts and update Dockerfile with api key * Correct X-Content-Type-Options header value * Slugify recipe name in RecipeCard * Use replaceAll * Layout adjustments * Set header opacity to 0.95 commit af717281cdbebbf730ada38758aa5adb287beda9 Author: Luz Ojeda Date: Wed Apr 3 18:33:44 2024 -0300 Develop (#35) * Close burgermenu after search * Set instructions white/space paragraph to pre-line to preserve newline characters * Sett the x-api-key header on the api calls * Update security headers sent in hooks.server.ts and update Dockerfile with api key * Correct X-Content-Type-Options header value * Slugify recipe name in RecipeCard * Use replaceAll * Layout adjustments * Set navbar overflow-y to auto * Add fly.yml * Set package version to 1.0.0, change recipe page layout * Change package version to 1.1.0 to account for the recipe creation functionality plus protected route * Most basic happy path recipe creation page implementing Basic Auth for protected routes as well * Add isotipo * Add type prop to PrimaryButton and set width default to auto * Update RecipesSearchForm * Add errors array of objects property to ApiError type * Adjust footer logotipo alignment in mobile/tablet * Improve response of recipe creation --- package.json | 2 +- src/app.scss | 18 ++- src/hooks.server.ts | 17 +- src/lib/assets/isotipo.svg | 9 ++ src/lib/assets/logo.png | Bin 486 -> 0 bytes src/lib/components/Footer.svelte | 16 +- src/lib/components/Navbar.svelte | 11 +- src/lib/components/PrimaryButton.svelte | 5 +- src/lib/components/RecipesSearchForm.svelte | 3 +- src/lib/components/TextInput.svelte | 6 - src/lib/types/ApiError.d.ts | 1 + src/lib/types/RecipesStore.d.ts | 2 +- src/routes/admin/crear-receta/+page.server.ts | 42 +++++ src/routes/admin/crear-receta/+page.svelte | 148 ++++++++++++++++++ src/routes/recetas/[name]/+page.svelte | 7 - src/sass/colors.scss | 2 + src/sass/typography.scss | 8 + 17 files changed, 267 insertions(+), 30 deletions(-) create mode 100644 src/lib/assets/isotipo.svg delete mode 100644 src/lib/assets/logo.png create mode 100644 src/routes/admin/crear-receta/+page.server.ts create mode 100644 src/routes/admin/crear-receta/+page.svelte diff --git a/package.json b/package.json index 0ebb2ab..9876a69 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cook-web", - "version": "1.0.0", + "version": "1.1.0", "private": true, "scripts": { "dev": "vite dev", diff --git a/src/app.scss b/src/app.scss index a25c22c..cd8bf82 100644 --- a/src/app.scss +++ b/src/app.scss @@ -53,12 +53,21 @@ footer { } } -input { +input[type='text'], +input[type='number'], +textarea { + appearance: none; background-color: $grey100; + box-shadow: inset 0 2px 2px hsla(0, 0%, 0%, 0.1); + border-radius: 5px; + border: 1px solid #cccccc; + padding: 6px 8px; + -webkit-appearance: none; } -input[type='text'] { - box-shadow: inset 0 2px 2px hsla(0, 0%, 0%, 0.1); +input[type='number'] { + padding: 6px; + width: 38px; } *:focus-visible { @@ -72,6 +81,7 @@ input[type='text'] { color: $grey100; } -input[type='checkbox'] { +input[type='checkbox'], +input[type='radio'] { accent-color: $primaryColor; } diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 1edfadd..1c69a1c 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,13 +1,13 @@ -import type { Handle, HandleServerError } from '@sveltejs/kit'; +import { type Handle, type HandleServerError } from '@sveltejs/kit'; import { logRecipesError } from './errorLogging'; import { MESSAGES } from './constants'; import type { ApiError } from '$lib/types/ApiError'; +import { env } from '$env/dynamic/private'; const securityHeaders = { 'Cross-Origin-Embedder-Policy': 'require-corp', 'Cross-Origin-Opener-Policy': 'same-origin', 'Strict-Transport-Security': 'max-age=31536000', - // [...], 'Referrer-Policy': 'no-referrer-when-downgrade', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY' @@ -33,6 +33,19 @@ export const handleError: HandleServerError = async ({ event, error }) => { }; export const handle: Handle = async ({ event, resolve }) => { + if (event.url.pathname.startsWith('/admin')) { + const auth = event.request.headers.get('Authorization'); + + if (auth !== `Basic ${btoa(env.ADMIN_LOGIN)}`) { + return new Response('Not authorized', { + status: 401, + headers: { + 'WWW-Authenticate': 'Basic realm="User Visible Realm", charset="UTF-8"' + } + }); + } + } + const response = await resolve(event); Object.entries(securityHeaders).forEach(([header, value]) => response.headers.set(header, value)); diff --git a/src/lib/assets/isotipo.svg b/src/lib/assets/isotipo.svg new file mode 100644 index 0000000..a955900 --- /dev/null +++ b/src/lib/assets/isotipo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/lib/assets/logo.png b/src/lib/assets/logo.png deleted file mode 100644 index c411e37bb1d6e60dafab18bde112b1a75e547b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmV@P)Vl&|00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPbx8^H2?qr07*qoM6N<$f`VGc2><{9 diff --git a/src/lib/components/Footer.svelte b/src/lib/components/Footer.svelte index 9226552..646e1ed 100644 --- a/src/lib/components/Footer.svelte +++ b/src/lib/components/Footer.svelte @@ -1,11 +1,12 @@