diff --git a/app/config/db.config.js b/app/config/db.config.js deleted file mode 100644 index ceea409..0000000 --- a/app/config/db.config.js +++ /dev/null @@ -1,16 +0,0 @@ -require('dotenv').config(); - -const { logMsg } = require('../services/logger'); -module.exports = { - - "development": { - "username": process.env.USER_NAME, - "password": process.env.PASSWORD, - "database": process.env.DATABASE, - "port": process.env.PORT, - "host": process.env.HOST, - "dialect": "mssql", - "logging": (message) =>(logMsg.info(message)) - - } - }; \ No newline at end of file diff --git a/app/controllers/data.json b/app/controllers/data.json new file mode 100644 index 0000000..388b2d8 --- /dev/null +++ b/app/controllers/data.json @@ -0,0 +1,8 @@ +[ + { + "email": "aadhavanvalli@gmail.com" + }, + { + "email": "aadhavancarousell@gmail.com" + } +] \ No newline at end of file diff --git a/app/controllers/rosy-semiotics-399007-a9066914a24a.json b/app/controllers/rosy-semiotics-399007-a9066914a24a.json new file mode 100644 index 0000000..5592760 --- /dev/null +++ b/app/controllers/rosy-semiotics-399007-a9066914a24a.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "rosy-semiotics-399007", + "private_key_id": "a9066914a24a4cf1892ec3d5e73dcbdd9e0c5690", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDnrREnBGg7V35b\nxF4754WUdPniqyIojGO0NzThMHDzcLtu+bD7PTlkE1yYT7oUk8ncw7ogKEymuAoY\nnIvqkgEnmulva+stBIqRVVcUndhFTXB/mw4g0TfjW9MZgD4fkK+B2UpPnsWPZikf\n2zECHDTQ/mhXFlv70R8arCnsGY3dOEupdfEyO6mt2i0Z0YG1Ni8TJBdV7HvGAFt5\nsFTS/igxQYUAZQ+uIbC1NbdCgWIQdlsB83YQy2gvHXxtL+7Luyd0kK0SY1lun0bC\nJk2HsE3OWpgiyFi646eoHXuzs6J2TANVPwsLsMCxRO1EkKFRSVDGimmE0FMumbi1\nVCDHZpdPAgMBAAECggEAAMIuTQ2Lf4iGqIbUWUwlnT6IOuoKz3IIgq2vBcgCiPKm\n+CnC1bjjmBJJTMCmEnYIRJdXdhd9+MEyErH78iWFX3Jk94y1edZBrwePEklaA6Jb\n2DhA4rsxM12mdLc0M7kcsNmStG0sXY74Wu19E9/Ve0rVX3p6Z8M7Ox/7dpWSQ1W4\n00uM8j+5xAyosTiMfsPxS2fnAZTB6cXtgy0vowsHL8ffmFZWdW0kxOI2djvcXTsg\nzm2Cz0Tk8a/RVFhvithBIIhtvXBy6ECQb+WUbw1nlWbUITt9Wc9ob5L7fWsRDY9v\n3U5QmN1yTBrhyx0lidOcYDTMkeHJXLVhNSidILn/gQKBgQD/Gj7B51p8q6Ce8ERQ\ngaH67DUAZD5z69Mp+Rj4mHuCldhHM+aZs013GpeDRhOIWfBDsTiZrt6KZqoyK1zf\nD2qr68BTRcxFOk6z22tv9A5pNcU8RhN4MdwRehk9bsxLWLpF7ARXzgQHKSy2Z+WG\n3CYrQSSvTTuVHuqVlEOQ5LuEIQKBgQDofbkcyItButCzzWWl6yGYzpTyZ5CjADQu\nevxQBj6JtnB2eWZU2uuDM4YZi+UgVfqgiZ50gaOp9Tgg0O7Odq08NtnpIDiVPiYq\nCtfJZHFpQjCtQmbNQj6D9s56d7Zfkj9AceDS5gROsJ2efnylvQ4ciRvaeEN+ES9o\nXfREqA6tbwKBgQCIQr6O2ELvIMWU4AW9cuDQpObSpLjvNmH+o32BHAGtCNkTf1eH\ndczE98FCb2XziQbbQYhYHp3kE16JmbvrsdJqrmx2jmvD9pcfXu6OSDCCZiRKQ6wW\noZtJAo0E0W/yNxyYSK8xL2vbX1TwwaJKXMFOjWdI89oFlxP6fc1xUZwPwQKBgBg/\nPHYfCD8Dr86AxnAmdKuOKASb/n6xf7+1PelOrWkJaPNCOATzjApz7jFt4KidrvTd\nRXRbLOmF1KO/hphr0idshQ+GN8CA6dQKq3SqkBVtPMxlF3mixghXTjOBlrii9QvQ\nlKUKLjrSuq2T/YX/kKAzQH9peYiFXE9jNR2P9W/rAoGBAKitQDMBZ7Ov1vLsL3ZK\nhkx4cbFV9pQcjTQr62VVyNKXgq/gfwq57YnErQyRTtYVMkJT2D5cNOiiV5nwOrjT\nz34YqYb8T7jbfcdRO/QQ60wgcx5eJDeCX1gqRKMl+0PoS3l58yZ0n30eulBCUwtv\nnrO/gauaV/QcXqSEkvzU0W5s\n-----END PRIVATE KEY-----\n", + "client_email": "test-google-sheet@rosy-semiotics-399007.iam.gserviceaccount.com", + "client_id": "106850194283146982068", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-google-sheet%40rosy-semiotics-399007.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/app/controllers/test.controller.js b/app/controllers/test.controller.js index 747e869..cfcd2a1 100644 --- a/app/controllers/test.controller.js +++ b/app/controllers/test.controller.js @@ -1,21 +1,49 @@ -const { sequelize,Test} = require('../models') +// const { sequelize,Test} = require('../models') const { logMsg } = require('../services/logger.js'); const { GoogleSpreadsheet } = require('google-spreadsheet'); const fs = require('fs'); +const path = require('path'); +// const { log } = require('util'); require('dotenv').config(); let dropdown = []; let column_name; let doc; +let CREDENTIALS; // use in addRow and getRow api let tempData = []; +const filePath = path.join(__dirname, 'data.json'); +const datafromjson = require('./data.json'); +const { log } = require('console'); +// const { col } = require('sequelize'); + +let number; // Declare number as a global variable + +async function fetchSheetData() { + try { + let sheet1 = doc.sheetsByIndex[0]; + let rows1 = await sheet1.getRows(); + number = rows1.length+1; // Assign the value to the global variable 'number' + + // You can now use the 'number' variable as a global variable. + console.log(`Number of rows: ${number}`); + } catch (error) { + console.error('Error fetching sheet data:', error); + } +} + +// Call the async function to fetch and work with sheet data. +// You can use 'number' outside of the function. +console.log(`Global number variable: ${number}`); exports.Welcome = (req, res) => { + // number=0; + console.log(datafromjson.length); try { - const Msg = "Welcome....!"; + const Msg = "Welcom....!"; console.log(Msg); logMsg.info("Api Call Success"); res.send({'status':200 , message:"Success." ,'data': Msg}); @@ -27,8 +55,6 @@ exports.Welcome = (req, res) => }; - - exports.loginPage = async (req, res ) => { try @@ -40,130 +66,178 @@ exports.loginPage = async (req, res ) => }; - - -exports.getRow = async (req, res) => +exports.adduser = async (req, res ) => { try { - email = req.query.email; - // arr for ejs - const empData = []; - // clear array - tempData = []; - // clear temp data - tempData = []; - await doc.loadInfo(); - // Index of the sheet - let sheet = doc.sheetsByIndex[0]; - // Get all the rows - let rows = await sheet.getRows(); - - // dropdown array for each dropdown column - category = []; age_Category = []; - basthi = []; varga = []; - milan_shaka = []; poruppu = []; - blood_group = []; ganavesh_2w_4w_basg = []; - new_index = 0; - - category.push(''); - age_Category.push(''); - basthi.push(''); - varga.push(''); - milan_shaka.push(''); - poruppu.push(''); - blood_group.push(''); - ganavesh_2w_4w_basg.push('') - - for (let index = 0; index < rows.length; index++) { - const row = rows[index]; - category.push(row['Çategory']); - age_Category.push(row['Age Category']); - basthi.push(row['Basthi']); - varga.push(row['Varga']); - milan_shaka.push(row['Milan / Shaka']); - poruppu.push(row['Poruppu']); - blood_group.push(row['Blood Group']); - ganavesh_2w_4w_basg.push(row['Ganavesh']); - if (index == rows.length-1) { - new_index = Number(row['Sl.']) + 1; - } - }; - dropdown = - { - "category": [...new Set(category)], - "age_Category" : [...new Set(age_Category)], - "basthi" : [...new Set(basthi)], - "varga" : [...new Set(varga)], - "milan_shaka" : [...new Set(milan_shaka)], - "poruppu" : [...new Set(poruppu)], - "blood_group" : [...new Set(blood_group)], - "ganavesh_2w_4w_basg" : [...new Set(ganavesh_2w_4w_basg)], - "new_index" : new_index - } - for (let index = 0; index < rows.length; index++) { - const row = rows[index]; - // get sheet column name for dynamic insertion - if(index == 0){ column_name = row._sheet.headerValues; } - if (row.email == email) { - // store login person data from sheet because get person id that is used to match other person manager_id - var obj = {} - for (let i = 0; i < column_name.length; i++){ - // get email position in dynamic array - Object.assign( obj , { [column_name[i]] : row[column_name[i]] }); - } - tempData.push(obj); - } - }; - if (tempData.length > 0) - { - for (let index = 0; index < rows.length; index++) { - const row = rows[index]; - if (row.email == email || row.Gatnayak == tempData[0]['email'] ) { - var obj = {} - for (let i = 0; i < column_name.length; i++){ - // get email position in dynamic array - Object.assign( obj , { [column_name[i]] : row[column_name[i]] }); - } - empData.push(obj); - } - }; - res.render( 'displaydata' , { "data" : empData , "dropdown" : dropdown} , function (err, html ) { res.send(html) }); - } - else - { - res.send('

No Data

'); - } + res.render( 'adduser' ,function (err, html ) { res.send(html) }) } catch(err) { res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }); } //end of try catch }; - - -exports.addRow = async (req, res) => +exports.addjson = async (req, res ) => { try { - newData = req.body.data; - // key value mapping - var obj = {} - for (let i = 0; i < column_name.length; i++){ - // get email position in dynamic array - Object.assign( obj , { [column_name[i]] : newData[i] }); - } - let rows = [obj]; - // load the documents info - await doc.loadInfo(); - // Index of the sheet - let sheet = doc.sheetsByIndex[0]; - for (let index = 0; index < rows.length; index++) { - const row = rows[index]; - await sheet.addRow(row); - } - if (rows[0]['Gatnayak'] == tempData[0].email ) {res.send({'status':200 , message:"Success." ,'data': "success" , 'statusCode' : 1 }); } + + const getvalue = req.body.data; + // console.log(req.body.data); + let newData={"email":getvalue}; + fs.readFile(filePath, 'utf8', (readErr, data) => { + if (readErr) { + console.error('Error reading file:', readErr); + return; + } + let existingData = []; + + try { + // Parse the existing JSON data (if any) + existingData = JSON.parse(data); + } catch (parseErr) { + console.error('Error parsing existing data:', parseErr); + } + + // Append the new data to the existing array + existingData.push(newData); + + // Write the updated data back to the JSON file + fs.writeFile(filePath, JSON.stringify(existingData, null, 2), (writeErr) => { + if (writeErr) { + console.error('Error writing to file:', writeErr); + } else { + console.log('Data appended and saved to file successfully.'); + } + }); + }) + if(rows[0]['Gatnayak'] == tempData[0].email ) {res.send({'status':200 , message:"Success." ,'data': "success" , 'statusCode' : 1 }); } else{res.send({'status':200 , message:"Success." ,'data': "success", 'statusCode' : 0 }); } + } catch(err) { + res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }); + } //end of try catch + +}; + +exports.getRow = async (req, res) => +{ + try + { + fetchSheetData(); + for (let index = 0; index < datafromjson.length; index++) { + // console.log(req.query.email); + // email = req.query.email; + const email=req.body.email; + req.session.user = { email }; + // console.log(req.session.user.email); + // console.log(email); + aadhaemail= datafromjson[0].email; + let emaill = datafromjson[index].email; + if (email == emaill) { + const empData = []; + tempData = ['fdd']; + await doc.loadInfo(); + let sheet = doc.sheetsByIndex[0]; + let rows = await sheet.getRows(); + // const number = rows.length+1; + category = []; age_Category = []; + basthi = []; varga = []; + milan_shaka = []; poruppu = []; + blood_group = []; ganavesh_2w_4w_basg = []; + // new_index = 0; + + category.push('Redmi','Samsung','ONEPLUS'); + age_Category.push('18-21','22-25','26-30'); + basthi.push('Niruha/Kashaya Basthi','Anuvasana Basthi'); + varga.push('Rasi','Hora','Chaturthamsa','Dasamsa','Shodasamsa'); + milan_shaka.push(''); + poruppu.push(''); + blood_group.push('A+','A-','B+','B-','AB+','AB-','O+','O-'); + ganavesh_2w_4w_basg.push('') + for (let index = 0; index < rows.length; index++) { + const row = rows[index]; + category.push(row['Category']); + age_Category.push(row['Age Category']); + basthi.push(row['Basthi']); + varga.push(row['Varga']); + milan_shaka.push(row['Milan / Shaka']); + poruppu.push(row['Poruppu']); + blood_group.push(row['Blood Group']); + ganavesh_2w_4w_basg.push(row['Ganavesh']); + // if (index == rows.length-1) { + // new_index = Number(row.Sl) + 1; + // } + }; + dropdown ={ + "category": [...new Set(category)], + "age_Category" : [...new Set(age_Category)], + "basthi" : [...new Set(basthi)], + "varga" : [...new Set(varga)], + "milan_shaka" : [...new Set(milan_shaka)], + "poruppu" : [...new Set(poruppu)], + "blood_group" : [...new Set(blood_group)], + "ganavesh_2w_4w_basg" : [...new Set(ganavesh_2w_4w_basg)], + // "new_index" : new_index + } + for (let index = 0; index < rows.length; index++) { + const row = rows[index]; + if(index == 0){ column_name = row._sheet.headerValues; } + if (row.email == email) { + var obj = {} + for (let i = 0; i < column_name.length; i++){ + Object.assign( obj , { [column_name[i]] : row[column_name[i]] }); + } + tempData.push(obj); + } + }; + // if (tempData.length > 0) { + for (let index = 0; index < rows.length; index++) { + const row = rows[index]; + // console.log(rows[0]._rawData[22]); + // if (row == email || row.Gatnayak == tempData[0]['email'] ) { + if(true){ + // console.log(row.); + var obj = {} + for (let i = 0; i < column_name.length; i++){ + Object.assign( obj , { [column_name[i]] : row[column_name[i]] }); + } + empData.push(obj); + } + }; + + res.render( 'displaydata' , { "data" : empData , "dropdown" : dropdown , aadhaemail,email,number} , function (err, html ) { res.send(html) }); + // } + // else{ + // res.send('

No Data

'); + // } + } + } + + res.end("

No Data

"); + }catch(err) { + res.send({'status':404,message: err.message || "Some error occurred while retrieving data." ,'data': "No data" }); + } +}; + + +exports.addRow = async (req, res) =>{ + try{ + newData = req.body.data; + console.log(newData); + var obj = {} + for (let i = 0; i < column_name.length; i++){ + Object.assign( obj , { [column_name[i]] : newData[i] }); + } + let rows = [obj]; + await doc.loadInfo(); + let sheet = doc.sheetsByIndex[0]; + for (let index = 0; index < rows.length; index++) { + const row = rows[index]; + await sheet.addRow(row); + } + if(rows[0]['Gatnayak'] == tempData[0].email ) {res.send({'status':200 , message:"Success." ,'data': "success" , 'statusCode' : 1 }); } + else{res.send({'status':200 , message:"Success." ,'data': "success", 'statusCode' : 0 }); } + number++; } catch(err) { res.status(500).send({'status':404, message: err.message || "Some error occurred while inserting statements." ,'data': "No data" @@ -171,45 +245,54 @@ exports.addRow = async (req, res) => }; - - exports.updateRow = async (req, res ) => { try { Olddata = req.body.Old; Newdata = req.body.New; +// console.log('old'+Olddata[1]);// this will give old number same +// console.log('new'+Newdata[1]);// this will give new number sam Old = {}; New = {}; + column_name.forEach(async(element , index) => { - Object.assign( Old , { [element] : Olddata[index]}); - Object.assign( New , { [element] : Newdata[index]}); + Object.assign( Old , { [element] : Olddata[index]});//oldata + Object.assign( New , { [element] : Newdata[index]});//newdata }); arrKeys = [ ]; - arrKeys = Object.keys(Old) + arrKeys = Object.keys(Old);//keys -> heading values -> datas var updateVal = []; for (let i = 0; i < arrKeys.length ; i++) { - if (Old[arrKeys[i]] != New[arrKeys[i]]) { + if (Old[arrKeys[i]] != New[arrKeys[i]]) { + // if (Old[arrKeys[i]] == New[arrKeys[i]]) { obj = { "keyValue" : arrKeys[i] , oldValue : Old[arrKeys[i]] , newValue : New[arrKeys[i]] }; updateVal.push(obj) - obj = { } + obj = { }; } } console.log(updateVal); + //console.log(updateVal[0].newValue); // this is the value for compare and update the value in sheet // load the documents info await doc.loadInfo(); // Index of the sheet - let sheet = doc.sheetsByIndex[0]; + let sheet = doc.sheetsByIndex[0]; //it will detials of googlesheet let rows = await sheet.getRows(); + // console.log(rows[0]._rawData); //this is give the googlesheet values by changin the [] value to get different updateVal.forEach(async(element) => { + // console.log(rows.length);//check in + // console.log(rows[0]._rawData[4]); //this will get the phone number for (let index = 0; index < rows.length; index++) { - const row = rows[index]; - if (element.keyValue != "Sl.") { - if (row[element.keyValue] === element.oldValue) { + const row = rows[index]._rawData[1]; + + // console.log("Row->"+row); + // if (updateVal[0].newValue) { + //if (row[element.keyValue] === element.oldValue) {//row[element.keyValue]-> categry value one by one + if(Newdata[1]==row){ rows[index][element.keyValue] = element.newValue; await rows[index].save(); break; } - } + // } }; }); res.send({'status':200 , message:"Success." ,'data': "Msg"}) @@ -219,15 +302,15 @@ exports.updateRow = async (req, res ) => }; - - (async function ( req , res ) { + const private_keyy = process.env.PRIVATE_KEY.replace(/\\n/g, '\n'); + // spreadsheet key is the long id in the sheets URL const RESPONSES_SHEET_ID = process.env.RESPONSES_SHEET_ID; // Create a new document doc = new GoogleSpreadsheet(RESPONSES_SHEET_ID); // use service account creds -await doc.useServiceAccountAuth({ client_email: process.env.CLIENT_EMAIL , private_key: process.env.PRIVATE_KEY }); +await doc.useServiceAccountAuth({ client_email: process.env.CLIENT_EMAIL , private_key: private_keyy }); // load the documents info await doc.loadInfo(); // Index of the sheet @@ -236,7 +319,3 @@ let sheet = doc.sheetsByIndex[0]; let rows = await sheet.getRows(); })(); - - - - diff --git a/app/models/Test.js b/app/models/Test.js deleted file mode 100644 index 88a5cf7..0000000 --- a/app/models/Test.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict' -const { Model } = require('sequelize') -module.exports = (sequelize, DataTypes) => { - class Test extends Model { - /** - * Helper method for defining associations. - * This method is not a part of Sequelize lifecycle. - * The `models/index` file will call this method automatically. - */ - // define association here - // static associate({ Financials }) { - // this.hasMany(Financials, { foreignKey: 'entity_id', as: 'financialsData' }) - // } - - - } - Test.init( - { - losid: { type: DataTypes.STRING }, - createdby: { type: DataTypes.INTEGER }, - updatedby: { type: DataTypes.INTEGER }, - - }, - { - sequelize, - tableName: 'test', - modelName: 'Test', - } - ) - return Test -} diff --git a/app/models/index.js b/app/models/index.js deleted file mode 100644 index abe34a1..0000000 --- a/app/models/index.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const Sequelize = require('sequelize'); -const basename = path.basename(__filename); -const env = process.env.NODE_ENV || 'development'; -const config = require(__dirname + '/../config/db.config.js')[env]; -//console.log(env); -//console.log(config); -const db = {}; - -let sequelize; -if (config.use_env_variable) { - sequelize = new Sequelize(process.env[config.use_env_variable], config); -} else { - sequelize = new Sequelize(config.database, config.username, config.password, config); -} - -fs - .readdirSync(__dirname) - .filter(file => { - return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); - }) - .forEach(file => { - const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); - db[model.name] = model; - }); - -Object.keys(db).forEach(modelName => { - if (db[modelName].associate) { - db[modelName].associate(db); - } -}); - -db.sequelize = sequelize; -db.Sequelize = Sequelize; - -module.exports = db; diff --git a/app/routes/routes.js b/app/routes/routes.js index 99d2d6d..b414459 100644 --- a/app/routes/routes.js +++ b/app/routes/routes.js @@ -5,10 +5,6 @@ module.exports = app => { const { logMsg } = require('../services/logger.js'); var router = require("express").Router(); - - - - /** * @swagger * /api/demo: @@ -19,18 +15,24 @@ module.exports = app => { * 200: * description: success */ - router.get("/demo", Mycontroller.Welcome); +// router.get("/demo", Mycontroller.Welcome); - router.get("/loginPage", Mycontroller.loginPage); + router.get("/home", Mycontroller.loginPage); - router.get("/getRow", Mycontroller.getRow); + router.get("/adduser", Mycontroller.adduser); + + router.post("/addjson", Mycontroller.addjson); + +// router.get("/getRow", Mycontroller.get); + + router.post("/getRow", Mycontroller.getRow); router.post("/addRow", Mycontroller.addRow); router.post("/updateRow", Mycontroller.updateRow); // routes started here - app.use('/api', router); + app.use('/', router); }; diff --git a/app/services/logger.js b/app/services/logger.js index 7970433..f6d0910 100644 --- a/app/services/logger.js +++ b/app/services/logger.js @@ -1,27 +1,26 @@ -/** - * Configurations of logger. - */ - var winston = require('winston'); - require('winston-daily-rotate-file'); +/*Configurations of logger*/ +var winston = require('winston'); +const {createLogger,transports} = require('winston'); +require('winston-daily-rotate-file'); - var transport = new winston.transports.DailyRotateFile({ - filename: 'storage/log/msg.log', - datePattern: 'YYYY-MM-DD', - zippedArchive: true, - maxSize: '20m', - maxFiles: '14d' - }); - transport.on('rotate', function(oldFilename, newFilename) { - // do something fun - }); +var transport = new transports.DailyRotateFile({ + filename: 'storage/log/msg.log', + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + maxSize: '20m', + maxFiles: '14d' +}); - const logger = winston.createLogger({ - transports: [ - transport - ] - }); - module.exports = { - 'logMsg': logger, - }; - \ No newline at end of file +transport.on('rotate', function(oldFilename, newFilename) { + // do something fun +}); + +const logger = createLogger({ + transports: [ + transport + ] +}); +module.exports = { + 'logMsg': logger, +}; diff --git a/app/views/Screenshot 2023-09-16 170601.png b/app/views/Screenshot 2023-09-16 170601.png new file mode 100644 index 0000000..b2165a1 Binary files /dev/null and b/app/views/Screenshot 2023-09-16 170601.png differ diff --git a/app/views/Y4Pb2E.png b/app/views/Y4Pb2E.png new file mode 100644 index 0000000..6838733 Binary files /dev/null and b/app/views/Y4Pb2E.png differ diff --git a/app/views/adduser.ejs b/app/views/adduser.ejs new file mode 100644 index 0000000..f42ad3c --- /dev/null +++ b/app/views/adduser.ejs @@ -0,0 +1,250 @@ + + + + + + Document + + + + + + + + +
+
+ image not there +

Welcome back! Please Add Email



+
+
+ + +



+ + +
+ +
+ + + + + + \ No newline at end of file diff --git a/app/views/displaydata.ejs b/app/views/displaydata.ejs index 2deb926..d19726a 100644 --- a/app/views/displaydata.ejs +++ b/app/views/displaydata.ejs @@ -4,6 +4,7 @@ + @@ -35,25 +36,27 @@ body{ width: 100%; height: 150px; position: sticky; - z-index:100 + z-index:0 } p{ padding-top: 30px; padding-left: 30px; } #myInput{ - margin-left: 10px; + margin-left: 32%; width: 55%; height: 70px; border-top-left-radius: 50px; border-bottom-left-radius: 50px; + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; font-size: 40px; font-family: 'Varela Round', sans-serif; padding-left: 25px; } .search-panel{ top: 30px; - margin-left: 566px; + margin-left: 70%; position: absolute; } #search_param{ @@ -68,7 +71,7 @@ p{ #material{ top: 32px; font-size: 70px; - margin-left:85%; + margin-left:90%; color: #ffffff; background-color: #435d7d; border-color: #435d7d; @@ -76,6 +79,24 @@ p{ display:inline-block; position: absolute; } +#add_user_button{ + border-color: #435d7d; + border-bottom: #435d7d; + border-right: #435d7d; + display:block; + text-align: center; + padding-top: 20px; + font-size: 18px; + margin-top: -80px; + margin-left: 1%; + width: 130px; + height: 70px; + background-color: white; + border-radius: 55px; + font-family: 'Varela Round', sans-serif; + font-size: 23px; + +} /* Force table to not be like tables anymore */ table{ width: 90%; @@ -113,13 +134,13 @@ td:nth-of-type(1){ display:inline-block; } /* catogary */ -td:nth-of-type(3)::before { +td:nth-of-type(4)::before { content: "( "; } -td:nth-of-type(3)::after { +td:nth-of-type(4)::after { content: " )"; } -td:nth-of-type(3) { +td:nth-of-type(4) { margin-top: -20px; margin-left: 0px; font-weight: bold; @@ -127,7 +148,7 @@ td:nth-of-type(3) { display:inline-block; } /* name */ -td:nth-of-type(2) { +td:nth-of-type(3) { margin-top: -20px; margin-left: 35px; font-weight: bold; @@ -135,12 +156,12 @@ td:nth-of-type(2) { display:inline-block; } /* mobile no */ -td:nth-of-type(5) { +td:nth-of-type(6) { margin-top: -50px; margin-left: 140px; } /* Phone */ -td:nth-of-type(23){ +td:nth-of-type(24){ font-size: 50px; margin-top: -85px; margin-left: 90%; @@ -173,6 +194,7 @@ option{ form { display: block; margin-top: 0em; + } .modal { padding: 0 !important; } .modal .modal-dialog { @@ -268,45 +290,68 @@ label{ padding-left: 25px; } } /* Medium Devices, Desktops ....................................................... */ @media only screen and (min-width : 992px) { + .header{ - width: 100%; + margin-left: 15% ; + width: 70%; height: 80px; background-color: #435d7d; } p{ + margin-left: -25%; padding-top: 30px; padding-left: 30px; + } #myInput{ - margin-top: 70px; - margin-left: 50%; - width: 20%; + margin-top: 1px; + margin-left: 67%; + width: 25%; height: 30px; font-size: 25px; font-family: 'Varela Round', sans-serif; padding-left: 25px; + /* border-radius: 10px; */ } .dropdown-toggle{ top: -47px; width: 10%; height: 40px; - margin-left:71%; + margin-left:80%; border-color: 5px solid #435d7d; } #material{ - top: 93px; + top: 25px; font-size: 40px; border-radius: 20px; - margin-left: 335px; + margin-left: 300px; color: #ffffff; background-color: #435d7d; border-color: #435d7d; - margin-left:82%; + margin-left:65%; ; /* position the two buttons next to each other */ display:inline-block; position: absolute; } +#add_user_button{ + /* top: px; */ + display: block; + text-align: center; + padding-top: 5px; + margin-top: -45px; + border-radius: 3px; + border-width: 1px; + border-color: lightgray; + background-color: white; + margin-left: 5%; + font-size: 12px; + width: 75px; + height: 26px; + transform: scale(1.5); + position: relative; + +} .input{ display: block; /* padding-left: 25px; */ @@ -327,12 +372,13 @@ td:nth-of-type(1) , td:nth-of-type(23){ font-family: Arial, Helvetica, sans-serif; border-collapse: collapse; width: 70%; - margin-top: 70px; + margin-top: 3px; margin-left: auto; margin-right: auto; + } #emp td, #emp th { - border-top: 2px solid #ddd;; + border-top: 2px solid #ddd; border-bottom: 2px solid #ddd; /* border-left: 2px solid #ddd; border-right: 2px solid #ddd; */ @@ -457,15 +503,21 @@ label{ padding-left: 20px; } float: left; padding-left: 25px; } +#email1{ + border-bottom: #ddd; + width: 100px; +} + }
+

-
+ - + + <% if(aadhaemail == email){ %> + Add Email + <% } %>
- + + @@ -501,17 +557,18 @@ label{ padding-left: 20px; } - + <% data.forEach(function(emp , index ) { %> - - - + + + + - + @@ -540,23 +597,28 @@ label{ padding-left: 20px; } + + - - - - - - - - - - - diff --git a/app/views/google.png b/app/views/google.png new file mode 100644 index 0000000..12a013f Binary files /dev/null and b/app/views/google.png differ diff --git a/app/views/login.ejs b/app/views/login.ejs index d6bcba5..ac06db6 100644 --- a/app/views/login.ejs +++ b/app/views/login.ejs @@ -7,25 +7,40 @@ +

Welcome back! Please sign in

-
+
+ + +

......

diff --git a/package-lock.json b/package-lock.json index 68242f9..b6042d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,15 +12,22 @@ "body-parser": "^1.19.0", "bootstrap": "^5.2.3", "bootstrap-icons": "^1.10.2", + "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^10.0.0", "ejs": "^3.1.8", "express": "^4.17.1", + "express-flash": "^0.0.2", + "express-session": "^1.17.3", + "fs": "^0.0.1-security", + "gaxios": "^6.1.1", "google-auth-library": "^8.6.0", "google-spreadsheet": "^3.3.0", + "googleapis": "^126.0.1", "log4js": "^6.3.0", "mssql": "^7.2.0", "passport": "^0.6.0", + "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", "passport-openidconnect": "^0.1.1", "request": "^2.88.2", @@ -1007,6 +1014,14 @@ } ] }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -1496,6 +1511,14 @@ "node": ">=8" } }, + "node_modules/connect-flash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", + "integrity": "sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -1529,6 +1552,26 @@ "node": ">= 0.6" } }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -1867,6 +1910,43 @@ "node": ">= 0.10.0" } }, + "node_modules/express-flash": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz", + "integrity": "sha512-QVUR0ZZRCaa8+iPHoUQaQJrQWcQuK/Q+19M7IUIdIEtvwhrA/ifHT7y1CVJI41YfGiOQnbGtn3uvd2vOdgu58A==", + "dependencies": { + "connect-flash": "0.1.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "dependencies": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2030,6 +2110,11 @@ "node": ">= 0.6" } }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -2090,19 +2175,63 @@ } }, "node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "dependencies": { "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", + "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.9" }, "engines": { - "node": ">=12" + "node": ">=14" } }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/gcp-metadata": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", @@ -2115,6 +2244,20 @@ "node": ">=12" } }, + "node_modules/gcp-metadata/node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -2228,6 +2371,20 @@ "node": ">=12" } }, + "node_modules/google-auth-library/node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/google-p12-pem": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", @@ -2328,6 +2485,128 @@ "node": ">=10" } }, + "node_modules/googleapis": { + "version": "126.0.1", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-126.0.1.tgz", + "integrity": "sha512-4N8LLi+hj6ytK3PhE52KcM8iSGhJjtXnCDYB4fp6l+GdLbYz4FoDmx074WqMbl7iYMDN87vqD/8drJkhxW92mQ==", + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.0.0.tgz", + "integrity": "sha512-58iSybJPQZ8XZNMpjrklICefuOuyJ0lMxfKmBqmaC0/xGT4SiOs4BE60LAOOGtBURy1n8fHa2X2YUNFEWWbXyQ==", + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.0.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common/node_modules/gcp-metadata": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.0.0.tgz", + "integrity": "sha512-Ozxyi23/1Ar51wjUT2RDklK+3HxqDr8TLBNK8rBBFQ7T85iIGnXnVusauj06QyqCXRFZig8LZC+TUddWbndlpQ==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/googleapis-common/node_modules/google-auth-library": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", + "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/googleapis-common/node_modules/gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/googleapis/node_modules/gcp-metadata": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.0.0.tgz", + "integrity": "sha512-Ozxyi23/1Ar51wjUT2RDklK+3HxqDr8TLBNK8rBBFQ7T85iIGnXnVusauj06QyqCXRFZig8LZC+TUddWbndlpQ==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/googleapis/node_modules/google-auth-library": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", + "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/googleapis/node_modules/gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -2389,6 +2668,20 @@ "node": ">=12.0.0" } }, + "node_modules/gtoken/node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -3404,9 +3697,9 @@ "optional": true }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3576,6 +3869,14 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3671,6 +3972,17 @@ "url": "https://github.com/sponsors/jaredhanson" } }, + "node_modules/passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "dependencies": { + "passport-oauth2": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", @@ -3682,6 +3994,25 @@ "node": ">= 0.4.0" } }, + "node_modules/passport-oauth2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.7.0.tgz", + "integrity": "sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ==", + "dependencies": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, "node_modules/passport-openidconnect": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/passport-openidconnect/-/passport-openidconnect-0.1.1.tgz", @@ -3863,6 +4194,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4739,6 +5078,22 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -4841,6 +5196,11 @@ "node": ">=4" } }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5991,6 +6351,11 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -6362,6 +6727,11 @@ "xdg-basedir": "^4.0.0" } }, + "connect-flash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", + "integrity": "sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==" + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -6386,6 +6756,22 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, + "cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } + } + }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -6648,6 +7034,36 @@ "vary": "~1.1.2" } }, + "express-flash": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz", + "integrity": "sha512-QVUR0ZZRCaa8+iPHoUQaQJrQWcQuK/Q+19M7IUIdIEtvwhrA/ifHT7y1CVJI41YfGiOQnbGtn3uvd2vOdgu58A==", + "requires": { + "connect-flash": "0.1.x" + } + }, + "express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "requires": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -6775,6 +7191,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -6825,14 +7246,46 @@ } }, "gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "requires": { "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", + "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.9" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "gcp-metadata": { @@ -6842,6 +7295,19 @@ "requires": { "gaxios": "^5.0.0", "json-bigint": "^1.0.0" + }, + "dependencies": { + "gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + } + } } }, "get-intrinsic": { @@ -6930,6 +7396,19 @@ "gtoken": "^6.1.0", "jws": "^4.0.0", "lru-cache": "^6.0.0" + }, + "dependencies": { + "gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + } + } } }, "google-p12-pem": { @@ -7007,6 +7486,101 @@ } } }, + "googleapis": { + "version": "126.0.1", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-126.0.1.tgz", + "integrity": "sha512-4N8LLi+hj6ytK3PhE52KcM8iSGhJjtXnCDYB4fp6l+GdLbYz4FoDmx074WqMbl7iYMDN87vqD/8drJkhxW92mQ==", + "requires": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "dependencies": { + "gcp-metadata": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.0.0.tgz", + "integrity": "sha512-Ozxyi23/1Ar51wjUT2RDklK+3HxqDr8TLBNK8rBBFQ7T85iIGnXnVusauj06QyqCXRFZig8LZC+TUddWbndlpQ==", + "requires": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + } + }, + "google-auth-library": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", + "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "requires": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "requires": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + } + } + } + }, + "googleapis-common": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.0.0.tgz", + "integrity": "sha512-58iSybJPQZ8XZNMpjrklICefuOuyJ0lMxfKmBqmaC0/xGT4SiOs4BE60LAOOGtBURy1n8fHa2X2YUNFEWWbXyQ==", + "requires": { + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.0.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "dependencies": { + "gcp-metadata": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.0.0.tgz", + "integrity": "sha512-Ozxyi23/1Ar51wjUT2RDklK+3HxqDr8TLBNK8rBBFQ7T85iIGnXnVusauj06QyqCXRFZig8LZC+TUddWbndlpQ==", + "requires": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + } + }, + "google-auth-library": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", + "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "requires": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.0.0", + "gcp-metadata": "^6.0.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "gtoken": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.0.1.tgz", + "integrity": "sha512-KcFVtoP1CVFtQu0aSk3AyAt2og66PFhZAlkUOuWKwzMLoulHXG5W5wE5xAnHb+yl3/wEFoqGW7/cDGMU8igDZQ==", + "requires": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + } + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -7056,6 +7630,19 @@ "gaxios": "^5.0.1", "google-p12-pem": "^4.0.0", "jws": "^4.0.0" + }, + "dependencies": { + "gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + } + } } }, "har-schema": { @@ -7846,9 +8433,9 @@ "optional": true }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } @@ -7965,6 +8552,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8037,6 +8629,14 @@ "utils-merge": "^1.0.1" } }, + "passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "requires": { + "passport-oauth2": "1.x.x" + } + }, "passport-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", @@ -8045,6 +8645,18 @@ "passport-strategy": "1.x.x" } }, + "passport-oauth2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.7.0.tgz", + "integrity": "sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, "passport-openidconnect": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/passport-openidconnect/-/passport-openidconnect-0.1.1.tgz", @@ -8180,6 +8792,11 @@ "side-channel": "^1.0.4" } }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -8812,6 +9429,19 @@ "is-typedarray": "^1.0.0" } }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -8892,6 +9522,11 @@ "prepend-http": "^2.0.0" } }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index fd4b948..fee883a 100644 --- a/package.json +++ b/package.json @@ -13,15 +13,22 @@ "body-parser": "^1.19.0", "bootstrap": "^5.2.3", "bootstrap-icons": "^1.10.2", + "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^10.0.0", "ejs": "^3.1.8", "express": "^4.17.1", + "express-flash": "^0.0.2", + "express-session": "^1.17.3", + "fs": "^0.0.1-security", + "gaxios": "^6.1.1", "google-auth-library": "^8.6.0", "google-spreadsheet": "^3.3.0", + "googleapis": "^126.0.1", "log4js": "^6.3.0", "mssql": "^7.2.0", "passport": "^0.6.0", + "passport-google-oauth20": "^2.0.0", "passport-local": "^1.0.0", "passport-openidconnect": "^0.1.1", "request": "^2.88.2", diff --git a/server.js b/server.js index d03b50a..0420630 100644 --- a/server.js +++ b/server.js @@ -1,12 +1,18 @@ require('dotenv').config(); const express = require('express') const path = require('path'); -const app = express() +const app = express(); +const flash = require('express-flash'); +const session = require("express-session"); +const cookieParser = require("cookie-parser") // app.set('views', path.join(__dirname, 'app\\views')); app.set('views', path.join(__dirname, 'app/views')); app.set('view engine', 'ejs'); +app.use(cookieParser()) +app.use(session({key:'email' ,secret: "secret",saveUninitialized: false ,cookie:{ expires:600000 } ,resave: false})); +app.use(flash()); //it is used to clear cache app.use(function(req, res, next) { @@ -15,7 +21,7 @@ app.use(function(req, res, next) { res.set("Expires", 0) next() }) -const {logMsg} = require('./app/services/logger.js'); +const {logMsg} = require('./app/services/logger'); const swaggerJsdoc = require('swagger-jsdoc'); const swaggerUi = require('swagger-ui-express');
Sl.Sl Name Category PhonePhone
<%=emp['Sl.'] %><%=emp.Name %><%=emp['Çategory'] %><%=emp.Sl %><%=emp.Name %><%=emp['Category'] %> <%=emp.ContactNo %><%=emp.ContactNo %>