From 68ddf857d1a8177017079834394cfa54af84b3dc Mon Sep 17 00:00:00 2001 From: angelalvaigle Date: Tue, 29 Oct 2024 00:03:33 +0100 Subject: [PATCH] user-service updated --- gatewayservice/gateway-service.js | 42 ++++++++++++++++------- users/authservice/auth-model.js | 6 ++++ users/authservice/auth-router.js | 2 +- users/userservice/user-controller.js | 44 ++++++++++++++++++++++++ users/userservice/user-model.js | 6 ++++ users/userservice/user-router.js | 14 ++++++++ users/userservice/user-service.js | 50 ++-------------------------- webapp/src/pages/AddUser.jsx | 2 -- 8 files changed, 104 insertions(+), 62 deletions(-) create mode 100644 users/userservice/user-controller.js create mode 100644 users/userservice/user-router.js diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 79ccc28..4d7bce3 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -3,10 +3,9 @@ const axios = require('axios'); const cors = require('cors'); const promBundle = require('express-prom-bundle'); //libraries required for OpenAPI-Swagger -const swaggerUi = require('swagger-ui-express'); -const fs = require("fs") -const YAML = require('yaml') - +const swaggerUi = require('swagger-ui-express'); +const fs = require('fs'); +const YAML = require('yaml'); const app = express(); const port = 8000; @@ -18,7 +17,7 @@ app.use(cors()); app.use(express.json()); //Prometheus configuration -const metricsMiddleware = promBundle({includeMethod: true}); +const metricsMiddleware = promBundle({ includeMethod: true }); app.use(metricsMiddleware); // Health check endpoint @@ -29,25 +28,44 @@ app.get('/health', (_req, res) => { app.post('/login', async (req, res) => { try { // Forward the login request to the authentication service - const authResponse = await axios.post(authServiceUrl+'/login', req.body); + const authResponse = await axios.post(authServiceUrl + '/login', req.body); res.json(authResponse.data); } catch (error) { - res.status(error.response.status).json({ error: error.response.data.error }); + res + .status(error.response.status) + .json({ error: error.response.data.error }); } }); app.post('/adduser', async (req, res) => { try { // Forward the add user request to the user service - const userResponse = await axios.post(userServiceUrl+'/adduser', req.body); + const userResponse = await axios.post( + userServiceUrl + '/adduser', + req.body + ); + res.json(userResponse.data); + } catch (error) { + res + .status(error.response.status) + .json({ error: error.response.data.error }); + } +}); + +app.get('/users', async (req, res) => { + try { + // Forward the get users request to the user service + const userResponse = await axios.get(userServiceUrl + '/users', req.body); res.json(userResponse.data); } catch (error) { - res.status(error.response.status).json({ error: error.response.data.error }); + res + .status(error.response.status) + .json({ error: error.response.data.error }); } }); // Read the OpenAPI YAML file synchronously -openapiPath='./openapi.yaml' +openapiPath = './openapi.yaml'; if (fs.existsSync(openapiPath)) { const file = fs.readFileSync(openapiPath, 'utf8'); @@ -59,7 +77,7 @@ if (fs.existsSync(openapiPath)) { // It takes the parsed Swagger document as input app.use('/api-doc', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); } else { - console.log("Not configuring OpenAPI. Configuration file not present.") + console.log('Not configuring OpenAPI. Configuration file not present.'); } // Start the gateway service @@ -67,4 +85,4 @@ const server = app.listen(port, () => { console.log(`Gateway Service listening at http://localhost:${port}`); }); -module.exports = server +module.exports = server; diff --git a/users/authservice/auth-model.js b/users/authservice/auth-model.js index 7540e29..eb26037 100644 --- a/users/authservice/auth-model.js +++ b/users/authservice/auth-model.js @@ -23,6 +23,12 @@ const userSchema = new mongoose.Schema({ }, }); +userSchema.methods.toJSON = function () { + let obj = this.toObject(); + delete obj.password; + return obj; +}; + const User = mongoose.model('User', userSchema); module.exports = User; diff --git a/users/authservice/auth-router.js b/users/authservice/auth-router.js index 4a60c72..5891efb 100644 --- a/users/authservice/auth-router.js +++ b/users/authservice/auth-router.js @@ -1,6 +1,6 @@ // authRouter.js const express = require('express'); -const { loginController } = require('./auth-controller.js'); // Asegúrate de que esta ruta sea correcta +const { loginController } = require('./auth-controller.js'); const authRouter = express.Router(); diff --git a/users/userservice/user-controller.js b/users/userservice/user-controller.js new file mode 100644 index 0000000..10eb839 --- /dev/null +++ b/users/userservice/user-controller.js @@ -0,0 +1,44 @@ +const bcrypt = require('bcrypt'); +const User = require('./user-model'); + +// Function to validate required fields in the request body +function validateRequiredFields(req, requiredFields) { + for (const field of requiredFields) { + if (!(field in req.body)) { + throw new Error(`Missing required field: ${field}`); + } + } +} + +exports.addUserController = async (req, res) => { + try { + // Check if required fields are present in the request body + validateRequiredFields(req, ['username', 'password']); + + // Encrypt the password before saving it + const hashedPassword = await bcrypt.hash(req.body.password, 10); + + const newUser = new User({ + name: req.body.name, + lastName: req.body.lastName, + email: req.body.email, + username: req.body.username, + password: hashedPassword, + role: req.body.role, + }); + + await newUser.save(); + res.json(newUser); + } catch (error) { + res.status(400).json({ error: error.message }); + } +}; + +exports.getUsersController = async (req, res) => { + try { + const users = await User.find(); // Fetch all users, only return username field for security + res.json(users); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; diff --git a/users/userservice/user-model.js b/users/userservice/user-model.js index 7540e29..eb26037 100644 --- a/users/userservice/user-model.js +++ b/users/userservice/user-model.js @@ -23,6 +23,12 @@ const userSchema = new mongoose.Schema({ }, }); +userSchema.methods.toJSON = function () { + let obj = this.toObject(); + delete obj.password; + return obj; +}; + const User = mongoose.model('User', userSchema); module.exports = User; diff --git a/users/userservice/user-router.js b/users/userservice/user-router.js new file mode 100644 index 0000000..9a7cb31 --- /dev/null +++ b/users/userservice/user-router.js @@ -0,0 +1,14 @@ +// userRouter.js +const express = require('express'); +const { + addUserController, + getUsersController, +} = require('./user-controller.js'); + +const userRouter = express.Router(); + +// Define la ruta para el login y asocia el controlador +userRouter.post('/adduser', addUserController); +userRouter.get('/users', getUsersController); + +module.exports = userRouter; diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js index decff39..9c39959 100644 --- a/users/userservice/user-service.js +++ b/users/userservice/user-service.js @@ -1,11 +1,8 @@ // user-service.js const express = require('express'); const mongoose = require('mongoose'); -const bcrypt = require('bcrypt'); const bodyParser = require('body-parser'); -const User = require('./user-model'); -const { get } = require('http'); -const { emit } = require('process'); +const userRouter = require('./user-router.js'); const app = express(); const port = 8001; @@ -17,49 +14,8 @@ app.use(bodyParser.json()); const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; mongoose.connect(mongoUri); -// Function to validate required fields in the request body -function validateRequiredFields(req, requiredFields) { - for (const field of requiredFields) { - if (!(field in req.body)) { - throw new Error(`Missing required field: ${field}`); - } - } -} - -// add a new user -app.post('/adduser', async (req, res) => { - try { - // Check if required fields are present in the request body - validateRequiredFields(req, ['username', 'password']); - - // Encrypt the password before saving it - const hashedPassword = await bcrypt.hash(req.body.password, 10); - - const newUser = new User({ - name: req.body.name, - lastName: req.body.lastName, - email: req.body.email, - username: req.body.username, - password: hashedPassword, - role: req.body.role, - }); - - await newUser.save(); - res.json(newUser); - } catch (error) { - res.status(400).json({ error: error.message }); - } -}); - -// get users -app.get('/users', async (req, res) => { - try { - const users = await User.find(); // Fetch all users, only return username field for security - res.json(users); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); +// userRouter +app.use('/', userRouter); const server = app.listen(port, () => { console.log(`User Service listening at http://localhost:${port}`); diff --git a/webapp/src/pages/AddUser.jsx b/webapp/src/pages/AddUser.jsx index e483de6..bc7e758 100644 --- a/webapp/src/pages/AddUser.jsx +++ b/webapp/src/pages/AddUser.jsx @@ -19,8 +19,6 @@ const AddUser = () => { const navigate = useNavigate(); const addUser = async () => { - console.log({ username }); - console.log({ password }); try { await axios.post(`${apiEndpoint}/adduser`, { name,