From 11afc4f35e6b24dde1694a6cd3b4cd23538dd015 Mon Sep 17 00:00:00 2001 From: Guillaume Dorschner Date: Wed, 1 Nov 2023 00:34:08 +0100 Subject: [PATCH 1/7] layout change --- client/src/routes/(app)/+layout.svelte | 8 ++++---- client/src/routes/(app)/home/+page.svelte | 2 +- src/app.js | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/client/src/routes/(app)/+layout.svelte b/client/src/routes/(app)/+layout.svelte index 5683417..8fb30bc 100644 --- a/client/src/routes/(app)/+layout.svelte +++ b/client/src/routes/(app)/+layout.svelte @@ -20,16 +20,16 @@ alt="User avatar" class="mx-2 w-10 h-10 rounded-full" /> -
+
{#if $page.url.pathname != "/home"} - + {/if} {#if $page.url.pathname != "/settings"} - - Settings + + {/if}
diff --git a/client/src/routes/(app)/home/+page.svelte b/client/src/routes/(app)/home/+page.svelte index ce06ce9..e13f378 100644 --- a/client/src/routes/(app)/home/+page.svelte +++ b/client/src/routes/(app)/home/+page.svelte @@ -79,7 +79,7 @@ } function addLike(postId) { - fetch(`${backendUrl}addLike`, { + fetch(`${backendUrl}likePost`, { method: "POST", headers: { "Content-Type": "application/json", diff --git a/src/app.js b/src/app.js index 64dcf57..a568f55 100644 --- a/src/app.js +++ b/src/app.js @@ -64,7 +64,7 @@ app.post("/login", async (req, res) => { if (result.rows.length > 0) { // save the user in the session res.cookie("user", JSON.stringify(result.rows), { - maxAge: 3600000, // 1 hour + maxAge: 3600000 * 24, httpOnly: false, // The cookie is accessible via JavaScript secure: false, // The cookie will be transmitted over HTTP }); @@ -123,7 +123,7 @@ app.post("/signup", upload.single("avatar"), async (req, res) => { // check if the user was created if (result.rows.length > 0) { res.cookie("user", JSON.stringify(result.rows[0]), { - maxAge: 3600000, + maxAge: 3600000 * 24, httpOnly: false, secure: false, }); From bc4b8a87dd7620552a85b748d4283db711099df5 Mon Sep 17 00:00:00 2001 From: Guillaume Dorschner Date: Wed, 1 Nov 2023 11:47:35 +0100 Subject: [PATCH 2/7] get data in layout --- client/src/routes/(app)/+layout.svelte | 32 +++++++++++++++- client/src/routes/(app)/home/+page.svelte | 24 +----------- client/src/routes/(app)/settings/+page.svelte | 37 ++++++++----------- client/src/store/store.js | 6 +-- src/app.js | 2 +- 5 files changed, 51 insertions(+), 50 deletions(-) diff --git a/client/src/routes/(app)/+layout.svelte b/client/src/routes/(app)/+layout.svelte index 8fb30bc..0ce062e 100644 --- a/client/src/routes/(app)/+layout.svelte +++ b/client/src/routes/(app)/+layout.svelte @@ -3,6 +3,36 @@ import { page } from '$app/stores'; import { user } from "../../store/store.js"; import '@fortawesome/fontawesome-free/css/all.min.css' + import { onMount } from "svelte"; + + let backendUrl; + + onMount(async () => { + backendUrl = `http://${window.location.hostname}:3001/`; + await fetchUser(); + }); + + async function fetchUser() { + try { + const response = await fetch(`${backendUrl}currentuser`, { + method: "GET", + credentials: "include", + }); + if (!response.ok) { + throw new Error("Network response was not ok " + response.statusText); + } + let data = await response.json(); + data.user[0].avatar_path = `https://t4.ftcdn.net/jpg/00/97/58/97/360_F_97589769_t45CqXyzjz0KXwoBZT9PRaWGHRk5hQqQ.jpg`; + + console.log(data.user[0]); + user.set(data.user[0]); + } catch (error) { + console.error( + "There has been a problem with your fetch operation:", + error + ); + } + }
@@ -13,7 +43,7 @@
- {$user.firstName} {$user.lastName} + {$user.firstname} {$user.lastname}
- - -
- -
- First name
- Last name
@@ -164,10 +152,15 @@ />
-
+
+ +
{#if showAlert} diff --git a/client/src/store/store.js b/client/src/store/store.js index 1626a60..add47ca 100644 --- a/client/src/store/store.js +++ b/client/src/store/store.js @@ -1,9 +1,9 @@ import { writable } from 'svelte/store'; export let user = writable({ - id: 1, - firstName: "", - lastName: "", + id: null, + firstname: "", + lastname: "", email: "", password: "", avatar_path: "", diff --git a/src/app.js b/src/app.js index a568f55..aea3599 100644 --- a/src/app.js +++ b/src/app.js @@ -375,7 +375,7 @@ app.post("/likePost", async (req, res) => { } }); -app.post("/logout", (req, res) => { +app.get("/logout", (req, res) => { // Clear the user cookie; the name 'user' should match the name used when the cookie was set in the login route. res.clearCookie("user"); // Sending a successful response. In a real-world scenario, additional cleanup or checks might be necessary. From 003e2941a58ac1ee96d7f305e304f7221c2493a1 Mon Sep 17 00:00:00 2001 From: Guillaume Dorschner Date: Wed, 1 Nov 2023 20:45:49 +0100 Subject: [PATCH 3/7] avatar file / get change path in database --- src/app.js | 18 ++++++++++++++++-- src/database/fixtures.js | 16 ++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/app.js b/src/app.js index aea3599..36b54bf 100644 --- a/src/app.js +++ b/src/app.js @@ -234,9 +234,11 @@ app.get("/getPosts", async (req, res) => { const query = ` SELECT posts.id as id, users.firstname as firstName, - users.lastname as lastName, + users.lastname as lastName, + users.id as user_id, + users.avatar_path as avatar_path, posts.content, - posts.title, + posts.title, posts.DATE as timestamp FROM posts INNER JOIN users on posts.user_id = users.id @@ -382,6 +384,18 @@ app.get("/logout", (req, res) => { res.status(200).json({ message: "Logged out successfully" }); }); +app.get("/avatar/:id", async (req, res) => { + try { + const { id } = req.params; + + res.sendFile(path.join(__dirname, `./uploads/${id}`)); + + } catch (error) { + console.error(error); + res.status(500).json({ message: "Internal Server Error" }); + } +}); + app.get("/currentuser", (req, res) => { // Attempt to retrieve the user data from the cookie instead of the session. // This is insecure because user data is exposed, and cookies can be manipulated on the client-side. diff --git a/src/database/fixtures.js b/src/database/fixtures.js index 9abceca..753d400 100644 --- a/src/database/fixtures.js +++ b/src/database/fixtures.js @@ -7,14 +7,14 @@ const seedDatabase = async () => { const insertUsers = ` INSERT INTO users (password, email, firstname, lastname, avatar_path) VALUES - ('password1', 'john.doe@example.com', 'John', 'Doe', '/src/uploads/eren_avatar.jpg'), - ('password2', 'jane.doe@example.com', 'Jane', 'Doe', '/src/uploads/eren_avatar.jpg'), - ('password3', 'will.smith@example.com', 'Will', 'Smith', '/src/uploads/eren_avatar.jpg'), - ('password4', 'sarah.connor@example.com', 'Sarah', 'Connor', '/src/uploads/eren_avatar.jpg'), - ('password5', 'mary.jane@example.com', 'Mary', 'Jane', '/src/uploads/eren_avatar.jpg'), - ('password6', 'tony.stark@example.com', 'Tony', 'Stark', '/src/uploads/eren_avatar.jpg'), - ('password7', 'peter.parker@example.com', 'Peter', 'Parker', '/src/uploads/eren_avatar.jpg'), - ('password8', 'bruce.wayne@example.com', 'Bruce', 'Wayne', '/src/uploads/eren_avatar.jpg'); + ('password1', 'john.doe@example.com', 'John', 'Doe', 'eren_avatar.jpg'), + ('password2', 'jane.doe@example.com', 'Jane', 'Doe', 'eren_avatar.jpg'), + ('password3', 'will.smith@example.com', 'Will', 'Smith', 'eren_avatar.jpg'), + ('password4', 'sarah.connor@example.com', 'Sarah', 'Connor', 'eren_avatar.jpg'), + ('password5', 'mary.jane@example.com', 'Mary', 'Jane', 'eren_avatar.jpg'), + ('password6', 'tony.stark@example.com', 'Tony', 'Stark', 'eren_avatar.jpg'), + ('password7', 'peter.parker@example.com', 'Peter', 'Parker', 'eren_avatar.jpg'), + ('password8', 'bruce.wayne@example.com', 'Bruce', 'Wayne', 'eren_avatar.jpg'); `; await client.query(insertUsers); From 13ddfcb295a9bbfb6cd20e140fe2023f67802dec Mon Sep 17 00:00:00 2001 From: Guillaume Dorschner Date: Wed, 1 Nov 2023 20:46:01 +0100 Subject: [PATCH 4/7] remove data --- client/src/store/store.js | 83 +-------------------------------------- 1 file changed, 1 insertion(+), 82 deletions(-) diff --git a/client/src/store/store.js b/client/src/store/store.js index add47ca..271ab93 100644 --- a/client/src/store/store.js +++ b/client/src/store/store.js @@ -10,86 +10,5 @@ export let user = writable({ }); export let posts = writable([ - { - id: 1, - author: "John Doe", - content: "This is my first post! This is my first", - timestamp: "2023-01-01T12:00:00", - likes: 20, - comments: [ - { - commenter: "Jane Doe", - comment: "This is my first post!", - }, - ], - }, - { - id: 2, - author: "Jane Doe", - content: "Hello, World!", - timestamp: "2023-01-02T12:00:00", - likes: 35, - comments: [ - { - commenter: "John Doe", - comment: "Hello to you too!", - }, - ], - }, - { - id: 3, - author: "Emily Davis", - content: "Learning Svelte is fun!", - timestamp: "2023-01-03T12:00:00", - likes: 10, - comments: [ - { - commenter: "John Doe", - comment: "I agree!", - }, - ], - }, - { - id: 4, - author: "Mark Green", - content: "Happy New Year, everyone!", - timestamp: "2023-01-01T00:00:00", - likes: 50, - comments: [ - { - commenter: "Jane Doe", - comment: "Happy New Year!", - }, - { - commenter: "Emily Davis", - comment: "Wishing everyone a great year ahead!", - }, - ], - }, - { - id: 5, - author: "Sophia Lee", - content: "Just got a new puppy!", - timestamp: "2023-01-05T09:00:00", - likes: 120, - comments: [ - { - commenter: "Jane Doe", - comment: "So cute!", - }, - ], - }, - { - id: 6, - author: "Daniel Smith", - content: "Anyone else love hiking?", - timestamp: "2023-01-06T11:00:00", - likes: 15, - comments: [ - { - commenter: "Emily Davis", - comment: "Absolutely!", - }, - ], - }, + ]); \ No newline at end of file From 7b2fa3f16f5bd861e43c3f1cd58b0610ab9632c4 Mon Sep 17 00:00:00 2001 From: Guillaume Dorschner Date: Wed, 1 Nov 2023 20:46:28 +0100 Subject: [PATCH 5/7] avatar --- client/src/routes/(app)/+layout.svelte | 6 ++---- client/src/routes/(app)/home/+page.svelte | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/client/src/routes/(app)/+layout.svelte b/client/src/routes/(app)/+layout.svelte index 0ce062e..c3dab61 100644 --- a/client/src/routes/(app)/+layout.svelte +++ b/client/src/routes/(app)/+layout.svelte @@ -22,9 +22,7 @@ throw new Error("Network response was not ok " + response.statusText); } let data = await response.json(); - data.user[0].avatar_path = `https://t4.ftcdn.net/jpg/00/97/58/97/360_F_97589769_t45CqXyzjz0KXwoBZT9PRaWGHRk5hQqQ.jpg`; - - console.log(data.user[0]); + console.log("data", data); user.set(data.user[0]); } catch (error) { console.error( @@ -45,7 +43,7 @@
{$user.firstname} {$user.lastname} User avatar
Author avatar From 28e598019942a62189069022b16239cfb9e55638 Mon Sep 17 00:00:00 2001 From: Guillaume Dorschner Date: Wed, 1 Nov 2023 20:54:59 +0100 Subject: [PATCH 6/7] remove console.log --- client/src/routes/(app)/+layout.svelte | 1 - client/src/routes/(app)/settings/+page.svelte | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/client/src/routes/(app)/+layout.svelte b/client/src/routes/(app)/+layout.svelte index c3dab61..5da07dd 100644 --- a/client/src/routes/(app)/+layout.svelte +++ b/client/src/routes/(app)/+layout.svelte @@ -22,7 +22,6 @@ throw new Error("Network response was not ok " + response.statusText); } let data = await response.json(); - console.log("data", data); user.set(data.user[0]); } catch (error) { console.error( diff --git a/client/src/routes/(app)/settings/+page.svelte b/client/src/routes/(app)/settings/+page.svelte index ff1749d..5c909b4 100644 --- a/client/src/routes/(app)/settings/+page.svelte +++ b/client/src/routes/(app)/settings/+page.svelte @@ -1,6 +1,7 @@