From 58ce2a053a4621b17e9c6fe090e0b40d6161d29e Mon Sep 17 00:00:00 2001 From: AADHAVAN <52933187+Aadhavanbi@users.noreply.github.com> Date: Thu, 21 Sep 2023 14:48:39 +0530 Subject: [PATCH] aadhavan --- app/config/db.config.js | 16 - app/controllers/data.json | 8 + .../rosy-semiotics-399007-a9066914a24a.json | 13 + app/controllers/test.controller.js | 347 +++++---- app/models/Test.js | 31 - app/models/index.js | 39 - app/routes/routes.js | 18 +- app/services/logger.js | 47 +- app/views/Screenshot 2023-09-16 170601.png | Bin 0 -> 1545 bytes app/views/Y4Pb2E.png | Bin 0 -> 90290 bytes app/views/adduser.ejs | 250 +++++++ app/views/displaydata.ejs | 338 ++++++--- app/views/google.png | Bin 0 -> 56292 bytes app/views/login.ejs | 73 +- package-lock.json | 669 +++++++++++++++++- package.json | 7 + server.js | 10 +- 17 files changed, 1473 insertions(+), 393 deletions(-) delete mode 100644 app/config/db.config.js create mode 100644 app/controllers/data.json create mode 100644 app/controllers/rosy-semiotics-399007-a9066914a24a.json delete mode 100644 app/models/Test.js delete mode 100644 app/models/index.js create mode 100644 app/views/Screenshot 2023-09-16 170601.png create mode 100644 app/views/Y4Pb2E.png create mode 100644 app/views/adduser.ejs create mode 100644 app/views/google.png 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 0000000000000000000000000000000000000000..b2165a179515e022a6826122877c50cd62d6c20a GIT binary patch literal 1545 zcmV+k2KM=hP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1)fPnK~!i%?V3+$ z99100e>1yHw@KPf#FC_er2eaa4ozvHm((g$(t`yrf`>@FC@7vZwg;i2t#~ljn<&(a zX$l^^2o>DgA{s>yEKLO4gS1w$NvN1?P1F3_UElXN@0WeM*_p}i?2-vPpYWJBZ)d~r zz3=<|d6QT<1x17gTVEqWLL^AYhy)24ksu)>5+r0qf`p7nkdRT6bI8nGj?$|A@lTeo zp!;5%TT7$G_Zx+r`VlPkQ){X!$YeT4L+2Lg@{NohS5_tVgUV|ui9R4rtEHo8dtAI+^2qj=#{n5IOYT9U444&s8GwA;wXBcmX^A z8#+O^p4!h1c6!;kRsxm1r@vjK&wp}477}-q=*%@o^pyUUi@U;>GdC0BX zj+S0$im^YPr0?Dq^^?RqPG}r>i5GwC(YII#fQ2xh$xVN^A_f-UzVA52_I^Y5W1sRp zd(QQf{G0#}5HVmk79E8M1n`=N0M8IHu;`|p0H3Gdc$xc^P?eAcR}TsnT5<*^*rX;3 zArgm=6o@jPI>*9*?Dco~3haFs*b}VQC&-3ZsC$S4L^RlmO#ra?sP-iHL6|=6sb0*T z$%iG_C3cFf0P}#Il@LgfM|R}D?sm|_L=n!4o9sp@1Z0tAawgb`vIBt#Cp#aWA&W0a zxB~DLJUca$51plQ9x6aTFA+Pj_^=bUAa@{#hzOO2D-cMKM?3RXRq9voBv_1iRhwP_ zS!B1#nB$qLiGnahTMESxtk#3N=WtntPeJllF@BYz*omtY9dkOFBYfR6@+CL%mU0Ou zi1LsKr=ZGG&!d14+`{aXPxuu(;VG~c_Yh+H zg`YWmxoxPm5=anmRD~n~3EEujQkW-uiQm9(+riiD)XkEjm@zrl)=?0maua8CuMl$_ z&zs>WHJ(4v3J}S!`Vu<71zNd9hZIbg}>7E1Z zlyg(1!c^_`yBxGc1TRFy;&_ckHxnavqa;xQ6__M_E^BcBl!ZqkSBsCciAnrW-fMYd zjNDzZQ$p^fO8BPjUgwZ`#}&d7f(E!;OC2pKd_6e z=B;XSmnb(otHM`)mto?`cZLckX~kPu09}#kOpq{x++pSu6TH^~2v=^UaV-g))HfO^ERgHWJR)FRSgSWz zo4WIm;=gVpZ|v@}XQ&T(E(K@;_btFQn!MHmAXsn;fCmc0A~fa-STm_00000NkvXXu0mjf8!OsK literal 0 HcmV?d00001 diff --git a/app/views/Y4Pb2E.png b/app/views/Y4Pb2E.png new file mode 100644 index 0000000000000000000000000000000000000000..6838733558d4db6b9a3af3649ee8f36110cf5543 GIT binary patch literal 90290 zcmeFZWmFd2+BHgdHzJL6mm=LE-7O*A(t>n%cS?76cXtWWNOw2)hdx_2@@jv zM3_z}SIZ*}4Q*upFa&VleYLKFKX3x^0lZx`pnIp2`+$=lP%p7|og;z+(qPo$W-@Wd z?*NiuG2b%d>I2{e$lZkk056qWx>G$L4j**yg)dv?M);ri+Pyt+UE}U^wYe|4E(55w z;`0K60g?NsYmnWpDu9muIGTaw}8_nfD-^v*K*@}`xbED2FP*E0dzeyTmm)_AAAoC?%o0bVsEEf z<^dM~i-(HG|1q=-u=RGk4kD5oC4Q}mk zN)7>A9|P}v_gy<4R9zjfXB)Z89A4ge9+sTD4m!C$oHj3|J@a_rzvsUv+r+$1{q(X= zH*}JCVX4t|1%Uj(KM#4reGbSzH@RH8Og-alb!FoWIb6DHd64>Y=tj4}z0k7l8V(S= zbv=iE@CAfkJos?6-d9~AKDa;NPj~_VcdqW-4fp`Sku%A|v?~A*0!bh^=3Cc!atvo+ z%Q4W&kUV)xhtzE^H`vIJy&%Q-|Nr>^6MM2NvhrU%BuZ&8+`12&8id9?X6v?4bO0y@ zn7NFC|6(vGyiPo_`$Uhr^9)EKe@5{>5fO~zHi7fM7>|_&$4OE;(W1>jC??ge7PF;C zSz4mhYEdr)XsCU8_FUP@$Jxj)RoJ~(v4(dXWBqj5^ENaIgAQ`y9ekMTQ}mwn$FC*c zjgLzSy~s|DIQnwWA=R>;G|)DMKDlUftQt&R9KYGqzS`KYZS-GB*p7GG^Sh?f#?IKc zHrSM*Z)`AZ`22J^7%RmScy~-KM*iSF{Muvh!dQ%#9noW~XF-f^2Y0Nd-_!IcwTrG8 zcm?af6DTw)ZV4@o43;-Z3x8k;Q4o(&LgK#&e!l7S`9y zD7gRH3!(n4>2-iTBjTp=&$Zk#C;P(*%$`>yFiZO8y%fWus4)+ri8k&gV93jY&mT2g zSj*1V2H~#VMk$qJiI}QzV360FKQQqQtoJ9M<<}iI}{`2b$GFnIM^t z3qiMzNoP7H(e}l!Gc9yw#z^8Xfan>UUdT@+ybITE)9hc z9>Ix$?jhFPD`1|#V({tf@~?pNVO&*l=LK}45XGKuzTQj6;wooixi267e8QwO7-FxE@cq?PdFhC+1Ym*jq=w4G#l!}Seg#^MLJOOZWr& zb3}bfB5AKb56OV95sM$F4f*zfBE@+G#mWTty;z*+jLXfFlctO zyO4F^BM8v}p;{jD>-R>5>n+?aWN?vaEz{-%z61N>0U78)y#Z2qS%pg5qJe4qzWn_1!^KlQJ_0d72Ja72=0e%8; zZPw3k|)&P}2{@`S#)D zm?xSXyS`PG!uOQtt+_MRe4}!^C(umlKqrmldl{z#!wk9|n}I$wS}Tt4GZvFbF*;-{ zVV3PvBS(kxuPG7pWMc!KWoB-K)nzMmb|)Z!w{ix2xY6$b^NqPBw&=)=Ziz#5cvgEb zU8TLsW^AQzI-LZ^TX*}uHbYT6&@LiFn5Rzau6&i|A@AiC#-q6I~4pl^b zoF+r}8kn(7bRFk;ygRN~dqSA1j`!%0L$0}K0!y2yUawejWNup6iE=_@-tkTIm;eZy zFl|%3HC`1@BKjnr=EZAZIVDLw<-o~I=snDf9|pda4x+P62C!;YkT$+*6hN9!_2nKc z=v#XK`AX1S`DN4=dC(V%ze#?T9zSH`4BfzfNflQCHB%ZITcnd$pY2>~?Kxoe`?@U%vjL4bBT1CctI{HxiC&>%c4cj2W7!vWTME>8 zzkkI>el;eY_t_Q9k(9|0whdM0!_4C(bYy9BAMDxHL7;6c5jmHo<=FOuy!s@470lud z_S+kBKLi+vl&7EEV#hwZ#(-wNRd`AEIsS;TLA3;_O3U@lC9oQ8fmQVGdcPFg{llZq@5YVE)Nq*L-^_c`eTW~?VK({fv6Fx6%T_6(RF zAam|&@G+)Z!v>uDE>A@`70qN4UMRsyNX0Vq!Fothq`r7|Bf!TaM$)o@w~0E?Hbe}b z`5;1qgnoM_KbAiR@BMXuBLW_7$Yj?Y!xS`j`_J$&U{e#1`(&kj&chy9cP+$n2W~nG zO7DHu4$g5!5QQdlMy2Ve4oc3o`$mLZGz&URgpCn5pDuWRZ^~#CS-HVj7V2B0Btr5W z0E-5IvXs0h=lTThS=ViEbi03W>F4U^CB+P)a=`lAS+ z;jCwyt{i&~^DBhZdoeySi%uX)t~Eewx^K%qNHE-=V79pmr5<VaIi9EJh*cCe=+?#t`6+BR_sr&f1!zy)k@T>_Z#;CKLlG2cbiMijaC(x_A!h)*B&-*~5@ z&5s!|UH8a_d-6v_)j6`x_2ez*$hjSsit9|S)m6vbjYazslSx4(uT0kQhn!XYv_hVt z#1*D5BnljqTM7_KfixqoIwaL=b}U#RD)n1}R9K-f2uNf#M>gl1i+0Z_y!~RHG8ps+ z(LFY#CsO!!GQloiw2GoW(5hc{AbxfRtz;Zbmv5Sik53ueYDFgzr_<#Ndq)C#Ymw*< z%iBk~8fiKKj?~Ld70jACjyV0q`aX{4{PQc0?kDHqe$9H`dFhWFUnbVa>fN`;6&@3J zK;wu-hvQ#va*>5osg@fTgbYhmio`k}SVRVkgZQsSy#7G`{bMTBn18Fh6jbne76@ElrpQD^W-{b2Iyk7yljofx%~P%7H79|7C+`=Y#4p zR#6d=_CQoJW8;NGkHKZ=g3R8yW)t*^*zS{-$$uQv-|1OmvU9zozI`|FzDhi2VYd8;BV3qX$|;3mRos4>#N6*N@LE>L}SOZ~~t@npO#INkA59%D(z!4;CIz3=5 z{^EsWb*P!iP?I9%m~{%APV9V;T?#Y-eZe3~mjNmSM^0zY}!XNAv!GPbZ>GPC3O_LfR-T6x1J(^}d}b{x&se)A9loDS6CP*8*z3 z6D^E^l~aE%+Dtb}mnmi7$@BhA$^wB}IHF;Uvl7O7dS0L^A2a!cz!9cD1}6U{VkSgu zmiX@-$mrX>kdksdXHPA&<@Y7-TOdW#;9j8*g&s^PE-XtTECdOCo`v=}CVET*q{;}d zA2%xF(1s^D_jyjXB3R&`7NK&Dobt9f9>kR5m2d33f@q|43C6&a=_U-y+r8mz=qTj3 z`A=WO+u~X7db>ZKwe|t4Mnx6zP&!gB@n63dJlP}+x1{{ z06dJ}z|k76p;B3{y5VQ9e9W>OvUnLaYsw1L6W{Sm%f&toDZ0R2^iNqz&bkWX#eWiW zV-5R7Xm6$V_(2i?ONC?);0U z9^#-c`1;>1260+Geh^={&zY2?1wD>}0}W_oWO4Gegl-QiDwuNjP`Gk8lAzn;a`cI;fB$l&OvZ^DS+Q6Pj&AJT41G019>s}DncI-TsjK@Z+Quw>_M}( zz5INm>Jx#%NDiNjGYfpp>k_NIw1Q3`Az!gVGK|a9KdbC~pxiZ=)CRgl8f;U7u=D$D zVy80z)ikd_w(eM*&IKP)SWA5fKQ zT!k$k`g!aB$$~APM&GQ>qYCOv)=I-ppGD31Y4FYK2_PJ>YM;X#z{o1X{6`AvJmm#6 zC=JkrCCTcter*Sz*0VMheNDumGo{0Gc^c^G>8G`a{6GeO2?$7$lXte8Uo}d%O#>QD z*nlf%G{?{6Q(wmdnSz?*s+Y7&5)gkSma0Nlf|CaUxvjw6i4XbI z%poCnfW=hH`|gxd@4+AZj<`PP@X3k#e~>yHG_X)n>MEEhh!-Y#JV@ygnxiMDU?9NP z8AtTnlOMpkH7~9R0`~A6c88e!lpZ1xpj~ixkJ*-7jJw>IXqSBsBOZBK&G6N;5MKW2Q68N|%Ds7GZ#gEUzb zb{_QZk9vyyf~f2wH%N;Q1(r%R$$GeJGp-=b*YiB8=BUMG#210Noz)w&p6wfGW-Jcv z`ySMNj+-(m)Bz6IrrnD|UVFV~M?mmgb(oKoF`P4$hxShn2b7>$GY{L1g0>97x>;)* zoHmtrxpg?%GQ3bj2=DuQ^l26GYSj>&$*EERCx!yi*$Yn77}i+Or^WE1`!ZW(U9B$n-;o`tjcI#4rib5^G14ldn zfU14-X4GMsmD$#C=L&`UOq569jRcPP1dyvR>>mUwj|#|=UMZ(3%t=oYBQFNO(1lSr z+$X4{IPNSBbPH7Ja|5E{2~GzdJVSivT2lES?au(kc1qFABom#K_97865c>H5MZ@sT ze51qTWf8y_2}X2n;CkuY0&U|rK=>!V8^fu&J zG7)WT1-)W{)RCNBW zo~`j}Bw~|0;ipdo>3f=%fymyBv79%c@>KGQvQ5Kh)=zaS{Ea}E7wjKgqXe7wpm1g@ zSkm8^{}PWoph|7f@ifd|$DIOD9WX5tN^rW34!(Ow=3-N4hUYhKaW@h(SKQ6mmQK)Q zhG=yuN~=R=0u8vw<6sKC@r<9Mr0l19(sYR=Pda`k1UUW*yAR+2jdyUZ5}k2aogN0Y?QVh{lJI4`Iu9GkRoWOfad2qdLW3t|rSWmYi15f(R* z{a)X^kV9}_YJ0?MwOX#vh?`i?I^)PmCPO(i$$6fg{l%8JdprqLS49MiKW6NM%oV5X2Jt7%cjAkJZAmw<-n> zm6$n_L!iTu4`a3j$7}<)wXT!UX47p@N8pE_=pT{xKOQuBjBIN=B-Es#;&)xhKSp-e zTKbk#JakMu?ElJ$+MKA(*Sox%jrU$aA2!hnkh*Owp23>q!oWQ2XgJ;&#ZO6sE5vt>>0 z0J?-R{mo&^H|hS)9YegxPxm$1rqo*|E#cL_#o2F~TS&ccsf@+x{iLJODg&k5_dYSdP_z0To2 zlJDOg$F_n%xuGh2GmsMPG5$N7!Wvj5&k)gL2v2;Yna`25A-)U8R&`+1SD>)Lz4@0W zl20k*)^jFYy*|49+JV6@|ynlq%Q9`)Id^CbVU^VC_~V z;gMYHaWu9XAfgM2_gzoF>DrIX^KijqR<^+hqI~;z++wcO?S)n!(k9Rg7cUc3CpvQo+|bG)|PN>Ka-T1gCioj_XzMtPHNt!%MTMJtC` z+d#ff>+im2IQL?lTy-BEWE!oE_t^Rqx=?&?Jj_Utl+p z%M;xT+F4#(vC-A4>=akfA$5U{@9i7eANl>i5n{k=?=TPeK5?$qaFcBPSy&?vVQ1vmpcVVG|tVwYkLOd>q zXZDYFr7n(o?3~X`IIUHRK~n4AEO@VXmENa;z08#Oe)##ZI%iaGLm}oZqnzw-*#m;Q zoNtldsVbyS_RVB^aU|M0-SxsG530$GwSCNGf&rNokm>me?0E zGy*x2ctsvhBJZlS3AVtfYBNdlrfFoMh5jwWNi`IYK+?;LquNYaX&(Ru1Hfcj@1s2j zsgGS6Myo*uf);oueni-t$qUohPsN7jAa3kGhu5{2CaYVx@po2&Em5S0M@9YoKq;3l zL|J|T9RMiZXt&&nMk9WBDDYh2;#DZ1Rg0BydNKE@D~ z`=>WzFSrb~tpJaWYiHwAkoHlTRpx{ahc(qH_@E5VNaF2DGhL{?-)>ST%V5A1Te%Gs zV;3@Evr5{>@y8C-2)|cBXS?)NmtJyl&X`0|Uzrj5jy~5lY>AU3O|r^ZfthJrH$EtB z@ukOkHL1L+p=FW4u7HrzGROn2P#*~o@qCb~`60=a)2Rxn&da0Pa zuUISFUXogUPRW*3&cL^AJ^dzol-`fe`0xHvk9Ph>gA1u#t*(-gwF2|^32r>A+*{mpCAu?s}FdD!(dlqXVEJ%XwBfhov*Hf7$#(Yw1MW1F>i zTQYdypbdLPv(Y;{cXwHmayEju*rBV)h zAI;<``xmBZ7N3tl6M40Dm8T@NE^72|5)Hxo`vFls`iwY-Ni`BuYt?mox+ea`cM-o< zqK@+p{Y?b=eWINrRe6tt5szfwlajBqm|kZ=ag2TpbrJ~=Td zGOpK^pNSIW6Bj>|!VeVinuu`t%#T}E`rCcF`e3iR-riyDeT816_(sqB1_3_+KaBsWwz$RU`Ys|NHl+c%qP)5U?sdR9& zLyI!ouFwsmTv8ek+opVRYD9XvAQ^NB;iunQF4W?=GJ07Uu_-Stnl< z?mE-6H)nqon|rSUUMQjg(`Bueit}7;Dv*7x&|c2>@>MgKt?O z5nL|#9uLNGIv2+E31c=8{cNk|zu2qaV0r%1Jzz!DX{7sSxGM{L&)*)te_ zxFW?qjn@pzY8iBQ+<@p}U)vtjDZjcld5p+s+?V{SmXOeI=3#%D0AMGDe5k(1@@lmp zF2B&G&8iwIJi{?2&yy6_?~|GF2c7)Z%U8*JuuRW|XCy6{-n~;4&yb>20CW zv4NXDFdg}R+i2Os_iR%(duzme=BF`NS~q4TLN1tN{F_bk7;bNrL-&1ck}zf(z_*$xUxj8G zd^pgkslAW%i=)`(73+uVIyB5r)-FNn0w*CU&E_kvp#8Ku`9Wol2<-9p&yQyCyMzC# zZ2H6Fr&pl5EwiLBerkx1iv1XhaxF`c_~+sWN#ZLpsI(FwoJE>NjZbBqnim$!!IgjS7>!9z zjyKmld)!)v_nE}w+GaL<-%HJQ$3h8>{IZql+n_%M`K7(YMr|VHlZwpo->7d!cp4X& ziyX4ZC<+JwV^!YEBTzr}$NRzu5zMg|=<^w|vS|})u-`G_@2}cMHr{)&o}TlDhHDM1 zRbUKO$LD4>uI7O-6wNlasPvH-bReV2XpDnP>#ua+e*8pLx_>j@>)6AvTGFPZM?@dH z?{D&OixSLuK3=}=Gc+uzAF!in^s`dnp)*w7$V&MrS1|=qax1 z84)YWMXMGU5vjlLe#=m4wZ;rlhF0!4DZ^dj(Vz&Hp5;KaDO2ZqZ&T8kJC%BJ*Lj4h z9UUxb&eL!4_m83LN%_jD2EL;_Ks1d2gmcpZ;HlMr^;lpD3pr;4;OhU$7yj~F{tvca z0VWh`%)U0xS}wmpaiPv^cn+7p^bL{m`V`f8Dt1B{^o^s_(RtzFeLBUkU!FX!CeaS8 z$CswMZT*+?LxSXMq4UvwY|SfD+oT_>gpdv5zq1=Zn0Oiz8s8Wi5|Dn5X+AJmJ&+e! z5Pz`;1B)PzAa-cr*7n1yB4NmDQEU`;woNgEQ(wEx_yshGbQI zR_7am8I925OptXOulW?3_#|VC&S}ScO8L=3kC=FNx*mGv_k5*ViRw_MT6gm!BXuIz zcGmvo$u0B>_*m7;*zA*Er8Z(Pvz+E&UrFvbh!)Cp!0+w-B(xd7F~2NgXmdy-Qi$4@ z_H;6{-V^nK5CO++j}(dPwbF^jzQ_mwg#rup3HS~jo71KgKT-}}tk$tSV{vIzij}yW zm1tf8>N}lNO%lZ-mYIEIY(&)%1Y;5pbm-<~w_yKy`New8*|RsVQj8daq(}*W*p`39 z@S6;uVTG##`$)j*h|#R&;trA(Ug-E3agz!>QSLM8@yPaef9nH^$+>Y_QxUhnsKVa_ zYD`dG!lUQ1OK1oV*i?L$g0rp9&**QK+jY&~*m%_EP=nCj6sNS5r)VrHragA%fLzIv zaQofcBnB+|`)mfBe<#AMC`FQIPL!1l9aH6{7lp!xK~BFy25bjB zju&yCK>f!H2^@Yt!hC z*g5&{32*=E`(Uuz0_KlI1CuUR0mpQg-i6ql~qQ~P=1f}f?Ifc5!obAFv^^;0I9y$ zOoV-Kzs(31nfwV>DDTyr$^9scjq~i7MX;$1>~Ge$M3Q5k`i%hl6$G~6$3}(5SHn9F;>4-ZWa-A?ni)IaiK$0)Kaq7n!jGqS za4HO=F{82j4e$T^>t|Mw#9<#^nZP~8%{PotWrz!H4Qgrs6&iRUH!=It$|B*P;(31T zeZMGr#^DlSy=%j#hIc>S2l!sN{}pJI8ZbzXfXm?TBGvEuR;GcTDUH+u;$;G@YT9rv z{akDCJfdh6SKSGJSz^Gah6O8xeH(a8edK?P$A4$THOp^3KB6}~LC4Ug#DP|ujwWTS z=%UcWF#oVIhJVaKTX=dD|1-&|%#O`IM;w@S3v&Hm33)#zXvy2$AHnt;PjNY@lp<(d z1_unxc-7;->RaEPk-Zpjqg0m3xM?r>0bl1;z#Wo?>9@b8ANeiZunqo-x$l9idAh)m z+!?z*@+|%dMAv!VrQ;$|MJYsp$i>BxJ8cHJg&EMtKzg%{yiS4VQiv5lp=~rBq7HQ_ zr*Hx}PBr=9zlE)=8_6XPFz#bbC0`av?kji-mW``qyN|WDt^{yXQ{e9A?&otc+%@B5 zHD}R@2g-|%p|Xhn^I?lLw6VJ{yUXhMm=($Yo@;52Nb;-AYv%orC`C4XHcj~_yE#``N>W&_OMNL z-}}zx3%h2VRi*t*&F_VQHe)o$tl+(^nog1wZ6-X2IqDB!^1pvNu`(I9(Dy}YyuwR; zXu&X>gpm4ni^}ZNQ>M;F(KAwDD0aw<7mUJ01CYOP3_3ZcH4)A%3^@#!S#A ze9UtfH72&8-+f_1e!EWC%PC=>5E9Lgq3%@`lFd;}C)5O%bnSG$@^LQ#Us1t}Pi{Y- z9MR)cU9+oG%&*WPSrnK2$4ed2D9_njrKi@b7p2?rgrtJ{Q;m%5ZW7_cA7of*^Nktor2e!+*P2>rF{@G`T;!O?FSS4zl}?q<;bb2kjoZ2$Vt%^l9MxVMU~H=`kXqc zD7B74k`(3sPKMOxyJWq~i@2B9iWm<0$CcuNF`^h)SWt$wWGTjjFVp(czug?7$ze(Q zQ2JKb4J<4~fD#DnNRAT77O{iSrfLlnw#(UA$}U6$x0=4G=0E0226M|rY~9=`C3MK0 z%wMG@UuZG@ME?}as$P~piBV?U%gUc(49T$fk+tgQmBRn}A9(41XqSN%om}$djRMnt zuc9eUGa~K9q3vz0rS#&ul)~!*<^z7y-Fev?W9h%G^O4^3w$f%L$tdaibn#6G{1+;s z6DC&D`#`inK@(RhDhBFGKR8dYO*sNP_hgU730KTuMxGnQce$4;XNdTriM zUmMS4c^T2e<8KS=lsUHja50#FHy~{}NW&cK3BgXXsuKCHWMOvw`%|NvX1g;>6K8cK znV0?zLDIZkjOUFUxi&zrg`fIc-Agu5LRfNAy=T!&EKkv!3T&8Q7!out6%wBH`d#ms zh9nr0U>XyG(J-`0NJ&T}sWPyH{R(EAqdcF*bNbPL8>rS2fkc>U92-81SHzC}5|C`x zu4v0sZcA0@KjNlGkGXrFzz{8G1@RJj{$7=N9A^B!T?QeBetmxwbhPTG1~PP^v8Py* zJpQg?+)2Z7dr%9uah$p6ZM>X!5hS+P7wbMB@!iQV6=|USC{O!;qJ!m&yL@v$y#fmJ zd&Mhsg`aiQUQYIKCL$L{(~{*AR+{fETCb)HADaBF;>X`D=>(p>+_9tWg=3Y&p{xJ^ zuWx%>vCn&iY~3~o{nTLgOF?CDF8K$f{Sl=x6#!?#NIZsI;WL7o5Z_%Z#ATjDhQyc`gat^U!S&81|5*^Ka~ z7PO%u*yt!X`r)qQO1dYmPK``EWEz>DQ%dif&h+N7Huya1gn^$5)EFbuv*5+T`)+#^16_I-ygHeyRr^Iaw49 znh><1dHeXR4wtEngZ2^BC2K(5yb#*NtR0WqQ0nB{?_HnHGV#QE3bq_P;zyd{Xt=tE zImh^u#9AnOY-aqV)t0xRozF!SwO7nij0Sc(+L~j74m;0gf7AcH`Up+?b*&yLD3+#Z z5>UoX75SpLk$}@sGba(9w$TF6sre8H9U@c(IM@&R+21Hp31f!i23l^x>z&!w>e-u9 zV4eqi5y7DfW&5_}RlWN4LPTOzg1?li=#3%*wwoT@Icc|+x~9#RU-uvK>AXusqv6^! z?{)y30vI5S5h7K7Gcy30bQxnxtCvezZDm<Tb{#i76HO_OjW=fdoCYtr-biWzllnn!UaG{NR*`fv;@TE7Bw5tI(=AH;ky zv*lTlXilWdJ0YNRqqpwdObHG&vm8KntFKly)o)|T4E$= z02B7>szB$i_hUH}ned_tj)VN@vhyN@@zDLX7b`xRc723b*uX%vHy45%YDf;n|F_}$ zf8wJ+#^9NXq9D(|cObVy9sS7WC0XYyOy+%RW@|~!|ICrmup-r-{^RlYPTKB85~T`r zGluO@50SAwF3t93k5@w=0q9$WO(c-<2BHrnnC zx~qo1BiVxPz4+stR@UngPNLtx9ShBd8^Q3MHNecNF4pa|ZR@yw=;VzdfGWGsv!#x~ zH#VU&_%5(EshH+VOGhd7s}=TkbhcZM47oUeD@xKF_B*!jHf%(&6|@<(SD$ZgRzr^# zfWG{;#aqS?(@oG^NfuN7eZ9{KZYu8N!L{uh5~rC1E5?y>WUJy3c;^}n)riZPuUqDu zxHG}8-8Q=@Tbi+wWmX&fj=pl^ zGf4V^O%Xrjpy6FAgO|YYzB6OTd8`LR&Om*$NL3duz+jGcqO^QjA5r!I*ESU4%J5~& zS$N+cK9mOndN{rXY?4vGa%AIP$5@a@v67Jh`tb$d_U^~G|M@2fW{0PiAnGVP&yT-@ z+&3T8xXj&m=2%+XUi-|Zb&BRVQpz2-LEMr|UTA}WIuNPSn@?9T5F$*7y-*hyc=t2l5afni_%! z;d4EtDeS!3QP!ReDoFF1<>Pk)f_wgB%50Q)c&89yDErgUxDP2sEY23ypjAIs2c(;7 zE>0({LFN6HM)WHoVWg$uwg-}G%O0hBD5m_KF%$GE$g{jcvMg-2`RyMFsWGi#|=qzyVt03lseHalgE#ZS`4)I?(246!o{i!yQa{r6CPmP@S_K14c|1{X(}5@hoo(~^axBh$hEA4K=ZbC znV@NcNsb69uAX>#vczJIohSBz=PFv7Xi+-!kB3lmlzS9XE1`tW`oBj0e_S32P+B<4 zT1jP_B=J&Pk9~Xa$rkfUusyQ_A+OZQl&2Bz`ywV@Sz6W-VezskS04B4eN32vR3ka8 ztJfQD#9(W(3-Wvz0`q2X-$6c~@i^AIhj|A#UdcC=0m-b359rq9*CjdPE(V+J%%@^? z?HLK@J1k;XsRZ&KediI(u&>{Q8`&EYwX2MKvt3!hot*zZzkAuY`k-Shcut9m6$Y@s zT}0{n`NwI(bE2KW?OQ+kk^El7G^*-~=h|pGt@>HnnB zB#@N@LdKWsj8zG1j)xsG~s#;3x<`rF1 zyh$D(C}gsDKJHy`4<&WkL>!qc^2w)nVkwe5x@~7LP?% zEj5JYlhUx~hj+b#*;RtagtcM9K%>_XOzXp^#TzoW4d@~m$w7y}k#lFyKZ1oJcH|7& z5?f1T$UFZm(W^t$YY&I*TKgo zJ6egXdo9Zei)i%kfBrsLf+D1duj!QXipb!|d+%tvRpxeB7rTsGY}ccjnr($lg*3C8 z1^p1y4e5?3(l$^1mVtqVDCeC|g9HkdW&B4Rz*9hiUQ4@S9)w92LKmF_EbsF5q%G)} zaX>M&7i{rE5mE&4>PDJNpO;nRRb&(gwZP2vFsKI;{P@853fKeqC9&e*ndw~Xp7E6f zJ?3)y4*E-?-7U7ZhvB_!xU2&11Wb?aS58^dl^WW&!Etl+5MWx_ff)eY@C1I&&-o$H z?2YXUVh}M9Qxm%$42yRkdNPMM%Sp6YDVZiY=E`h`tM$JaycLaQ*xG>NcjQ_#FXh>Pbwf6Ma9EGAs_vl&e8~BD^<_I+!=@{pJ#|0if&8-VUij! zqa_zGVSk!D&1E571>8%UZ- zzVl#|zZa1C<;SN6X422@#G}o=_L#>=FLCCHOzG9pxs@M%kz~5#4a)%CojmY2{@#N)%{d(yS;ma^ zB_}0Kj-e8rKxELaij>`rI_v9S){_lQ4?@PO9wvTEZEs!^lD6 zu4sx)^j8V-Dx?=#CeXC@5EW}2$50`w5G^ix?(2qhq3W3Xr9c;Mg7w4MIN4#0BLPbF z(L+bA?P?df*{X#>#6anfT?blN-r;6oVTKMB>n6d#nN>Gt%6X~Lip=J2samFBDdER7 z|K$cD9T`fgvH$uGDR$FY@j0)pT9#LBok&wlOE3I-qW0~J(rZnLOq9gRY|UZTxhbBA zmf?B%&ApJm;aKYq_vZ{*cONrEjP$0aHs;k#`*hi6GLrq*1d;46_im^XR4Z_(QU$67 z0PkP))Ks2-TF+D5+w@<2KEjx78`p3nH?CkwKJ`(ZXmqw%dg%N%JnB8<#R{NJq2vAx z%nA!kfc8xIBR56M1%%ODdf76{K$s~g?0&vWolCBwQSl23_{s$vMV0%H;IHQ^MDXBRtR{l}<$c_vlG_DtS^I2)2e~r`*)A}3F8m=#n>|(wN zmUcaL6$GCmlsrV&Jxx&0&61+(R=R)~%~jgZFpe~=i}9t zs@}ut)XMN59=l+8MsVa%}l;?tc_?j9q%)N}wKbA_|Z9kzSSffxs`JBU9hJ~>n721)%+ITYR0*zp3 zcy;|!{gVAohgu55x8|L*=3rVcH1EQjK>Z==i-qpK+W!QK!5wHFt z^+j&AX>KOR*a|sliU4-t`)gG%l-B%}8bNGMNTpyf9Ws<0!X;V^m^yTovDNWKO0EWe z=^Vd*?Kd!@VHHPe6j3h7;c14!r)U%wL0Q}Q`FhU>xc2i%6t-{z-WDvISwJ9|yID1b z%mcj3^*!|D8_$iE;`C88Fr|!wDQEV=+pIT^*^|zDt7wVF;uj-5V#-hxjr{QvlRfMu zIiHWmSmglY+J3Sc@7TfVODVZYT&Ot)sS%4I&3D*pmg4(n==2vb`gKdc$;8-Y=FJN&)}^kJ`luvv7pQavUa9P_ zf!XH%aD|!*a4&*On{~LIqUXHW1V5aBHN?CeYn2j}C5lPl+!^#46SRw!-V94w`jnZV zJ-}JgV}W3rGgl;60Il=>Q{tA*_2PA18rlhj|I)mVmPE=Z4C=>{h!$yB$6by}h3s{U zX~D)+jhFaqc$)+L{AMO1uK5m_M6l+qitwuy@zn-L8xYjiY|+Uqm)x&3ai7|bAp&7yafQsu(ljH}zy zxtd)UfxsJkH@}VB$OBzl4&AW}iP^_AojQzpIU(EnT54w-iDhl`eZP+cXR?4pd8GTC zIimLLI~-{SlmO6DL|Txq;0erFY?+I2CUs7}PRB+VcQ|!{C9g#I;>+5ZDM<_|q&FM! zYefS;ihG+>C`|6#KcA&G2P#&KItH8Cc17&w?Y#E=2J)DHM zTp&%EtoaC)bWX$Bre3+u(r%Q8O5)8tH85NnhiLdA#*@+V%?*O+&HPI0+_7oqwlh~{ zSo;eL2Xij=?w0|`yKF6SBr|ag1&CTgnmud}ik-c4N;UWfgC|C8(#`0ouVTl8qPFp) zm#|&3)%G8Rw22>}(%TV1fj7tPTbHrAvE4n4S+*G;OTd!$YYtVlF5&4B^5`4cAH@KO zlo)MZ-e;Ok{ty#?vEb~gC{dX!ubT9oXRzsLXeddXPzd9ALf@?w?VHGE=ka0AyZt#%m7 zb~(H2CdXkH9;fKV4*UsAxxpaap^AWJ>y%9VjD*f5z5ZCsq7xMHbxj*%E&eE#V<&rl z=-Qq97~D`Yic@VF8A}Sjr!mbdO$v$v-f2RONbNUAxsC|#JeEais~@{18L>o6sYTJO z$2G0ara3%ss<8J7;pdG76R57qF7`Ofbva_d6!Ao{*55~9%Vt_K_4pqi4ziUr6e#Ao zkSTt|@dweAR34DgaSKjBvFgvySC4igpOVR)>Q{mHzr~ZYTU&ky6jAXK>!Y`*fGH`+K6 zm7bsGu@2etV}0j73<(DE&P!svN&r&X0$nqrV0D1!(9c?5{n~Ze?&an`#BU_hw#$X0 zVXaylOU`u*J>?jpz*~t18H2pMTYuT8QM3L$9YvQ(CvFjDd z_o6{ojs|SPl}2=)(}Sv!tCtr(2UjYexM*C2%1j7hg+3|?YpUo1Cf`m%Kq65B%Z`a0 zOKMG~18u0M=2D%qdm#H*zBQG=ywf&jj$O&kFQkzD=`|mf{cK4ZT-9VrWiSqWqMkeV;#>BFA~rAd^_F&N8skOL3`$maBzW62?u2_KwAsGJY zG|mmfpnHsg^-^cM0{aRW1z1;*K>OVi?Pn;PHS5)o-TlW#Cw`|qP&zIXavFzb)??G) z#fCgI-pJ$`cK{=$clM~H~#f^ z0MCo3F2WScYs&^Z9pDO&-6aBQ`>>8@Y9ieZk4=#R3Z7KFq%eWV&^5wAz>LVLSd%sa z-hOSYy|kJgd(3&v{&V9u=0!Z;T$R?$Sp%$}Pog9|Q{XoBMJ60}oid}{bj^V{fJC@y zPk{_t2@28^&ZySsWwcdnv5fQV5KA7d#6wgYvAzFt8h|W?1M{6?nu@&Px=@&uuA9vI zG)UoNbR=B&$R22gS(SE6zVxi;auPlACTA9QJ(+p9Q66L7=k4rmkM9T=Ut_%sMoat? zb?@IFGtfb@1%Z~Q`~4@!JNuEfPojEsrPo|-Bb+f*-5~PO4O9#=aM381%n#B);x7)3 zQAG`EDiwQ@29VV}!JkYmlGW%^Zk(Pb8D$bNa%``5SNqI8Lm6)QHl6az&#RIbXloeO z-uyq~HxV)C6I&Gshl}}8?N^vk_8K}GZEH7O7Wu~ap=|sQL|F~VijH%GSG~mM!nagD zP4&;&aD8M}XI9ibk-?)OOg&@|3g%lOje=~?#O-Mj`q`}mWWtvHl?r`0i@bOkXJ zqLs@&tYa_)7mM=E6vEP81|5j9?1%kB5s66e!C22R-mna?RgK~y4Lp#80PM@V=@i|2 z=@R~1CClhsx>%uLaLYE$Caqs7o%tib{-^LSS@)^>gLt1!M~kYogzpkU^HymId1*=` zlw;i9+-d8w@PY#zykYNug!8)jTA1c|Z61#Ctz-rD$eb0Lg|y1rs+}siv=XdkCUahS zQhvyyMpr}LC*&749N{w?s1%ercBj<+zVy=i&vzl#KX#}$c5fW&rG=vHUSwBT!BP0o zh<4upd_annw3oUHq#L1muefJK5z{U0ht&K`XKEnfMlNZE|*3K{ZU>zW=ps0u!{D_^^@e+}19RVI_>T6X# z%xY&f%gggMBvx2x7#-1m`q&EClLy9j$#AHE7S%EhX5N6ilwy`P^uPR)Y%=B%fSb!oacD@`kZ4zkQs*Yg`Y>&Q6#Ed(;7cRk1J)vlM5Rm5MP{j=xEa)(8iS=ZIUHDfVnzfqc|co>HG?EFba%6|w-M@AQsT z9Rv``Wqh>fZf>QEok>l*Z7Vx1m1M}=ziOK+eh1f{`X`p3VzKRjLaMRHUlPL!$ z<6gTmb`4YXJaOp+Zf^Pj)t-sxmx%~{T}ZYGd@ES=jQK00<$J|l%!NeU4M+H^zHtDu z_sgcD3lAxoD-D_`l2-C9g=P7--A`C^-RI-B8oin$_xZ9^vkb)9ag9G;&q@5Gl>x@X z_3+(kXp#exEX+HxG3BiN7y!~5RLhpa(!ojAoHv3MO`TJW3e^iRd^oVn=2SmBuUL)g z4_b%G>=ak()BqXcgGi#pXXqv5$uKM);UA50+_Jlmp;`Jkx=tE0jcy|6RWzRRJbVpt zROW3Wd(eDBb$^LRD&Tzi$c%BMDWY!e!zo(|kN3DBxF<`N87(rJdSXNYiuiq=$DUmll z1K*_o+&zqyKVq-p_U}hDCp?u@X@4)n%Q_*sIQtNoo zFBG8xn=OF6qk=w4Ge2uWdwlsRxZzP>6Yq|0$@#(?zF#t5*HFz|dRUf>EzwAAXS9?Smj4HOi_f>86(%yrkK~|{fbd6!m z3CP&ro1K!A7r}3ibW8jz)nHjCEab2sG3tE>lM&0-tPetuEaeovo*>gD{bd&1HGcK_ zojFNre4oGQ7BNDF;I`g|yy&5QX6m3-ne0`*!J=B_Fh(RsFJAJXGPo2BLg_+)&{PT$ zot&L)jUb_^G@ixYQTV@vLOLrCEV$ic1Mr^ozv6xe?ScLJ3J#UEC`&=*0awHZ~DA z{$#-XtO!wuc5>}fby5HAtZu?DJe{oCnHajBxD-j_IVf&yWnb)Hd>dSd*~Z4d*4q@x zv)VX5ef)8+SAsV!uDe)rWg?bQxHEwo&Ebxf250MPwhe%biijs`748ZE001OSSCOac z;1qzEIPm%^v2|2?IkLnbMEa2ZgzKC&f~lMLK!SScX14gunqd5WV5K5E*(5M?3DAX8 z|AA`yua3f|k;Pc=o^)syACvGXCfvc1@zm44Y4H@p+vJio1WrwR?~yYwIIwQW>C6T) z#Oo^N6><+WkWXr$!R`mpTAe87%3rVy4Z1^~C``2|jVDf-3*fl4b~XgsPv3H^?R4Bq ztJ2!yqdYLryI$@B`Lu&s1n%c55~eEsmEnDlC5Kqt;~} z=p*RsK`-5Q$LL}z`av#Do@XN4ATPc=3d}hu9vyeSo$GIwIm02qv_O~fVQ*%)?EvTY z>eEzXHL1%&*_Z%=9WCzwEaYuX?!}yAL+a~L3{OS~{vOs!I`*Z4{AmFK6(>n2;=2J3 zLD=Lqn67QXccisP%VWXQlDcX&=u+Tdd5~MmO9D;FBZR^EaOBKjlrFB_e*TE1zzk25 z^Vb2y+Yb7!_wnC1^EZz(4@AD=GlJ??#TE!MyKXE_nrP|J?2kePoiK(m>Z7lMa(1Cb z?L9Ove0{`@vE)s`+bS078Q0o?tBl6c^9DFuh^D3HB;MLstu-B8{;|T*svYN7^DwAr z$K2z=%}+blPmGV9p`5|CPwE>{YHizvwV43Xycl!m^>yRH@&aM+7?6V(#o++bR_eYe zCraALvU+1*(X{uSHm$Myu|n_M35nNvdnG);$`dgN6%9y{@cu4= zJJX&m-*!)?I%uXyg(hjX+<|K4iH55}EVCthN*;msPBcfuYngGD8Ig7G#~K#+G7Z;C z2(OtE46EgA^#J#sBV`pbg}8*a&|f~Fi+OL4-htYEnPVKA z_;askZ-x7irRLL0z}GDt5tIYgCzyJiHLP?$Wuh&A=9S{DH32IE004>g3w%lI0O7h4 zH!h;KD=)-dDRj@bX7A+B;)OEkqz5NW$5ky z&$Xdf-g?rO=1E?-Ds%;(>3D1j3-~l!d^!xX7$!iB5Ew<{qHglK`tHE_@Q7EEeU=Oa zzRh`fb|zM#dP-_zRVs4UpYmti^>ID@r&b!R{8eHuX?ms|2|{EsN=n0@(Fx}c`oIz# zys}I8H!^<$IeW2m&~l%eB9Bit-}Apt3iP&P{Jihh_9B`$>3zD7X|Dw)SI%3Ghy~c7 zSm^p<11M`IPRsYtR)-v$ZLdNr=;BE&W1{f$s*L)LUb5tn%u~QV!Qm6pT;IP#};G9h0LBZxE~ zISZEE=)~Hjj>#5A83>^g=T2Xh^Al6+C3?6^4vpEPKY_6(5yFuNF$8K(ui*fyL{!}O zO9A=Wr1|knPND{wmY725Im&_CwIz$4;5^>zS5Yc7#?dtS7sHbHQoDpQ52{|J{T7It zx{U(3x|)XqM>{SlDFPFl-pM!6uRXzWAna)}H-E)J5k?22RmwXciv086RR!b9>R=LY z>dxY^ZI?f654>ReQ9 zC04?}#-jn{Z+J)yU@5dXwZ2*O5ldkb_i9QfuY?Y4+(vuo4v|UgLJcha_raw?^ZkRQ zA!ff%e1H|D)5?}^pH$jYnuOZN3oouTUEC>p13S5c4~Qnm%v@#|Z2 zVhI6|3$5o7Yt@*U9ocRGWpdr3xd!cS4T@3E%~*WrVwIRCzYyc{B_Fbym)F=B0s~sO z1PlA`B^|skNG2G#PO$;WEVEyx=;|Y&Yb_|BsZUdtSk-e|x_^AqErpm+|4!M!*I{NGFh}{wZc-XfW=kgP|-* zpcWko*0wgF;wVYL)6Y-|hlnL;-RmdNp0n2iY8!ppD{fWfjpyJCykl!uB6Ya)dW4=- zL3Y@S4X|(l&~cS%pXPh>V-|9ZZMtaET4l1@-F7BL-0E4ReAYwlS(jdr|?YjdK^4;AGd1pJOsg(eGVVMs7FA(Bo_E@ z(5@Z#w;?h@zbhvHh#g4KNPdiO-e9fUy|w{jB(F_IP&1t_2so!SAM*_>EGnBse$1-7~9U} zvv1MZa}gD2$hp_#WSxg9`ihi6gdu30D}|WUTU+D7nNJ3mv&R*Ye|7`pzzxwn^@`BJ94T9p4Wn~%QD7L;u45b~s}t72=y z!U>lu$jbeW$@5u=Hs{tozHx#s7X-|gLk`<2)ZB?(4hUBM*MD%B$Tk{6IfSyKP#%*W zy?SC6M zsi81JxQ3atwAu||bPkNkV-VGk{$$w3HrifQ6fGvTo^cx-QA#?x(l(7kb+$Nr2yi}{ z=sSd+_z+Wap(vbIAzGz`fgsR|Sb|h4pImW7X`AEkoNB`mN+ChTIJZD-2!}IYT)aiD zGWuveEaU_BsY@B$Nc^N?+zK3rb8R;!<8fvT-v?EF^csiA6e~h`kJsttQ|9u$I@DgT zstHYVx<;261d1nTEh~1;Ez7x8_ttOjSM>09FWVi*p1eiZ*i%FX+Xs71Y;^fU8f*8) zrq|fJw>DPAj^%O3a>h$;3z5|CQKSw{2996BN{A~U^}V(B32?Y0BlQF2dg_96pC=(i zF~XEEZlmCBqRKSON43`efv6d&1u=0zDMr3h%8t{~wW*s7~7x+54A_bL($Xc3V@yD7%SWa)w0RYtke9%XTnIG zs&j17d}fE5cne)Q%Ea@{iSD#&wF?NVU9n$a;xxD+!V`Rxm*IN|YF*R;U>amY3471k zGtcLwLv4rc=>f{irL}gOFWNq$*CT7mrqVFpFR%h%Rv&*@F?@hj?pU4J{k{D!OTE5o zJ&HW$f!_=VoWsi2w}Y;&n;qavP;k;DRQX0yX;g_uFEOYmsHE!1xo+v=jYI&ylob%# zH6~${cx=%T=tz%ARSNSZK%}=7fff{+gGclWGHYK6brTv zo(C1EKWYH2e3>1$`S@zBQ*6W(8&G#v*WxBwc@>eCo>-!2Q(f(Dkrl2csH8N>9P!}g znw#X(-NUVb7A@^Wl7qnhu`=-vdN65Lf)FB8=9pj#*&S@p^VT413$}lXejbyJ^|g)B zHmmZyKUxV-ly$9aq>VE&<)ocr2Ba>5HP*-kw)sk>n>bgcwxeRx$P!%`;G5}@&dwD^ z5QP8#1rY*?a$kcRDk{>@gr-_PwsbsBYa>~jYaB#x(HckNJm~BGy@)le(%k#7in-a?*F%x7uyIIwsQVahe@Fl7tQ3 zH7|m*iw`|%d}G%6Aw+d@ZQB#gzYE+{p$5;r0)UXo?zQw`9Dby~!$@w?P!>+o;n8~+ zmFRjdrCaAY)U=YLZBXiS@QCn!vAD_|?%Y}Y?ZcFqwDiz&eE=3)vFceCJ=Ww>*Oa;v zp-Qc*yJ21SGmfkf^&QAo+9SFj-|Y!VNYD0OubCxt(A@_AT(ej9xi_UQ^ro#Lff#RFJyl4a-)$%2=_>YYipJC z?oVA?-RT&BT>`S`gRXZ{AS2$$JJ<%>;VmlJtUz2pfs4KJ6!1|wBLO;e+cGriuhAB5 z>L6eM^4ihIwJ9FX^Q@>*u?6WZfE^mQ3uEl~QH4y&S%B^^KUp~n0KXXL*{Wlxs&kl& zFqFw3s`@~RSb7K7Z0nf5oVV-)s;*p#V+-(D zawnT6SwAK{B^geus9?I~d3)w!L}syvCu3_$WENl?0B3S~JoS@fK5_j>{?5{icc239 z_q9Uv;eUg!x1o{k?RDpT!hwe`pfOUuYw~mG~O165S!S0{fGbsebH!WykrwE z?OC2;7P@kA-Hb3ys?#?Bq!7(mA}wI+u+OWIE>+-+nM$Xc3eV9r9cU;hDQf-aqF_9tzjsfSnazFs}#>g@e zx%(^^kKOB5DQW;uJ*Rr7IZ~b;1K)=lB20~Z^XNdu!Kd~X~gLpag`<(-(7enTcFe9=; zEi@FPM{V_6=1hs2)e_Asi&y5X$@riJKJKa-AM96A%=P)R>4uz%fz*eq0$05QG6wp# z#bn58iJwUf|B5_?oWz+w&0w(SL>zCwcuOJPH0>VxzT~8TjzNC+$=$opDaWuJ+*@?w zs38#!U)Hu;4>@OPR}G(h(`uC)uDe6aV=7MB|)JT3x)tL=x4q(HWhJx=0qu@{PrXXsOnT z-6ET2N~SKohKxke8Dx7fCMa)pU#_xpSqV|-GiKTsf5Lp9m*=Y%mbKw9+TWlvp@8II*L*#PkxA?PvK`{0%R1VOAl*e}KK)k;dEL zsglbGu}N2DyC8+xY)RBC#7GvjG+^FM?$!PgZfP=;m=43?BT%eFZnIuipf z3^@Lm0wRPJ`PXK_?P3lcXHAD>axJ@mGdqR*No(0tzmM<(bT~DmR`(UG z?Ym@mn3zb9jCC7ro=$@7{vE7zAbIS{xs~1_H}%Il%GMlsfv$<;gR_;v%heG@@v=XW z$0#C7qR2nCtSh64Y4lZxL`YKJ?D(tVzG96na^uaafxnld zlhtvfheU(0m}$&1H9;niwgax33dFd#y+WCwffU!-)@6m+8>P{5 z8R4E1&(0tEKDOSsV)3AXc>*Q*OpeQYJlx-Q6|;sHF6oSRAL6;NA}lGv7nESyVfg zNYc1wf=Ce9L}~7wfvS7~jBnLwQuVP5)!N<;;S@x%KvQ{jwE#pApBNURdgz7*c)zb| zm@YH2n%i(Q3EHdETXMD++IXD5oA1(>CjNhbB6|+O(mORZV8qlsr~aOd%zIPGd`=rz z=`@k-eX1=?72az3+hHu>U4~Vh>(WAMI>Mc44l5Z>EBkoot#3(BX7GL}4uW?V2y8yr zO2Bh&3A56T3=Ym&GL^?OKV;k)sr@dAem1@Wy6R~DNg0WME+s#@+I>m$>zct;vp&`w zeglc1^09B<(}tC#ks71!-Iv{7j z&4Q&U60)CJD)HHKti2|o|4d94a}Ja?S-7i~c$JH9 zlhxl23(IAl)9po$9^^}*WQu188|qU21DgB*-wOHXK$rjkaEL^ndlI@7SeYSVRTiuf zkEApH(F%Y@QLLflaha@7&)n@LV>9}p1D z`nh+nr6|Xh^G#P{euQ8tN#th_&9?XhnK?oBaPHQ>K0Z2Ue0p##<4g=3vV1_j6ea?K37 z`P2EG@~7cUtmqSbnGha;gAn~;{F2~MEZ{DtotD~z^SJDTyCR|A{@v^<;Q<0>a_Q`> zzJ+d5(GNjgvGN+_O@es#A{6g5fwL^TS0?yB)&myR=jsXw`fWR=3Y*Ypj@@%^d&q+` z4=X{HCCp9)<6;b?Dd+QF#Qnv|+gx=x+IPy&8O}PRxMGo%2B=(rtVKoOf*_UiDi`nL z+(&ZZZEtf0wgtjJA<+E6mfdi_@a6dPbn&uo6Q850$wDkI14zz>+1H{ZVQAbFT|+}@ z``HkO3L@s;gN_*xAS_VI`#Wme3Hs>j7RjqDXfI80g(M!&svvOQeriIU1K$43)c??~ zpZ#&Tz)`{0jH&F2IHeU`xKMslQb^K$S8GHuflu3Bu>xW`5TqY);|c2BmM(d$y@4;QopR+o?t+&24XHxyJ8Ya-B* zflz2fuDk>XOn<2v*A(CJgQs(8k*PbIQ~SsM%0RQ6z)amIlVNb-{6t4gzrsN#&xX=q zI{mB�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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..12a013f223bb6311e05a9b85310d1db18df09d72 GIT binary patch literal 56292 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%0DsMv`k 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 literal 0 HcmV?d00001 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 %>