Skip to content

Commit

Permalink
add last version web-server b00tc4mp#8
Browse files Browse the repository at this point in the history
  • Loading branch information
frameloop committed Dec 3, 2024
1 parent 09e536b commit febf4fe
Show file tree
Hide file tree
Showing 26 changed files with 1,272 additions and 149 deletions.
202 changes: 71 additions & 131 deletions staff/quique-cabrera/playground/web-server/index.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
const express = require('express');
const getPosts = require('./logic/getPosts');
const createPost = require('./logic/createPost');
const deletePost = require('./logic/deletePost');
const logic = require('./logic/index');
const express = require('express')

const server = express();
const PORT = 8080;
const server = express()

// Middleware para manejar datos de formularios
server.use(express.urlencoded({ extended: true }));
const logic = require('./logic/index')
const { parseCookies } = require('./util/index')

const PORT = 8080

server.get('/helloworld', (req, res) => {
res.send('Hello, from Server!')
})

// Página de Login
server.get('/login', (req, res) => {
if (logic.isUserLoggedIn()) {
res.redirect('/');
return;
const cookies = parseCookies(req.headers.cookie)

const { userId } = cookies

if (userId) {
res.redirect('/')

return
}

res.send(`<doctype html>
Expand All @@ -24,6 +29,7 @@ server.get('/login', (req, res) => {
</head>
<body>
<h2>Login</h2>
<form action="/login" method="post">
<label for="username">Username</label>
<input id="username" name="username" type="text">
Expand All @@ -37,63 +43,42 @@ server.get('/login', (req, res) => {
<a href="/register">Register</a>
</body>
</html>
`);
});
`)
})

// Manejo del Login
server.post('/login', (req, res) => {
const { username, password } = req.body;
server.post('/login', express.urlencoded({ extended: true }), (req, res) => {
const { username, password } = req.body

try {
logic.loginUser(username, password);
const userId = logic.authenticateUser(username, password)

res.redirect('/');
} catch (error) {
res.status(400).send(error.message);
}
});

// Página Principal (Home)
server.get('/', (req, res) => {
if (!logic.isUserLoggedIn()) {
res.redirect('/login');
return;
}
res.setHeader('Set-Cookie', `userId=${userId}`)

let name;
try {
name = logic.getUserName();
res.redirect('/')
} catch (error) {
res.status(400).send(error.message);
return;
res.status(400).send(error.message)
}
})

let postsHTML = '';
try {
const posts = getPosts();
postsHTML = posts.map(post => `
<article>
<h3>${post.author.username}</h3>
server.get('/', (req, res) => {
const cookies = parseCookies(req.headers.cookie)

<img src="${post.image}" alt="Post image">
const { userId } = cookies

<p>${post.text}</p>
if (!userId) {
res.redirect('/login')

<time datetime="${post.date}">
${new Date(post.date).toLocaleString()}
</time>
return
}

${post.own ? `
<form action="/deletepost" method="post">
<input type="hidden" name="postId" value="${post.id}">
<button type="submit">x</button>
</form>` : ''}
let name

</article>
`).join('');
try {
name = logic.getUserName(userId)
} catch (error) {
res.status(400).send(error.message);
return;
res.status(400).send(error.message)

return
}

res.send(`<doctype html>
Expand All @@ -109,77 +94,30 @@ server.get('/', (req, res) => {
<form action="/logout" method="post">
<button type="submit">Logout</button>
</form>
<button type="button" onclick="window.location.href='/createpost'">+</button>
<section>
${postsHTML}
</section>
</body>
</html>
`);
});
`)
})

// Logout
server.post('/logout', (req, res) => {
try {
logic.logoutUser();
res.redirect('/login');
} catch (error) {
res.status(400).send(error.message);
}
});

// Página de Creación de Posts
server.get('/createpost', (req, res) => {
if (!logic.isUserLoggedIn()) {
res.redirect('/login');
return;
}

res.send(`<section>
<h3>Create Post</h3>
<form action="/createpost" method="post">
<label for="image">Image</label>
<input id="image" name="image" type="url" required>
const cookies = parseCookies(req.headers.cookie)

<label for="text">Text</label>
<input id="text" name="text" type="text" required>
const { userId } = cookies

<button type="submit">Create</button>
</form>
</section>`);
});
res.setHeader('Set-Cookie', `userId=${userId}; Max-Age=0`)

server.post('/createpost', (req, res) => {
const { image, text } = req.body;
res.redirect('/login')
})

try {
createPost(image, text);
res.redirect('/');
} catch (error) {
res.status(400).send(error.message);
}
});
server.get('/register', (req, res) => {
const cookies = parseCookies(req.headers.cookies)

// Borrar un Post
server.post('/deletepost', (req, res) => {
const { postId } = req.body;
const { userId } = cookies

try {
deletePost(postId);
res.redirect('/');
} catch (error) {
res.status(400).send(error.message);
}
});
if (userId) {
res.redirect('/')

// Página de Registro
server.get('/register', (req, res) => {
if (logic.isUserLoggedIn()) {
res.redirect('/');
return;
return
}

res.send(`<doctype html>
Expand All @@ -189,38 +127,40 @@ server.get('/register', (req, res) => {
</head>
<body>
<h2>Register</h2>
<form action="/register" method="post">
<label for="name">Name</label>
<input id="name" name="name" type="text" required>
<input id="name" name="name" type="text">
<label for="email">E-mail</label>
<input id="email" name="email" type="email" required>
<input id="email" name="email" type="email">
<label for="username">Username</label>
<input id="username" name="username" type="text" required>
<input id="username" name="username" type="text">
<label for="password">Password</label>
<input id="password" name="password" type="password" required>
<input id="password" name="password" type="password">
<button type="submit">Register</button>
</form>
<a href="/login">Login</a>
</body>
</html>
`);
});
`)
})

server.post('/register', (req, res) => {
const { name, email, username, password } = req.body;
server.post('/register', express.urlencoded({ extended: true }), (req, res) => {
const { name, email, username, password } = req.body

try {
logic.registerUser(name, email, username, password);
res.redirect('/login');
logic.registerUser(name, email, username, password)

res.redirect('/login')
} catch (error) {
res.status(400).send(error.message);
res.status(400).send(error.message)
}
});
})


// Inicia el servidor
server.listen(PORT, () => console.log(`Server listening on port ${PORT}`));
server.listen(PORT, () => console.log(`server listening on port ${PORT}`))
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const validate = require('./helpers/validate')

const localStorage = require('../data/localStorage')

const authenticateUser = (username, password) => {
validate.username(username)
validate.password(password)

const users = JSON.parse(localStorage.users)

const user = users.find(user => user.username === username && user.password === password)

if (!user)
throw new Error('wrong credentials')

return user.id
}

module.exports = authenticateUser
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
const localStorage = require('../data/localStorage')
const sessionStorage = require('../data/sessionStorage')

const getUserName = () => {
const getUserName = userId => {
const users = JSON.parse(localStorage.users)

const user = users.find(user => user.id === sessionStorage.userId)
const user = users.find(user => user.id === userId)

if (!user) throw new Error('user not found')

Expand Down
16 changes: 3 additions & 13 deletions staff/quique-cabrera/playground/web-server/logic/index.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
const loginUser = require('./loginUser')
const isUserLoggedIn = require('./isUserLoggedIn')
const authenticateUser = require('./authenticateUser')
const getUserName = require('./getUserName')
const logoutUser = require('./logoutUser')
const registerUser = require('./registerUser')
const getPosts = require('./getPosts')
const createPost = require('./createPost')
const deletePost = require('./deletePost')

const logic = {
loginUser,
isUserLoggedIn,
authenticateUser,
getUserName,
logoutUser,
registerUser,
getPosts,
createPost,
deletePost
registerUser
}

module.exports = logic
4 changes: 3 additions & 1 deletion staff/quique-cabrera/playground/web-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js",
"inspect": "node --inspect-brk index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
Expand All @@ -12,4 +14,4 @@
"dependencies": {
"express": "^4.21.1"
}
}
}
5 changes: 5 additions & 0 deletions staff/quique-cabrera/playground/web-server/util/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const parseCookies = require('./parseCookies.js')

module.exports = {
parseCookies
}
20 changes: 20 additions & 0 deletions staff/quique-cabrera/playground/web-server/util/parseCookies.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
function parseCookies(cookieString) {
if (!cookieString) return {}

const keyValues = cookieString.split('; ')

const cookies = keyValues.reduce((accum, keyValue) => {
const keyAndValue = keyValue.split('=')

const key = keyAndValue[0]
const value = keyAndValue[1]

accum[key] = value

return accum
}, {})

return cookies
}

module.exports = parseCookies
Loading

0 comments on commit febf4fe

Please sign in to comment.