Skip to content
This repository was archived by the owner on Sep 26, 2025. It is now read-only.
Open

Uyen #11

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
fc3c0d8
Merge pull request #6 from Nireusblog/dave
ule270 May 13, 2023
01fa074
progress
ule270 May 13, 2023
c765c34
navigate to login attempts
ule270 May 13, 2023
91d4637
reNavigate working
ule270 May 13, 2023
52a55fe
copy paste function from register to login to handle the loging
dayvidtran May 13, 2023
5ea707c
password checker with npm install cookie-parser for security measure
dayvidtran May 13, 2023
94f8473
auth login
dayvidtran May 13, 2023
5db185a
13:19 13.5 deployment test with new Start class
deanOfWalls May 13, 2023
4f6c71b
deployment test
deanOfWalls May 13, 2023
a47ca2d
deploy test
deanOfWalls May 13, 2023
61b42a4
trying to fix procfile
deanOfWalls May 13, 2023
468f656
updated main class so npm don't start concurrently
deanOfWalls May 13, 2023
1ea8476
updated procfile trying to point to main correctly
deanOfWalls May 13, 2023
0d79e9b
updated procfile trying to point to main correctly
deanOfWalls May 13, 2023
0868dd9
ran javac on Start.java to make a .class to call
deanOfWalls May 13, 2023
4b9a16b
logout link isnt working. got homepage to connect to database so what…
dayvidtran May 13, 2023
76d1d8d
tags linked and sorted
dayvidtran May 13, 2023
873dda3
added Main and modified Procfile
deanOfWalls May 13, 2023
2350a57
merged deans into my branch to check for deployment
dayvidtran May 13, 2023
48c8d9c
single post working where if post is users, option to edit and delete…
dayvidtran May 13, 2023
1bb7996
progress
ule270 May 13, 2023
8e4cea5
Merge remote-tracking branch 'origin/dave' into uyen
ule270 May 13, 2023
84d8672
delete posts written
ule270 May 13, 2023
3c98f6c
delete button fixed
ule270 May 13, 2023
805de7d
fetching recommended posts semi-working
ule270 May 13, 2023
8cbaffc
able to save uploaded images into db
ule270 May 14, 2023
6c5c005
ability to edit posts
ule270 May 14, 2023
ad076fd
additional writing for posts
ule270 May 14, 2023
ee55b80
new posts saving but editing still needs fixing
ule270 May 14, 2023
184ab99
final changes for right now
ule270 May 14, 2023
68ab22f
removed extra controller
ule270 May 15, 2023
d9c7483
imported dompurify
ule270 May 15, 2023
f73858c
editing posts now fixed
ule270 May 15, 2023
e2164a3
edit fix
ule270 May 16, 2023
3b9b857
additional blogs and edits done
ule270 May 16, 2023
7701706
photo zoom fixed
ule270 May 17, 2023
20eb57e
Tags sizes bigger
ule270 May 17, 2023
bd01d59
final edits
ule270 May 18, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions .idea/frontend.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: java -Dserver.port=$PORT -cp target/classes Start
42 changes: 38 additions & 4 deletions api/controllers/auth.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {db} from "../db.js"
import bcrypt from "bcryptjs"
import jwt from "jsonwebtoken"

export const register = (req, res)=>{

Expand All @@ -16,20 +17,53 @@ export const register = (req, res)=>{
const hash = bcrypt.hashSync(req.body.password, salt);


const q = 'INSERT INTO blog.users(username, email, password) VALUEs (?,?,?)'
const q = 'INSERT INTO blog.users(username, email, password) VALUES (?,?,?)'
const values = [
req.body.username,
req.body.email,
hash,
]

db.query('INSERT INTO blog.users(username, email, password) VALUEs (?,?,?)',[req.body.username,req.body.email,hash] ,(err,data)=>{
db.query('INSERT INTO blog.users(username, email, password) VALUES (?,?,?)',[req.body.username,req.body.email,hash] ,(err,data)=>{
if(err) return res.json(err);
return res.status(200).json("User has been created.");
});
});
};

export const login = (req, res)=>{}
export const logout = (req, res)=>{}
export const login = (req, res)=>{
// CHECK USER

const q = "SELECT * FROM users WHERE username = ?";

db.query(q, [req.body.username], (err, data)=>{
if (err) return res.status(500).json(err);
if (data.length == 0) return res.status(404).json("User not found!");


// CHECK PASSWORD

const isPasswordCorrect = bcrypt.compareSync(
req.body.password, data[0].password);

if(!isPasswordCorrect)
return res.status(400).json("Wrong username or password!")


const token = jwt.sign({id:data[0].id}, "jwtkey");
const{ password, ...other} = data[0]

res.cookie("access_token", token,{
httpOnly: true
}).status(200).json(other)

});
}
export const logout = (req, res)=>{

res.clearCookie("access_token",{
sameSite:"none",
secure:true
}).status(200).json("User has been logged out.")
};

98 changes: 96 additions & 2 deletions api/controllers/post.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,99 @@
import { db } from "../db.js";
import jwt from "jsonwebtoken";

export const getPosts =(req,res)=>{
const q = req.query.tag
? "SELECT * FROM posts WHERE tag=?"
:"SELECT * FROM posts";

db.query(q, [req.query.tag], (err,data)=>{
if (err) return res.status(500).send(err);

return res.status(200).json(data);

});
};


export const getPost =(req,res)=>{
const q =
"SELECT p.id, `username`, `title`, `desc`, p.img, `tag` `date` FROM users u JOIN posts p ON u.id = p.uid WHERE p.id =? ";

db.query(q,[req.params.id], (err,data)=>{
if(err) return res.json(500).json(err);

return res.status(200).json(data[0]);
});
};


export const addPost =(req,res)=>{
res.json("from controller")
}
const token = req.cookies.access_token
if(!token) return res.status(401).json("Not authenticated!");

jwt.verify(token, "jwtkey", (err,userInfo)=>{
if(err) return res.status(403).json("Token is not valid!");

const q = "INSERT INTO posts(`title`, `desc`, `img`, `tag`, `date`, `uid`) VALUES (?)"

const values = [
req.body.title,
req.body.desc,
req.body.img,
req.body.tag,
req.body.date,
userInfo.id,
];

db.query(q, [values], (err, data) => {
if (err) return res.status(500).json(err);
return res.json("Post has been created.");
});
});
};


export const deletePost =(req,res)=>{
const token = req.cookies.access_token
if(!token) return res.status(401).json("Not authenticated!");

jwt.verify(token, "jwtkey", (err,userInfo)=>{
if(err) return res.status(403).json("Token is not valid!");

const postId = req.params.id;
const q = "DELETE FROM posts WHERE `id` =? AND `uid` = ?";

db.query(q,[postId, userInfo.id], (err,data)=>{
if(err) return res.status(403).json("You can delete only your post!");

return res.json("Post has been deleted!");
});
});
};


export const updatePost =(req,res)=>{
const token = req.cookies.access_token
if(!token) return res.status(401).json("Not authenticated!");

jwt.verify(token, "jwtkey", (err,userInfo)=>{
if(err) return res.status(403).json("Token is not valid!");

const postId = req.params.id;
const q = "UPDATE posts SET `title`=?, `desc`=?, `img`=?, `tag`=? WHERE `id` = ? AND `uid` = ? ";

const values = [
req.body.title,
req.body.desc,
req.body.img,
req.body.tag,
];

db.query(q, [...values, postId, userInfo.id], (err, data) => {
if (err) return res.status(500).json(err);
return res.json("Post has been updated.");
});
});
};


3 changes: 0 additions & 3 deletions api/controllers/posts.js

This file was deleted.

Empty file removed api/controllers/user.js
Empty file.
2 changes: 1 addition & 1 deletion api/db.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import mysql from "mysql"
export const db = mysql.createConnection({
host: "localhost",
user: "root",
password: "sickwithit@517",
password: "zipcode0",
database: "blog"
})
30 changes: 19 additions & 11 deletions api/index.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,34 @@

import express, { response } from "express"

import authRoutes from "./routes/auth.js"
import userRoutes from "./routes/users.js"
import postRoutes from "./routes/posts.js"
import cookieParser from "cookie-parser"
import multer from "multer";

const app = express()
const app = express();

app.use(express.json())
app.use("/api/auth", authRoutes)
app.use("/api/users", userRoutes)
app.use("/api/posts", postRoutes)
app.use(express.json());
app.use(cookieParser());
const storage = multer.diskStorage({
destination: function (req, file, cb){
cb(null, "../public/upload");
},
filename: function (req, file, cb){
cb(null, Date.now() + file.originalname);
},
});

const upload = multer({ storage });

app.get("/test",(req, res)=>{
res.json("It works!")
})
app.post("/api/upload", upload.single("file"), function (req, res) {
const file = req.file;
res.status(200).json(file.filename);
});

app.use("/api/auth", authRoutes)
app.use("/api/users", userRoutes)
app.use("/api/posts", postRoutes)

app.listen(8800,()=>{
console.log("Connected!")
})
});
Loading