From 79c14759b806a158f997c043f44b1ece260fc121 Mon Sep 17 00:00:00 2001 From: Hamza Date: Sun, 14 Jul 2024 15:43:16 -0400 Subject: [PATCH] Save sessions with express-session --- app.js | 43 +++++++++++----- package.json | 1 + public/index.html | 12 ++++- public/pages/profile.ejs | 105 +++++++++++++++++++++++++++++++++++++++ public/styles/styles.css | 10 ++++ 5 files changed, 156 insertions(+), 15 deletions(-) create mode 100644 public/pages/profile.ejs diff --git a/app.js b/app.js index 5e45c9f..1b07307 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,7 @@ const express = require("express"); const axios = require("axios"); const mongoose = require("mongoose"); +const session = require("express-session"); const app = express(); require("dotenv").config(); @@ -21,6 +22,18 @@ app.use(express.static("public")); app.set("view engine", "ejs"); app.set("views", __dirname + "/public"); +app.use( + session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: true, + cookie: { + secure: false, // This will only work if you have https enabled! + maxAge: 60000, // 1 min + }, + }), +); + // Define routes and middleware here app.get("/", (req, res) => { res.sendFile(__dirname + "/public/index.html"); @@ -36,10 +49,7 @@ app.get("/token/:service", (req, res) => { }); // GitHub OAuth -const clientID = process.env.GITHUB_CLIENT_ID; -const clientSecret = process.env.GITHUB_CLIENT_SECRET; let github_access_token = "not logged in"; -let github_user_data = {}; function loggedIn() { if (github_access_token === "not logged in") { @@ -48,8 +58,15 @@ function loggedIn() { return true; } +app.get("/profile", (req, res) => { + if (!req.session.user) { + return res.send("log in"); + } + return res.render("pages/profile", { userData: req.session.user }); +}); + app.get("/gh", (req, res) => { - res.render("pages/index", { client_id: clientID }); + res.render("pages/index", { client_id: process.env.GITHUB_CLIENT_ID }); }); // Callback @@ -59,7 +76,7 @@ app.get("/auth/github", (req, res) => { axios({ method: "post", - url: `https://github.com/login/oauth/access_token?client_id=${clientID}&client_secret=${clientSecret}&code=${requestToken}`, + url: `https://github.com/login/oauth/access_token?client_id=${process.env.GITHUB_CLIENT_ID}&client_secret=${process.env.GITHUB_CLIENT_SECRET}&code=${requestToken}`, // Set the content type header, so that we get the response in JSON headers: { accept: "application/json", @@ -78,22 +95,22 @@ app.get("/github/login", function (req, res) { Authorization: "token " + github_access_token, }, }).then((response) => { - github_user_data = response.data; - githubOAuthLogin(res); + req.session.user = response.data; + githubOAuthLogin(req, res); }); }); -async function githubOAuthLogin(res) { - let isAccount = await githubOAuthUserExists(github_user_data.id); - if (isAccount) res.render("pages/success", { userData: github_user_data }); - else createGithubOAuthUser(github_user_data.id, res); +async function githubOAuthLogin(req, res) { + let isAccount = await githubOAuthUserExists(req.session.user.id); + if (isAccount) res.render("pages/profile", { userData: req.session.user }); + else createGithubOAuthUser(req.session.user.id, req, res); } -function createGithubOAuthUser(githubId, res) { +function createGithubOAuthUser(githubId, req, res) { const user = new User({ githubId: githubId }); user.save().then((result) => { console.log("id is " + result.id); - res.render("pages/new-user", { userData: github_user_data }); + res.render("pages/new-user", { userData: req.session.user }); }); } diff --git a/package.json b/package.json index f2e8cef..0fd812e 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "dotenv": "^16.4.5", "ejs": "^3.1.10", "express": "^4.18.2", + "express-session": "^1.18.0", "mongoose": "^8.5.1", "node": "^21.6.2", "tailwind": "^4.0.0" diff --git a/public/index.html b/public/index.html index ed9a722..4d16379 100644 --- a/public/index.html +++ b/public/index.html @@ -49,11 +49,19 @@


- +

Get started!

+ -
+
+ search +

GitHub username search

+
+
+ + +
account_circle

My Profile

diff --git a/public/pages/profile.ejs b/public/pages/profile.ejs new file mode 100644 index 0000000..e4718b8 --- /dev/null +++ b/public/pages/profile.ejs @@ -0,0 +1,105 @@ + + + + + + + + + + + + + My Profile | FetchCV + + + +
+ +
+ +
+ home +
+
+ + Name: <%= userData.name %>
+ Username: <%= userData.login %>
+ Company: <%= userData.company %>
+ Bio: <%= userData.bio %>
+ + + + + +
+ + + + + +
+

Created with FetchCV

+ +
+
+ + + + + + + + + + diff --git a/public/styles/styles.css b/public/styles/styles.css index 0fbc240..47508d1 100644 --- a/public/styles/styles.css +++ b/public/styles/styles.css @@ -597,6 +597,16 @@ video { margin-bottom: auto; } +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} + +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} + .mb-20 { margin-bottom: 5rem; }