From 8c18d807376c4100824c911152812620e48780d9 Mon Sep 17 00:00:00 2001 From: "selina.mail" Date: Thu, 22 Feb 2024 16:43:08 +0100 Subject: [PATCH] added login and sign Funtion properly --- backend/controller/users.js | 3 +- components/LoginForm.vue | 9 ++- components/server/Asset.vue | 78 +++++++++++++++++++++++--- server/api/getAllCustomers.ts | 22 ++++++++ server/api/getCustomerByName/[id].ts | 22 ++++++++ server/api/login.ts | 8 --- server/api/signup.ts | 12 +--- server/api/updateConfigItem.ts | 1 - server/middleware/customers.ts | 84 ++++++++++++++++++++++++++++ server/middleware/login.ts | 32 ++++------- server/middleware/signUp.ts | 61 +++++--------------- 11 files changed, 230 insertions(+), 102 deletions(-) create mode 100644 server/api/getAllCustomers.ts create mode 100644 server/api/getCustomerByName/[id].ts create mode 100644 server/middleware/customers.ts diff --git a/backend/controller/users.js b/backend/controller/users.js index 5b031eb..26c568a 100644 --- a/backend/controller/users.js +++ b/backend/controller/users.js @@ -15,8 +15,9 @@ import { //insert user to databased export const signUp = async (req, res, next) => { try { - let sql = `SELECT id FROM users WHERE LOWER(username) = LOWER(?)`; + let sql = `SELECT id FROM users WHERE LOWER(username) = LOWER(?)`; const result = await ownConn.execute(sql, [req.body.username]) + if (result.length > 0) { //username already exists return res.status(409).send({ message: 'This username is already in use!' diff --git a/components/LoginForm.vue b/components/LoginForm.vue index cd0fff3..411b896 100644 --- a/components/LoginForm.vue +++ b/components/LoginForm.vue @@ -88,9 +88,9 @@ const testFunctionSignup = async () => { isError.value = false; errorMsg.value = ''; - const username = 'maria' - const password = 'maria123' - const password_repeat = 'maria123' + const username = 'franzzzzzrtg' + const password = '112345678' + const password_repeat = '112345678' const fullName = 'hallo' const email = 'test.sdj@web.de' const phonenumber = '015736283729' @@ -126,11 +126,10 @@ const testFunctionSignup = async () => { let res = await Axios.post(`https://${clientsideConfig.url}:${clientsideConfig.port}/api/signup`, requestBody); // something to do with the res? - console.log(res.data) + console.log(res) } catch (err) { // handle the error - // console.log(err) console.log(err.response.statusText) isError.value = true; errorMsg.value = err.response.statusText; diff --git a/components/server/Asset.vue b/components/server/Asset.vue index 594291d..e1a0b9a 100644 --- a/components/server/Asset.vue +++ b/components/server/Asset.vue @@ -9,8 +9,14 @@
Client:
 {{ item.customer }}
- + +
Location:
@@ -89,6 +95,9 @@ const deleteAssetBool = computed(() => store.state.deleteAsset) const darkMode = ref(true) const item = ref({}); +const customer = ref({}); +const configItems = ref([]); +const customers = ref([]); // get config item from id const getItemById = async () => { @@ -109,13 +118,13 @@ const updateConfigItem = async () => { return; } else { var counter = 0; - //later check if ci already exists - // for (let key in item.value) { - // if (this.configItems[key].assetName === this.item.assetName) { - // counter += 1; - // } - // } - if (counter == 1) { + // check if config item name already exists + configItems.value.forEach(ci => { + if (ci.assetName === item.value.assetName) { + counter += 1; + } + }); + if (counter == 2) { alert("This asset name already exists. Please choose an unique asset name or modify respectively delete the old one!"); return; } @@ -160,6 +169,17 @@ const updateConfigItem = async () => { } } +//get all customers +const getCustomers = async () => { + try { + const response = await Axios.get(`https://${clientsideConfig.url}:${clientsideConfig.port}/api/getAllCustomers` + ); + customers.value = response.data; + } catch (err) { + console.log(err.response.statusText); + } +} + const confirmDeleteAsset = async () => { if (deleteAssetBool.value === true) { if (confirm("Do you really want to delete this config item? It cannot be undone!")) { @@ -176,10 +196,34 @@ const confirmDeleteAsset = async () => { } } +//get all config items +const getConfigItems = async () => { + try { + const response = await Axios.get(`https://${clientsideConfig.url}:${clientsideConfig.port}/api/getAllConfigItems`); + configItems.value = response.data; + } catch (err) { + console.log(err.response.statusText); + } +} + +// update customerid if customer was changed +const updateCustomerID = async () => { + try { + const response = await Axios.get(`https://${clientsideConfig.url}:${clientsideConfig.port}/api/getCustomerByName/${item.value.customer}`); + customer.value = response.data; + item.value.customerID = customer.value.customerID; + } catch (err) { + console.log(err.response.statusText); + } + await updateConfigItem(); +} + watch(deleteAssetBool, confirmDeleteAsset); onMounted(() => { getItemById(); + getConfigItems(); + getCustomers(); }); @@ -397,4 +441,20 @@ export default { .rectangle-lightmode { background-color: #EBEBEB; } + +.select-darkmode { + border: none; + color: white; + background: #212121; + padding: 0.4rem; + border-radius: 0.3125rem; +} + +.select-lightmode { + border: none; + color: black; + background: #EBEBEB; + padding: 0.4rem; + border-radius: 0.3125rem; +} diff --git a/server/api/getAllCustomers.ts b/server/api/getAllCustomers.ts new file mode 100644 index 0000000..00a2fad --- /dev/null +++ b/server/api/getAllCustomers.ts @@ -0,0 +1,22 @@ +import { customers, errorMsg } from "../middleware/customers"; +import { OutgoingMessage } from 'http'; + +export default defineEventHandler(async (event) => { + + const headers: Record[1]> = { + 'Access-Control-Allow-Origin': 'https://tueitapp.tueit.de', + 'Access-Control-Allow-Headers': 'authorization, content-type', + 'Access-Control-Allow-Methods': 'GET,HEAD,PUT,PATCH,POST,DELETE', + }; + setResponseHeaders(event, headers) + + if (!(errorMsg === '')) { + throw createError({ + statusCode: 400, + statusMessage: errorMsg, + }) + } + + setResponseStatus(event, 200) + return customers +}) diff --git a/server/api/getCustomerByName/[id].ts b/server/api/getCustomerByName/[id].ts new file mode 100644 index 0000000..3d6b008 --- /dev/null +++ b/server/api/getCustomerByName/[id].ts @@ -0,0 +1,22 @@ +import { customerObject, errorMsg } from "../../middleware/customers"; +import { OutgoingMessage } from 'http'; + +export default defineEventHandler(async (event) => { + + const headers: Record[1]> = { + 'Access-Control-Allow-Origin': 'https://tueitapp.tueit.de', + 'Access-Control-Allow-Headers': 'authorization, content-type', + 'Access-Control-Allow-Methods': 'OPTIONS,GET,HEAD,PUT,PATCH,POST,DELETE', + }; + setResponseHeaders(event, headers) + + if (!(errorMsg === '')) { + throw createError({ + statusCode: 400, + statusMessage: errorMsg, + }) + } + + setResponseStatus(event, 200) + return customerObject +}) diff --git a/server/api/login.ts b/server/api/login.ts index facceda..5269acc 100644 --- a/server/api/login.ts +++ b/server/api/login.ts @@ -3,14 +3,6 @@ import { OutgoingMessage } from 'http'; export default defineEventHandler(async (event) => { - const headers: Record[1]> = { - 'Access-Control-Allow-Origin': 'https://tueitapp.tueit.de', - 'Access-Control-Allow-Headers': 'authorization, content-type', - 'Access-Control-Allow-Methods': 'GET,HEAD,PUT,PATCH,POST,DELETE', - 'Access-Control-Max-Age': '86400', - }; - setResponseHeaders(event, headers) - if (!loginSuccessful) { throw createError({ statusCode: 400, diff --git a/server/api/signup.ts b/server/api/signup.ts index 3afb384..a81e016 100644 --- a/server/api/signup.ts +++ b/server/api/signup.ts @@ -1,16 +1,8 @@ -import { registeringSuccessful, errorMsg } from "../middleware/signUp.js"; -import { OutgoingMessage } from 'http'; +import { errorMsg } from "../middleware/signUp.js"; export default defineEventHandler(async (event) => { - const headers: Record[1]> = { - 'Access-Control-Allow-Origin': 'https://tueitapp.tueit.de', - 'Access-Control-Allow-Headers': 'authorization, content-type', - 'Access-Control-Allow-Methods': 'GET,HEAD,PUT,PATCH,POST,DELETE', - }; - setResponseHeaders(event, headers) - - if (!registeringSuccessful) { + if (!(errorMsg === '')) { throw createError({ statusCode: 400, statusMessage: errorMsg, diff --git a/server/api/updateConfigItem.ts b/server/api/updateConfigItem.ts index bf12cff..2a5589a 100644 --- a/server/api/updateConfigItem.ts +++ b/server/api/updateConfigItem.ts @@ -1,5 +1,4 @@ import { errorMsg } from "../middleware/configItems"; -import { OutgoingMessage } from 'http'; export default defineEventHandler(async (event) => { diff --git a/server/middleware/customers.ts b/server/middleware/customers.ts new file mode 100644 index 0000000..801e2e0 --- /dev/null +++ b/server/middleware/customers.ts @@ -0,0 +1,84 @@ +import axios, { AxiosError } from 'axios'; +import serversideConfig from '../../serversideConfig'; +import https from 'https'; + +let customers = []; +let customerObject = []; +let errorMsg = ''; + +export default defineEventHandler(async (event) => { + + const agent = new https.Agent({ + rejectUnauthorized: false, + }); + + const axiosInstance = axios.create({ + headers: { + 'Content-Type': 'application/json', + Accept: "*", + }, + httpsAgent: agent + }); + + if (event.path.startsWith("/api/getAllCustomers")) { + // get all customers object from backend + try { + let res = await axiosInstance.get(`https://${serversideConfig.url}:${serversideConfig.port}/customers`); + customers = res.data; + } catch (err) { + if (axios.isAxiosError(err)) { + const axiosError = err as AxiosError; + + if (axiosError.response) { + // Axios error + console.error(axiosError.response.data.message); + errorMsg = axiosError.response.data.message; + } else if (axiosError.request) { + console.log(err) + // If error was caused by the request + console.error(axiosError.request); + } else { + // Other errors + console.error('Error', axiosError.message); + } + } else { + // No AxiosError + console.error('Error', err); + } + } + } + + if (event.path.startsWith("/api/getCustomerByName")) { + // get customer object from backend + let itemId = null; + const path = event._path; + const pathSegments = path.split('/'); + itemId = pathSegments[pathSegments.length - 1]; + + try { + let res = await axiosInstance.get(`https://${serversideConfig.url}:${serversideConfig.port}/customerName/${itemId}`); + customerObject = res.data; + } catch (err) { + if (axios.isAxiosError(err)) { + const axiosError = err as AxiosError; + + if (axiosError.response) { + // Axios error + console.error(axiosError.response.data.message); + errorMsg = axiosError.response.data.message; + } else if (axiosError.request) { + // If error was caused by the request + console.error(axiosError.request); + } else { + // Other errors + console.error('Error', axiosError.message); + } + } else { + // No AxiosError + console.error('Error', err); + } + } + } +}) + +export { customers, customerObject, errorMsg }; \ No newline at end of file diff --git a/server/middleware/login.ts b/server/middleware/login.ts index 73c542e..c22395d 100644 --- a/server/middleware/login.ts +++ b/server/middleware/login.ts @@ -1,6 +1,5 @@ import axios, { AxiosError } from 'axios'; import serversideConfig from '../../serversideConfig'; -import fs from 'fs'; import https from 'https'; let loginSuccessful = false; @@ -8,31 +7,22 @@ let errorMsg = ''; export default defineEventHandler(async (event) => { loginSuccessful = false; + const agent = new https.Agent({ + rejectUnauthorized: false, + }); + + const axiosInstance = axios.create({ + headers: { + 'Content-Type': 'application/json', + Accept: "*", + }, + httpsAgent: agent + }); if (event.path.startsWith("/api/login")) { const body = await readBody(event) - // read the certificate and create agent - const caCert = fs.readFileSync('./certs/server_ca.pem'); - // const httpsAgent = new https.Agent({ - // keepAlive: true, - // ca: caCert, - // rejectUnauthorized: true, - // }); - - const agent = new https.Agent({ - rejectUnauthorized: false, - }); - - const axiosInstance = axios.create({ - headers: { - 'Content-Type': 'application/json', - Accept: "*", - }, - httpsAgent: agent - }); - // get user object from backend try { let res = await axiosInstance.post(`https://${serversideConfig.url}:${serversideConfig.port}/login`, { diff --git a/server/middleware/signUp.ts b/server/middleware/signUp.ts index 3ddef44..2ef5a2e 100644 --- a/server/middleware/signUp.ts +++ b/server/middleware/signUp.ts @@ -1,60 +1,28 @@ import axios, { AxiosError } from 'axios'; import serversideConfig from '../../serversideConfig'; -import fs from 'fs'; import https from 'https'; -let registeringSuccessful = false; let errorMsg = ''; export default defineEventHandler(async (event) => { - registeringSuccessful = false; + const agent = new https.Agent({ + rejectUnauthorized: false, + }); + + const axiosInstance = axios.create({ + headers: { + 'Content-Type': 'application/json', + Accept: "*", + }, + httpsAgent: agent + }); if (event.path.startsWith("/api/signup")) { - const body = await readBody(event) - // read the certificate and create agent - const caCert = fs.readFileSync('./certs/server_ca.pem'); - // const httpsAgent = new https.Agent({ - // keepAlive: true, - // ca: caCert, - // rejectUnauthorized: true, - // }); - - const agent = new https.Agent({ - rejectUnauthorized: false, - }); - - const axiosInstance = axios.create({ - headers: { - 'Content-Type': 'application/json', - Accept: "*", - }, - httpsAgent: agent - }); - // do the post request in the backend try { - let res = await axiosInstance.post(`https://${serversideConfig.url}:${serversideConfig.port}/signup`, { - username: body.username, - password: body.password, - password_repeat: body.password_repeat, - lastLogin: body.lastLogin, - fullName: body.fullName, - email: body.email, - phonenumber: body.phonenumber, - address: body.address, - city: body.city, - postcode: body.postcode, - adminBool: body.adminBool, - technician1Bool: body.technician1Bool, - technician2Bool: body.technician2Bool, - technicianMonitoringBool: body.technicianMonitoringBool, - merchantBool: body.merchantBool, - internBool: body.internBool, - }); - registeringSuccessful = true; - + let res = await axiosInstance.post(`https://${serversideConfig.url}:${serversideConfig.port}/signup`, body); } catch (err) { if (axios.isAxiosError(err)) { const axiosError = err as AxiosError; @@ -64,6 +32,7 @@ export default defineEventHandler(async (event) => { console.error(axiosError.response.data.message); errorMsg = axiosError.response.data.message; } else if (axiosError.request) { + console.log(err) // If error was caused by the request console.error(axiosError.request); } else { @@ -78,6 +47,4 @@ export default defineEventHandler(async (event) => { } }) -export { registeringSuccessful, errorMsg }; - -registeringSuccessful = false; \ No newline at end of file +export { errorMsg }; \ No newline at end of file