aadhavan
This commit is contained in:
parent
5134b8ac6a
commit
58ce2a053a
@ -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))
|
||||
|
||||
}
|
||||
};
|
||||
8
app/controllers/data.json
Normal file
8
app/controllers/data.json
Normal file
@ -0,0 +1,8 @@
|
||||
[
|
||||
{
|
||||
"email": "aadhavanvalli@gmail.com"
|
||||
},
|
||||
{
|
||||
"email": "aadhavancarousell@gmail.com"
|
||||
}
|
||||
]
|
||||
13
app/controllers/rosy-semiotics-399007-a9066914a24a.json
Normal file
13
app/controllers/rosy-semiotics-399007-a9066914a24a.json
Normal file
@ -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"
|
||||
}
|
||||
@ -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('<p style="text-align:center;font-size: 4em;top: 510px;font-style:bold">No Data</p>');
|
||||
}
|
||||
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('<p style="text-align:center;font-size: 4em;top: 510px;font-style:bold">No Data</p>');
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
res.end("<h1 style='text-align:center;font-size:40px'>No Data</h1>");
|
||||
}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();
|
||||
})();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
@ -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;
|
||||
@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
transport.on('rotate', function(oldFilename, newFilename) {
|
||||
// do something fun
|
||||
});
|
||||
|
||||
const logger = createLogger({
|
||||
transports: [
|
||||
transport
|
||||
]
|
||||
});
|
||||
module.exports = {
|
||||
'logMsg': logger,
|
||||
};
|
||||
|
||||
BIN
app/views/Screenshot 2023-09-16 170601.png
Normal file
BIN
app/views/Screenshot 2023-09-16 170601.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
app/views/Y4Pb2E.png
Normal file
BIN
app/views/Y4Pb2E.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
250
app/views/adduser.ejs
Normal file
250
app/views/adduser.ejs
Normal file
@ -0,0 +1,250 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
|
||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
|
||||
</head>
|
||||
<style>
|
||||
/* Medium Devices, Desktops */
|
||||
@media only screen and (min-width : 992px) {
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
background-color: #435d7d;
|
||||
}
|
||||
#div_center{
|
||||
background-color: #ffffff;
|
||||
width: 500px;
|
||||
height: 600px;
|
||||
margin: 50px auto 10px auto;
|
||||
padding: 30px;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 10px -3px #333;
|
||||
text-align: center;
|
||||
}
|
||||
#div_1{
|
||||
|
||||
display: flex;
|
||||
justify-content: center; /* Horizontally center content */
|
||||
align-items: center; /* Vertically center content */
|
||||
height: 100vh;
|
||||
}
|
||||
h3{
|
||||
/* font-family: Google Sans,Noto Sans Myanmar UI,arial,sans-serif; */
|
||||
font-size: 26px;
|
||||
/* margin-top: 70px; */
|
||||
}
|
||||
label{
|
||||
display: flex;
|
||||
padding-left: 40px;
|
||||
padding-top: 10px;
|
||||
|
||||
}
|
||||
input{
|
||||
/* background-color: #999; */
|
||||
border-style: solid;
|
||||
border-radius: 2px;
|
||||
}
|
||||
/* Basic styles for the input container */
|
||||
.input-container {
|
||||
position: relative;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
/* Style the input field */
|
||||
.input-container input {
|
||||
width: 90%;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
/* border-bottom: 2px solid #2196F3; */
|
||||
outline: none;
|
||||
font-size: 16px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: lightgrey;
|
||||
}
|
||||
|
||||
/* Style the label (initially hidden) */
|
||||
.input-container label {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
pointer-events: none;
|
||||
transition: 0.2s ease all;
|
||||
font-size: 16px;
|
||||
color: #999; /* Color for the label */
|
||||
}
|
||||
|
||||
/* Move the label up when input is focused */
|
||||
.input-container input:focus + label,
|
||||
.input-container input:valid + label {
|
||||
top: -20px;
|
||||
font-size: 12px;
|
||||
color: black;
|
||||
/* color: #2196F3; */
|
||||
}
|
||||
#submitBtn{
|
||||
font-size: 20px;
|
||||
background-color:#1a71eb;
|
||||
border-color: #1a71eb;
|
||||
font-family: Google Sans,Noto Sans Myanmar UI,arial,sans-serif;
|
||||
font-size: 14px;
|
||||
width: 80px;
|
||||
height: 30px;
|
||||
color: #eeeeee;
|
||||
margin-top: 20px;
|
||||
}
|
||||
img{
|
||||
display: block;
|
||||
width: 200px;
|
||||
margin: 30px auto;
|
||||
/* box-shadow: 0 5px 10px -7px #333333; */
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
/* Smartphones (portrait and landscape) ----------- */
|
||||
@media only screen and (max-width : 992px){
|
||||
body {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#div_center{
|
||||
background-color: #ffffff;
|
||||
width: 500px;
|
||||
height: 600px;
|
||||
margin: 50px auto 10px auto;
|
||||
padding: 30px;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 10px -3px #333;
|
||||
text-align: center;
|
||||
}
|
||||
#div_1{
|
||||
|
||||
display: flex;
|
||||
justify-content: center; /* Horizontally center content */
|
||||
align-items: center; /* Vertically center content */
|
||||
height: 100vh;
|
||||
}
|
||||
h3{
|
||||
font-family: Google Sans,Noto Sans Myanmar UI,arial,sans-serif;
|
||||
font-size: 24px;
|
||||
|
||||
}
|
||||
label{
|
||||
display: flex;
|
||||
padding-left: 40px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
input{
|
||||
/* background-color: #999; */
|
||||
border-style: solid;
|
||||
border-radius: 2px;
|
||||
}
|
||||
/* Basic styles for the input container */
|
||||
.input-container {
|
||||
position: relative;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
/* Style the input field */
|
||||
.input-container input {
|
||||
width: 90%;
|
||||
padding: 10px;
|
||||
border: none;
|
||||
/* border-bottom: 2px solid #2196F3; */
|
||||
outline: none;
|
||||
font-size: 16px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: lightgrey;
|
||||
}
|
||||
|
||||
/* Style the label (initially hidden) */
|
||||
.input-container label {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
pointer-events: none;
|
||||
transition: 0.2s ease all;
|
||||
font-size: 16px;
|
||||
color: #999; /* Color for the label */
|
||||
}
|
||||
|
||||
/* Move the label up when input is focused */
|
||||
.input-container input:focus + label,
|
||||
.input-container input:valid + label {
|
||||
top: -20px;
|
||||
font-size: 12px;
|
||||
color: black;
|
||||
/* color: #2196F3; */
|
||||
}
|
||||
#submitBtn{
|
||||
font-size: 20px;
|
||||
background-color:#1a71eb;
|
||||
border-color: #1a71eb;
|
||||
font-family: Google Sans,Noto Sans Myanmar UI,arial,sans-serif;
|
||||
font-size: 14px;
|
||||
width: 80px;
|
||||
height: 30px;
|
||||
color: #eeeeee;
|
||||
}
|
||||
img{
|
||||
display: block;
|
||||
width: 200px;
|
||||
margin: 30px auto;
|
||||
/* box-shadow: 0 5px 10px -7px #333333; */
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="div_1">
|
||||
<div id="div_center">
|
||||
<img src="https://play-lh.googleusercontent.com/1-hPxafOxdYpYZEOKzNIkSP43HXCNftVJVttoo4ucl7rsMASXW3Xr6GlXURCubE1tA=w3840-h2160-rw" alt="image not there">
|
||||
<h3>Welcome back! Please Add Email</h3><br><br>
|
||||
<form action="/addjson" method="post">
|
||||
<div class="input-container">
|
||||
<input type="email" id="first-name" name="email" required>
|
||||
<label for="first-name">Email</label>
|
||||
</div><br><br><br>
|
||||
<!-- <div class="input-container">
|
||||
<input type="password" id="first-name" name="password" required>
|
||||
<label for="first-name">Password</label>
|
||||
</div><br><br> -->
|
||||
<button id="submitBtn">Submit</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- <script>
|
||||
const submitButton = document.getElementById("submitBtn");
|
||||
submitButton.addEventListener("click", function () {
|
||||
const emailValue = document.getElementById("emaill").value;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/api/addjson", // Change to the correct URL of your server-side script
|
||||
data: { email: emailValue },
|
||||
success: function (response) {
|
||||
// Handle the response from the server
|
||||
alert(response);
|
||||
window.location.href = "/api/loginPage";
|
||||
},
|
||||
error: function (error) {
|
||||
// Handle any errors that occur during the AJAX request
|
||||
console.error("Error:", error);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script> -->
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -4,6 +4,7 @@
|
||||
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
|
||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
|
||||
|
||||
<!-- icon -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div class="header">
|
||||
|
||||
<p>
|
||||
<input class="input" id="myInput" type="text" placeholder="Search..">
|
||||
</p>
|
||||
|
||||
<div class="input-group-btn search-panel">
|
||||
<div class="input-group-btn search-panel" hidden>
|
||||
<select name="search_param" id="search_param" class="btn btn-default dropdown-toggle" style="background-color: #ffffff;" data-toggle="dropdown">
|
||||
<option class="dropdown-item" value="Default">Default</option>
|
||||
<option class="dropdown-item" value="Name">Name</option>
|
||||
@ -473,13 +525,17 @@ label{ padding-left: 20px; }
|
||||
<option class="dropdown-item" value="Catogary">Catogary</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
<a id="new" class="new-button" title="add new" data-toggle="modal" data-target="#add-new-form"><i class="material-icons" id="material"></i></a>
|
||||
<% if(aadhaemail == email){ %>
|
||||
<a id="add_user_button" class="new-button-email" title="add new" data-toggle="modal" data-target="#add_email">Add Email</a>
|
||||
<% } %>
|
||||
</div>
|
||||
<table id="emp">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Sl.</th>
|
||||
<th>Sl</th>
|
||||
<th hidden>Sno</th>
|
||||
<th>Name</th>
|
||||
<th>Category</th>
|
||||
<th hidden>Age Category</th>
|
||||
@ -501,17 +557,18 @@ label{ padding-left: 20px; }
|
||||
<th hidden>Gurupooja 2021</th>
|
||||
<th hidden>Gatnayak</th>
|
||||
<th hidden>Email</th>
|
||||
<th>Phone</th>
|
||||
<th >Phone</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<% data.forEach(function(emp , index ) { %>
|
||||
<tbody id="myTable" class="update" data-toggle="modal" data-target="#edit">
|
||||
<tr>
|
||||
<td><%=emp['Sl.'] %></td>
|
||||
<td><%=emp.Name %></td>
|
||||
<td><%=emp['Çategory'] %></td>
|
||||
<td><%=emp.Sl %></td>
|
||||
<td hidden><%=emp.Sno %></td>
|
||||
<td id="name"><%=emp.Name %></td>
|
||||
<td id="name"><%=emp['Category'] %></td>
|
||||
<td hidden><%=emp['Age Category'] %></td>
|
||||
<td><%=emp.ContactNo %></td>
|
||||
<td id="name"><%=emp.ContactNo %></td>
|
||||
<td hidden><%=emp.Address %></td>
|
||||
<td hidden><%=emp.Reference %></td>
|
||||
<td hidden><%=emp.Basthi %></td>
|
||||
@ -540,23 +597,28 @@ label{ padding-left: 20px; }
|
||||
<div id="edit" class="modal fade" aria-modal="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<form>
|
||||
<!-- test id to hide the form -->
|
||||
<form id="form-hide" style="display: none;">
|
||||
<div class="modal-header">
|
||||
<a class="back" data-dismiss="modal" aria-hidden="true"><i id="back" class="fa fa-arrow-circle-left" style="color: #FFFFF7;"></i></a>
|
||||
<a id="back1" class="back" data-dismiss="modal" aria-hidden="true"><i id="back" class="fa fa-arrow-circle-left" style="color: #FFFFF7;"></i></a>
|
||||
<h4 class="modal-title">Edit</h4>
|
||||
<a id="up" class="add" data-dismiss="modal"><i class="fa fa-save" style="color: #FFFFF7;"></i></a>
|
||||
</div>
|
||||
<div class="modal-body" hidden>
|
||||
<label>Sl.</label>
|
||||
<input id="0" type="text" class="input" name="Sl.">
|
||||
<input id="0" type="text" class="input" name="Sl">
|
||||
</div>
|
||||
<div class="modal-body" hidden>
|
||||
<label>Sno</label>
|
||||
<input id="1" type="text" class="input" name="Sno">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Name</label>
|
||||
<input id="1" type="text" class="input" name="name">
|
||||
<input id="2" type="text" class="input" name="name">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Category</label>
|
||||
<select id="2" type="text" class="input" name="Çategory">
|
||||
<select id="3" type="text" class="input" name="Çategory">
|
||||
<% dropdown.category.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -564,7 +626,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Age Category</label>
|
||||
<select id="3" type="text" class="input" name="Age Category">
|
||||
<select id="4" type="text" class="input" name="Age Category">
|
||||
<% dropdown.age_Category.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -572,19 +634,19 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Contact No</label>
|
||||
<input id="4" type="text" class="input" name="ContactNo">
|
||||
<input id="5" type="text" class="input" name="ContactNo">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Address</label>
|
||||
<input id="5" type="text" class="input" name="Address">
|
||||
<input id="6" type="text" class="input" name="Address">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Reference</label>
|
||||
<input id="6" type="text" class="input" name="Reference">
|
||||
<input id="7" type="text" class="input" name="Reference">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Basthi</label>
|
||||
<select id="7" type="text" class="input" name="Basthi">
|
||||
<select id="8" type="text" class="input" name="Basthi">
|
||||
<% dropdown.basthi.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -592,7 +654,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Varga</label>
|
||||
<select id="8" type="text" class="input" name="Varga">
|
||||
<select id="9" type="text" class="input" name="Varga">
|
||||
<% dropdown.varga.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -600,7 +662,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Milan/Shaka</label>
|
||||
<select id="9" type="text" class="input" name="Milan / Shaka">
|
||||
<select id="10" type="text" class="input" name="Milan / Shaka">
|
||||
<% dropdown.milan_shaka.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -608,7 +670,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Poruppu</label>
|
||||
<select id="10" type="text" class="input" name="Poruppu">
|
||||
<select id="11" type="text" class="input" name="Poruppu">
|
||||
<% dropdown.poruppu.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -616,7 +678,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Ganavesh</label>
|
||||
<select id="11" type="text" class="input" name="Ganavesh">
|
||||
<select id="12" type="text" class="input" name="Ganavesh">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -624,11 +686,11 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>DOB</label>
|
||||
<input id="12" type="text" class="input" name="DOB">
|
||||
<input id="13" type="text" class="input" name="DOB">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Blood Group</label>
|
||||
<select id="13" type="text" class="input" name="Blood Group">
|
||||
<select id="14" type="text" class="input" name="Blood Group">
|
||||
<% dropdown.blood_group.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -636,7 +698,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>2W</label>
|
||||
<select id="14" type="text" class="input" name="2W">
|
||||
<select id="15" type="text" class="input" name="2W">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -644,7 +706,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>4W</label>
|
||||
<select id="15" type="text" class="input" name="4W">
|
||||
<select id="16" type="text" class="input" name="4W">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -652,11 +714,11 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Pada Sanchalan 2022</label>
|
||||
<input id="16" type="text" class="input" name="Pada Sanchalan 2022">
|
||||
<input id="17" type="text" class="input" name="Pada Sanchalan 2022">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Bagh Sanghik</label>
|
||||
<select id="17" type="text" class="input" name="Bagh Sanghik">
|
||||
<select id="18" type="text" class="input" name="Bagh Sanghik">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -664,19 +726,19 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Year</label>
|
||||
<input id="18" type="text" class="input" name="Year">
|
||||
<input id="19" type="text" class="input" name="Year">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Gurupooja 2021</label>
|
||||
<input id="19" type="text" class="input" name="Gurupooja 2021">
|
||||
<input id="20" type="text" class="input" name="Gurupooja 2021">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Gatnayak</label>
|
||||
<input id="20" type="text" class="input" name="Gatnayak">
|
||||
<input id="21" type="text" class="input" name="Gatnayak">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Email</label>
|
||||
<input id="21" type="text" class="input" name="email">
|
||||
<input id="22" type="text" class="input" name="email">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -695,15 +757,21 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body" hidden>
|
||||
<label>Sl.</label>
|
||||
<input id="new0" type="text" class="input" name="Sl." value="<%= dropdown.new_index %>">
|
||||
<!-- value="<%= dropdown.new_index %>" -->
|
||||
<input id="new0" type="text" class="input" name="Sl" >
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Sno</label>
|
||||
<input id="new1" type="text" class="input" name="Sno" value="<%= number %>" readonly>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Name</label>
|
||||
<input id="new1" type="text" class="input" name="name">
|
||||
<input id="new2" type="text" class="input" name="name" required>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Category</label>
|
||||
<select id="new2" type="text" class="input" name="Çategory">
|
||||
<select id="new3" type="text" class="input" name="Çategory">
|
||||
<option class="dropdown-item">Select Category</option>
|
||||
<% dropdown.category.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -711,7 +779,8 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Age Category</label>
|
||||
<select id="new3" type="text" class="input" name="Age Category">
|
||||
<select id="new4" type="text" class="input" name="Age Category">
|
||||
<option class="dropdown-item">Select Age Category</option>
|
||||
<% dropdown.age_Category.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -719,19 +788,19 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Contact No</label>
|
||||
<input id="new4" type="text" class="input" name="ContactNo">
|
||||
<input id="new5" type="text" class="input" name="ContactNo" >
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Address</label>
|
||||
<input id="new5" type="text" class="input" name="Address">
|
||||
<input id="new6" type="text" class="input" name="Address">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Reference</label>
|
||||
<input id="new6" type="text" class="input" name="Reference">
|
||||
<input id="new7" type="text" class="input" name="Reference">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Basthi</label>
|
||||
<select id="new7" type="text" class="input" name="Basthi">
|
||||
<select id="new8" type="text" class="input" name="Basthi">
|
||||
<% dropdown.basthi.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -739,7 +808,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Varga</label>
|
||||
<select id="new8" type="text" class="input" name="Varga">
|
||||
<select id="new9" type="text" class="input" name="Varga">
|
||||
<% dropdown.varga.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -747,7 +816,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Milan/Shaka</label>
|
||||
<select id="new9" type="text" class="input" name="Milan / Shaka">
|
||||
<select id="new10" type="text" class="input" name="Milan / Shaka">
|
||||
<% dropdown.milan_shaka.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -755,7 +824,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Poruppu</label>
|
||||
<select id="new10" type="text" class="input" name="Poruppu">
|
||||
<select id="new11" type="text" class="input" name="Poruppu">
|
||||
<% dropdown.poruppu.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -763,7 +832,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Ganavesh</label>
|
||||
<select id="new11" type="text" class="input" name="Ganavesh">
|
||||
<select id="new12" type="text" class="input" name="Ganavesh">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -771,11 +840,11 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>DOB</label>
|
||||
<input id="new12" type="text" class="input" name="DOB">
|
||||
<input id="new13" type="text" class="input" name="DOB">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Blood Group</label>
|
||||
<select id="new13" type="text" class="input" name="Blood Group">
|
||||
<select id="new14" type="text" class="input" name="Blood Group">
|
||||
<% dropdown.blood_group.forEach(function(data , index ) { %>
|
||||
<option value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -783,7 +852,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>2W</label>
|
||||
<select id="new13" type="text" class="input" name="2W">
|
||||
<select id="new15" type="text" class="input" name="2W">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -791,7 +860,7 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>4W</label>
|
||||
<select id="new14" type="text" class="input" name="4W">
|
||||
<select id="new16" type="text" class="input" name="4W">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -799,11 +868,11 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Pada Sanchalan 2022</label>
|
||||
<input id="new16" type="text" class="input" name="Pada Sanchalan 2022">
|
||||
<input id="new17" type="text" class="input" name="Pada Sanchalan 2022">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Bagh Sanghik</label>
|
||||
<select id="new17" type="text" class="input" name="Bagh Sanghik">
|
||||
<select id="new18" type="text" class="input" name="Bagh Sanghik">
|
||||
<% dropdown.ganavesh_2w_4w_basg.forEach(function(data , index ) { %>
|
||||
<option class="dropdown-item" value="<%=data %>"><%=data %></option>
|
||||
<% }) %>
|
||||
@ -811,57 +880,102 @@ label{ padding-left: 20px; }
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Year</label>
|
||||
<input id="new18" type="text" class="input" name="Year">
|
||||
<input id="new19" type="text" class="input" name="Year">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Gurupooja 2021</label>
|
||||
<input id="new19" type="text" class="input" name="Gurupooja 2021">
|
||||
<input id="new20" type="text" class="input" name="Gurupooja 2021">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Gatnayak</label>
|
||||
<input id="new20" type="text" class="input" name="Gatnayak">
|
||||
<input id="new21" type="text" class="input" name="Gatnayak">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>Email</label>
|
||||
<input id="new21" type="text" class="input" name="email">
|
||||
<input id="new22" type="text" class="input" name="email">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="add_email" class="modal fade" aria-modal="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<form name="contact-form">
|
||||
<div class="modal-header">
|
||||
<a class="back" data-dismiss="modal" aria-hidden="true"><i id="back" class="fa fa-arrow-circle-left" style="color: #FFFFF7;"></i></a>
|
||||
<h4 class="modal-title">Add Email</h4>
|
||||
<a id="add-email" class="add" data-dismiss="modal"><i class="fa fa-save" style="color: #FFFFF7;"></i></a>
|
||||
</div>
|
||||
<div class="modal-body" >
|
||||
<label></label>
|
||||
|
||||
</div>
|
||||
<div class="modal-body" >
|
||||
<label>Email</label>
|
||||
<input id="email0" type="email" class="input" name="email">
|
||||
</div>
|
||||
<div class="modal-body" >
|
||||
<label></label>
|
||||
|
||||
</div>
|
||||
<!-- <input id="email1" type="" class="input" name="submit"> -->
|
||||
<!-- <button id="email1" class="input" name="submit">submit</button> -->
|
||||
<div class="modal-body" >
|
||||
<label></label>
|
||||
|
||||
</div>
|
||||
<div class="modal-body" >
|
||||
<label></label>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
let oldValue = [];let newValue = [];let pos = [];
|
||||
let oldValue = [];let newValue = [];let pos = []; let email=[];
|
||||
|
||||
// SI dynamic background-color
|
||||
$(document).ready(function()
|
||||
{
|
||||
$(document).ready(function(){
|
||||
|
||||
var colorArray = ["#435d7d" , "Green" , "DarkViolet" , "DarkRed" , "Brown" , "DarkOrange" , "DarkGrey" , "DodgerBlue" , "DarkSeaGreen" , "SlateBlue" ];
|
||||
$('tbody').children("tr").each(function(index){
|
||||
// apply color dynamically
|
||||
$(this).find("td:nth-of-type(1)").css("background", colorArray[index % 10]);
|
||||
// get first letter from name
|
||||
var header = $(this).find('td:nth-of-type(2)').text()
|
||||
var header = $(this).find('td:nth-of-type(3)').text()
|
||||
$(this).find("td:nth-of-type(1)").html([header.charAt(0)]);
|
||||
})
|
||||
});
|
||||
|
||||
// close the update form when ever we click the call icon
|
||||
$(document).on("click", "#last", function(){
|
||||
$('#back').click();
|
||||
})
|
||||
|
||||
$(document).ready(function() {
|
||||
$(document).on("click", "#last", function() {
|
||||
$("#form-hide").hide();
|
||||
$("#back").click();
|
||||
});
|
||||
});
|
||||
$(document).ready(function() {
|
||||
$(document).on("click", "#name", function() {
|
||||
$("#form-hide").show();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Add new data in sheet
|
||||
$(document).on("click", "#add-new", function(){
|
||||
for (let i = 0; i < 22; i++) {
|
||||
for (let i = 0; i < 23; i++) {
|
||||
newValue.push($(`#new${i}`).val())
|
||||
}
|
||||
// add data in googlesheet using ajax
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: ''+ window.location.origin +'/api/addRow',
|
||||
url: ''+ window.location.origin +'/addRow',
|
||||
data: { data : newValue },
|
||||
success: function(response) {
|
||||
if (response.statusCode == 1) {
|
||||
@ -892,7 +1006,7 @@ $(document).on("click", "#up", function(){
|
||||
if (i == 0) {
|
||||
newValue.push($(`#${i}`).val())
|
||||
// update first letter from name
|
||||
var header = $('#1').val();
|
||||
var header = $('#2').val();
|
||||
// remove sl and update name first-letter
|
||||
pos[0].find(`td:nth-child(${i+1})`).html([header.charAt(0)]);
|
||||
}
|
||||
@ -904,7 +1018,8 @@ $(document).on("click", "#up", function(){
|
||||
// update data in googlesheet using ajax
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: ''+ window.location.origin +'/api/updateRow',
|
||||
url: ''+ window.location.origin +'/updateRow',
|
||||
// data: { Old : oldValue , New : newValue },
|
||||
data: { Old : oldValue , New : newValue },
|
||||
success: function(response) {
|
||||
if (response.status == 200) { alert("updated") }
|
||||
@ -918,33 +1033,59 @@ $(document).on("click", "#up", function(){
|
||||
$(document).on("click", ".update", function(){
|
||||
pos.push($(this).children("tr"));
|
||||
$(this).children("tr").find("td:not(:last-child)").each(function(index){
|
||||
oldValue.push($(this).text());
|
||||
$(`#${index}`).val($(this).text());
|
||||
});
|
||||
oldValue.push($(this).text());
|
||||
$(`#${index}`).val($(this).text());
|
||||
});
|
||||
});
|
||||
|
||||
//add Email in Json file
|
||||
$(document).on("click", "#add-email", function(){
|
||||
const email =document.getElementById("email0").value;
|
||||
// const email1 =email.value;
|
||||
$.ajax({
|
||||
type: "post",
|
||||
url: ''+ window.location.origin +'/addjson',
|
||||
data: { data : email },
|
||||
success: function(response) {
|
||||
if (response.statusCode == 1) {
|
||||
document.getElementById("email0").value = ''; // Clear the input field
|
||||
alert("Data added successfully");
|
||||
window.location.reload();
|
||||
} else {
|
||||
document.getElementById("email0").value = ''; // Clear the input field
|
||||
alert("Data not added successfully"); // Corrected alert message
|
||||
}
|
||||
},
|
||||
error: function(jqXHR, textStatus, err) {
|
||||
// alert('text status: '+textStatus+', err :'+err+', jqXHR:'+jqXHR)
|
||||
}
|
||||
});
|
||||
// clear arr
|
||||
|
||||
})
|
||||
|
||||
// Filter and Search
|
||||
$(document).ready(function(){
|
||||
$("#myInput").on("keyup", function() {
|
||||
var value = $(this).val().toLowerCase();
|
||||
if ( $('#search_param option:selected').text() == 'Default') {
|
||||
$("#myTable tr").filter(function() {
|
||||
$(this).toggle($(this).find("td:nth-child(2) , td:nth-child(5)").text().toLowerCase().indexOf(value) > -1)
|
||||
$(this).toggle($(this).find("td:nth-child(2),td:nth-child(3) ,td:nth-child(4), td:nth-child(6)").text().toLowerCase().indexOf(value) > -1)
|
||||
});
|
||||
}
|
||||
if ( $('#search_param option:selected').text() == 'Name') {
|
||||
$("#myTable tr").filter(function() {
|
||||
$(this).toggle($(this).find("td:nth-child(2)").text().toLowerCase().indexOf(value) > -1)
|
||||
$(this).toggle($(this).find("td:nth-child(3)").text().toLowerCase().indexOf(value) > -1)
|
||||
});
|
||||
}
|
||||
if ( $('#search_param option:selected').text() == 'Mobile') {
|
||||
$("#myTable tr").filter(function() {
|
||||
$(this).toggle($(this).find("td:nth-child(5)").text().toLowerCase().indexOf(value) > -1)
|
||||
$(this).toggle($(this).find("td:nth-child(6)").text().toLowerCase().indexOf(value) > -1)
|
||||
});
|
||||
}
|
||||
if ( $('#search_param option:selected').text() == 'Catogary') {
|
||||
$("#myTable tr").filter(function() {
|
||||
$(this).toggle($(this).find("td:nth-child(3)").text().toLowerCase().indexOf(value) > -1)
|
||||
$(this).toggle($(this).find("td:nth-child(4)").text().toLowerCase().indexOf(value) > -1)
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -952,14 +1093,3 @@ $(document).ready(function(){
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
app/views/google.png
Normal file
BIN
app/views/google.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
@ -7,25 +7,40 @@
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
|
||||
<script src="https://accounts.google.com/gsi/client" async defer></script>
|
||||
<!-- <script src="https://accounts.google.com/o/oauth2/auth" async defer></script> -->
|
||||
<!------ Include the above in your HEAD tag ---------->
|
||||
<script>
|
||||
function handleCredentialResponse(response) {
|
||||
const responsePayload = JSON.parse(atob(response.credential.split('.')[1]));
|
||||
window.location = `${ window.location.origin }/api/getRow?email=${responsePayload.email}`;
|
||||
}
|
||||
function handleCredentialResponse(response) {
|
||||
const responsePayload = JSON.parse(atob(response.credential.split('.')[1]));
|
||||
|
||||
// Set the email value in the hidden input field
|
||||
const emailInput = document.getElementById('emailInput');
|
||||
emailInput.value = responsePayload.email;
|
||||
|
||||
// Submit the form programmatically
|
||||
const signinForm = document.getElementById('signinForm');
|
||||
signinForm.submit();
|
||||
}
|
||||
|
||||
window.onload = function () {
|
||||
google.accounts.id.initialize({
|
||||
client_id: "271723278161-5fkkg7rtce6pq7tchgr1gioat14oqpet.apps.googleusercontent.com",
|
||||
callback: handleCredentialResponse
|
||||
});
|
||||
|
||||
google.accounts.id.renderButton(document.getElementById("buttonDiv"), {
|
||||
type: "outline",
|
||||
locale: "the new locale",
|
||||
theme: "filled_blue",
|
||||
size: "large",
|
||||
shape: "rectangular",
|
||||
width: "400",
|
||||
logo_alignment: "left"
|
||||
});
|
||||
|
||||
google.accounts.id.prompt(); // also display the One Tap dialog
|
||||
}
|
||||
|
||||
window.onload = function () {
|
||||
google.accounts.id.initialize({
|
||||
client_id: "1000433489727-n24pbvsdo5799elkaar78u0pgrcjmjv2.apps.googleusercontent.com",
|
||||
callback: handleCredentialResponse
|
||||
});
|
||||
google.accounts.id.renderButton(document.getElementById("buttonDiv"),
|
||||
{ type: "outline", locale: "the new locale" , theme: "filled_blue",
|
||||
size: "large", shape: "rectangular",
|
||||
width: "400",
|
||||
logo_alignment: "left"})
|
||||
google.accounts.id.prompt(); // also display the One Tap dialog
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<style>
|
||||
@ -36,7 +51,7 @@
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #eeeeee;
|
||||
background-color: #435d7d;
|
||||
}
|
||||
|
||||
img {
|
||||
@ -47,6 +62,7 @@ img {
|
||||
border-radius: 50%;
|
||||
}
|
||||
.form {
|
||||
|
||||
background-color: #ffffff;
|
||||
width: 500px;
|
||||
height: 600px;
|
||||
@ -65,6 +81,22 @@ h3{
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
#add_user_button{
|
||||
font-family: Google Sans,Noto Sans Myanmar UI,arial,sans-serif;
|
||||
font-size: 10px;
|
||||
border-radius: 5px;
|
||||
border-color: #1a71eb;
|
||||
background-color: #1a71eb;
|
||||
width: 70px;
|
||||
height: 25px;
|
||||
top: 50px;
|
||||
margin-left: 3%;
|
||||
transform: scale(1.5);
|
||||
position: relative;
|
||||
|
||||
|
||||
color: #eeeeee;
|
||||
}
|
||||
}
|
||||
/* Smartphones (portrait and landscape) ----------- */
|
||||
@media only screen and (max-width : 992px){
|
||||
@ -113,13 +145,18 @@ p{
|
||||
color: #fffff7;
|
||||
font-size: 4em;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
<body>
|
||||
<div class="form">
|
||||
<img src="http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2015%2F10%2Fnexus2cee_Search-Thumb-150x150.png&w=150&h=150&zc=3">
|
||||
<h3>Welcome back! Please sign in</h3>
|
||||
<div id="buttonDiv"></div>
|
||||
<form method="POST" action="/getRow" id="signinForm">
|
||||
<input type="hidden" name="email" id="emailInput">
|
||||
</form>
|
||||
<div id="buttonDiv"></div>
|
||||
</div>
|
||||
<p>......</p>
|
||||
</body>
|
||||
|
||||
669
package-lock.json
generated
669
package-lock.json
generated
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
10
server.js
10
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');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user