upload to codehub
This commit is contained in:
52
.gitignore
vendored
Normal file
52
.gitignore
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# These are some examples of commonly ignored file patterns.
|
||||||
|
# You should customize this list as applicable to your project.
|
||||||
|
# Learn more about .gitignore:
|
||||||
|
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore
|
||||||
|
|
||||||
|
# Node artifact files
|
||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Compiled Java class files
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Compiled Python bytecode
|
||||||
|
*.py[cod]
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Package files
|
||||||
|
*.jar
|
||||||
|
|
||||||
|
# Maven
|
||||||
|
target/
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# JetBrains IDE
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# Unit test reports
|
||||||
|
TEST*.xml
|
||||||
|
|
||||||
|
# Generated by MacOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Generated by Windows
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Applications
|
||||||
|
*.app
|
||||||
|
*.exe
|
||||||
|
*.war
|
||||||
|
|
||||||
|
# Large media files
|
||||||
|
*.mp4
|
||||||
|
*.tiff
|
||||||
|
*.avi
|
||||||
|
*.flv
|
||||||
|
*.mov
|
||||||
|
*.wmv
|
||||||
|
|
||||||
|
#env
|
||||||
|
.env
|
||||||
35
.htaccess
Normal file
35
.htaccess
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Disable index view
|
||||||
|
Options -Indexes
|
||||||
|
|
||||||
|
# Hide a specific file
|
||||||
|
<Files .env>
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
# Hide a specific file
|
||||||
|
<Files .git>
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
<Files .git/config>
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
<Files .github>
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
<Files .htaccess>
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
</Files>
|
||||||
|
|
||||||
|
# Hide a specific file
|
||||||
|
#<Files config>
|
||||||
|
#Order allow,deny
|
||||||
|
#Deny from all
|
||||||
|
#</Files>
|
||||||
82
app3.js
Normal file
82
app3.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
var express = require('express');
|
||||||
|
var app = express();
|
||||||
|
var keys = require('./keysfile');
|
||||||
|
const cookieSession = require('cookie-session');
|
||||||
|
const passport = require('passport');
|
||||||
|
var hbs = require('express-handlebars');
|
||||||
|
var bodyParser = require('body-parser');
|
||||||
|
var multer = require('multer');
|
||||||
|
var upload = multer();
|
||||||
|
app.engine('hbs', hbs({ extname: 'hbs', defaultLayout: 'layout', layoutsDir: __dirname + '/views' }));
|
||||||
|
app.set('view engine', 'hbs');
|
||||||
|
exports.env = require('dotenv').config().parsed || {};
|
||||||
|
|
||||||
|
// app.set('views','./views');
|
||||||
|
// app.use(express.static('public'));
|
||||||
|
|
||||||
|
|
||||||
|
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
|
||||||
|
app.use(bodyParser.json({ limit: '50mb' }));
|
||||||
|
|
||||||
|
app.set('views', './views');
|
||||||
|
|
||||||
|
|
||||||
|
// for parsing application/json
|
||||||
|
// app.use(bodyParser.json());
|
||||||
|
|
||||||
|
// // for parsing application/xwww-
|
||||||
|
// app.use(bodyParser.urlencoded({ extended: true }));
|
||||||
|
//form-urlencoded
|
||||||
|
|
||||||
|
// for parsing multipart/form-data
|
||||||
|
// app.use(upload.array());
|
||||||
|
app.use(express.static('public'));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = app;
|
||||||
|
|
||||||
|
var dbutil = require('./connection');
|
||||||
|
const GuestToggle = require('./models/guesttogglemodel');
|
||||||
|
dbutil.connectToServer(function (err) {
|
||||||
|
if (err) {
|
||||||
|
console.log("Mongo db error " + err);
|
||||||
|
} else {
|
||||||
|
app.use(cookieSession({
|
||||||
|
maxAge: 24 * 60 * 60 * 1000,
|
||||||
|
keys: [keys.session.cookieKey],
|
||||||
|
}));
|
||||||
|
app.enable('trust proxy')
|
||||||
|
app.use(passport.initialize());
|
||||||
|
app.use(passport.session());
|
||||||
|
app.use(require('./controllers'));
|
||||||
|
app.use((req, res, next) => {
|
||||||
|
res.status(404).json({ error: 'Route not found' });
|
||||||
|
});
|
||||||
|
const port = process.env.PORT || 83;
|
||||||
|
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`Server is running on port ${port}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
checkAndCreateGuestToggle()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const checkAndCreateGuestToggle = async () => {
|
||||||
|
try {
|
||||||
|
const guest = await GuestToggle.findOne();
|
||||||
|
if (!guest) {
|
||||||
|
const newGuest = new GuestToggle({ status: false });
|
||||||
|
await newGuest.save();
|
||||||
|
console.log('GuestToggle created with status: false');
|
||||||
|
} else {
|
||||||
|
console.log('GuestToggle already exists:', guest);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error checking/creating GuestToggle:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
37
config/passport.js
Normal file
37
config/passport.js
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
const LocalStrategy = require('passport-local').Strategy;
|
||||||
|
const User = require('../models/user');
|
||||||
|
const bcrypt = require('bcryptjs');
|
||||||
|
|
||||||
|
module.exports = function(passport){
|
||||||
|
// Local Strategy
|
||||||
|
passport.use(new LocalStrategy(function(username, password, done){
|
||||||
|
// Match Username
|
||||||
|
let query = {username:username};
|
||||||
|
User.findOne(query, function(err, user){
|
||||||
|
if(err) throw err;
|
||||||
|
if(!user){
|
||||||
|
return done(null, false, {message: 'No user found'});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match Password
|
||||||
|
bcrypt.compare(password, user.password, function(err, isMatch){
|
||||||
|
if(err) throw err;
|
||||||
|
if(isMatch){
|
||||||
|
return done(null, user);
|
||||||
|
} else {
|
||||||
|
return done(null, false, {message: 'Wrong password'});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
|
passport.serializeUser(function(user, done) {
|
||||||
|
done(null, user.id);
|
||||||
|
});
|
||||||
|
|
||||||
|
passport.deserializeUser(function(id, done) {
|
||||||
|
User.findById(id, function(err, user) {
|
||||||
|
done(err, user);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
56
config/razorpay-service.js
Normal file
56
config/razorpay-service.js
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
const Razorpay = require('razorpay');
|
||||||
|
|
||||||
|
// Initialize Razorpay client with your API key and secret
|
||||||
|
const razorpay = new Razorpay({
|
||||||
|
key_id: process.env.RAZORPAY_KEY_ID,
|
||||||
|
key_secret: process.env.RAZORPAY_KEY_SECRET
|
||||||
|
});
|
||||||
|
|
||||||
|
// Function to create an order using Razorpay API
|
||||||
|
const createRazorpayOrder = async (amount, recipid) => {
|
||||||
|
try {
|
||||||
|
const options = {
|
||||||
|
amount: amount * 100,
|
||||||
|
currency: 'INR',
|
||||||
|
receipt: recipid,
|
||||||
|
};
|
||||||
|
|
||||||
|
const order = await razorpay.orders.create(options);
|
||||||
|
return order;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error creating Razorpay order:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to process a refund using Razorpay API
|
||||||
|
const processRazorpayRefund = async (paymentId, amount) => {
|
||||||
|
try {
|
||||||
|
const refund = await razorpay.payments.refund(paymentId, { amount });
|
||||||
|
console.log("Refund processed successfully:", refund);
|
||||||
|
return refund;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error processing Razorpay refund:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to fetch details of an order using order ID
|
||||||
|
const getOrderDetails = async (orderId) => {
|
||||||
|
try {
|
||||||
|
const order = await razorpay.orders.fetch(orderId);
|
||||||
|
console.log("Order details:", order);
|
||||||
|
return order;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error fetching order details:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Export the function for creating Razorpay orders
|
||||||
|
module.exports = {
|
||||||
|
createRazorpayOrder,
|
||||||
|
processRazorpayRefund,
|
||||||
|
getOrderDetails
|
||||||
|
};
|
||||||
63
config/s3-config.js
Normal file
63
config/s3-config.js
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
const aws = require('aws-sdk');
|
||||||
|
|
||||||
|
aws.config.update({
|
||||||
|
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
||||||
|
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
||||||
|
region: process.env.AWS_REGION
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create an S3 instance
|
||||||
|
const s3 = new aws.S3();
|
||||||
|
|
||||||
|
async function uploadFileToS3(fileData, directoryPath, mimetype) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const params = {
|
||||||
|
Bucket: process.env.AWS_BUCKET_NAME,
|
||||||
|
Key: `${directoryPath}`,
|
||||||
|
Body: fileData,
|
||||||
|
ACL: 'public-read',
|
||||||
|
ContentType: mimetype
|
||||||
|
};
|
||||||
|
|
||||||
|
s3.upload(params, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error("Error uploading to S3:", err);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
console.log("Upload successful:", data.Location);
|
||||||
|
resolve(data.Location);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function deleteFileToS3(imageUrl) {
|
||||||
|
try {
|
||||||
|
return new Promise(async (resolve, reject) => {
|
||||||
|
// Extract the key from the imageUrl
|
||||||
|
const key = imageUrl.split('/').slice(3).join('/');
|
||||||
|
|
||||||
|
// Construct parameters for deleteObject operation
|
||||||
|
const deleteParams = {
|
||||||
|
Bucket: process.env.AWS_BUCKET_NAME,
|
||||||
|
Key: key,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Delete the object from S3 bucket
|
||||||
|
await s3.deleteObject(deleteParams).promise();
|
||||||
|
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error occurred while deleting file from S3:", error);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
uploadFileToS3,
|
||||||
|
deleteFileToS3,
|
||||||
|
s3
|
||||||
|
}
|
||||||
47
connection.js
Normal file
47
connection.js
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
|
let db;
|
||||||
|
|
||||||
|
const mongoOptions = {
|
||||||
|
useNewUrlParser: true,
|
||||||
|
useUnifiedTopology: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
const connectToServer = (callback) => {
|
||||||
|
if (db) {
|
||||||
|
console.warn('Already connected to the database');
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
|
|
||||||
|
const connectionUrl = process.env.MONGODB_PASSWORD
|
||||||
|
? `mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@${process.env.MONGODB_HOST}:${process.env.MONGODB_PORT}/${process.env.MONGODB_NAME}?authMechanism=DEFAULT&authSource=admin`
|
||||||
|
: `mongodb://${process.env.HOST}/${process.env.DB_NAME}`;
|
||||||
|
|
||||||
|
const message = process.env.MONGODB_PASSWORD
|
||||||
|
? 'Mongodb connected with password'
|
||||||
|
: 'Mongodb connected without password'
|
||||||
|
|
||||||
|
mongoose.connect(connectionUrl, mongoOptions, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Error connecting to MongoDB:', err);
|
||||||
|
} else {
|
||||||
|
console.log(message);
|
||||||
|
db = mongoose.connection;
|
||||||
|
}
|
||||||
|
return callback(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const disconnectFromServer = () => {
|
||||||
|
if (db) {
|
||||||
|
mongoose.disconnect();
|
||||||
|
console.log('Disconnected from MongoDB');
|
||||||
|
} else {
|
||||||
|
console.warn('Not connected to the database');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
connectToServer,
|
||||||
|
disconnectFromServer,
|
||||||
|
};
|
||||||
2911
controllers/.filepart
Normal file
2911
controllers/.filepart
Normal file
File diff suppressed because it is too large
Load Diff
4241
controllers/api.js
Normal file
4241
controllers/api.js
Normal file
File diff suppressed because it is too large
Load Diff
30
controllers/authcheck.js
Normal file
30
controllers/authcheck.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
var auth = function(req, res, next) {
|
||||||
|
if (req.session.loginuserrole){
|
||||||
|
const loginduration = 1000*60*60*6;
|
||||||
|
const newd = new Date();
|
||||||
|
const oldd = req.session.logindatetime;
|
||||||
|
const logginsessionduration = Date.parse(newd) - Date.parse(oldd);
|
||||||
|
if(loginduration >= logginsessionduration){
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
delete req.session.loginuserid ;
|
||||||
|
delete req.session.loginfirstname;
|
||||||
|
delete req.session.loginusername ;
|
||||||
|
delete req.session.loginuserrole ;
|
||||||
|
delete req.session.logindatetime ;
|
||||||
|
res.redirect('/login');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete req.session.loginuserid ;
|
||||||
|
delete req.session.loginfirstname;
|
||||||
|
delete req.session.loginusername ;
|
||||||
|
delete req.session.loginuserrole ;
|
||||||
|
delete req.session.logindatetime ;
|
||||||
|
res.redirect('/login');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = auth;
|
||||||
12
controllers/banner.js
Normal file
12
controllers/banner.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
var authcheck = require('./authcheck');
|
||||||
|
|
||||||
|
router.get('/',authcheck,function(req, res) {
|
||||||
|
var loggeduserid = req.session.loginuserid;
|
||||||
|
var loggedusername= req.session.loginusername;
|
||||||
|
var loggeduserrole= req.session.loginuserrole;
|
||||||
|
res.render('layout',{layout:'banner',loggeduserid:loggeduserid,loggedusername:loggedusername,loggeduserrole:loggeduserrole});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
90
controllers/emailer.js
Normal file
90
controllers/emailer.js
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
var nodemailer = require('nodemailer');
|
||||||
|
var mailhbs = require('nodemailer-express-handlebars');
|
||||||
|
var keys = require('../keysfile');
|
||||||
|
|
||||||
|
var mailoptions = {
|
||||||
|
viewEngine: {
|
||||||
|
extname: '.hbs',
|
||||||
|
layoutsDir: 'views/email/',
|
||||||
|
defaultLayout : 'template',
|
||||||
|
partialsDir : 'views/partials/',
|
||||||
|
helpers:{
|
||||||
|
inc: function(value){return parseInt(value) + 1;}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
viewPath: 'views/email/',
|
||||||
|
extName: '.hbs'
|
||||||
|
};
|
||||||
|
|
||||||
|
const transporter = nodemailer.createTransport({
|
||||||
|
host: 'smtp.gmail.com',
|
||||||
|
port: 587,
|
||||||
|
auth: {
|
||||||
|
user: keys.emailer.user,
|
||||||
|
pass: keys.emailer.pass,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
transporter.use('compile',mailhbs(mailoptions));
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
sendEmail: function(data) {
|
||||||
|
var maillist = [
|
||||||
|
data.cmail,
|
||||||
|
data.deemail,
|
||||||
|
];
|
||||||
|
transporter.sendMail({
|
||||||
|
from: 'Support <support@ensoimmersive.com>',
|
||||||
|
to: maillist,
|
||||||
|
subject: 'Nerolac - Colour My Space Experience',
|
||||||
|
template: 'template',
|
||||||
|
context: {
|
||||||
|
CNAME : data.cname,
|
||||||
|
CEMAIL: data.cmail,
|
||||||
|
CNUM: data.cnum,
|
||||||
|
SELECTED: data.selected,
|
||||||
|
VENAME: data.vname,
|
||||||
|
VEMAIL: data.vemail,
|
||||||
|
VENUM: data.vnum,
|
||||||
|
HASONESILVER: data.hasOneBhkSilver,
|
||||||
|
HASONEGOLD: data.hasOneBhkGold,
|
||||||
|
HASTWOGOLD: data.hasTwobhkGold,
|
||||||
|
HASEXTERIOR: data.hasExterior,
|
||||||
|
ONESILVERARR: data.oneBhkSilver,
|
||||||
|
ONEGOLDARR: data.oneBhkGold,
|
||||||
|
TWOGOLDARR: data.twoBhkGold,
|
||||||
|
EXTERIORARR: data.exterior,
|
||||||
|
SILVERLIVING: data.silverLiving,
|
||||||
|
SILVERBED : data.silverBed ,
|
||||||
|
SILVERPOOJA : data.silverPooja ,
|
||||||
|
GOLDLIVING : data.goldLiving ,
|
||||||
|
GOLDBED : data.goldBed ,
|
||||||
|
GOLDBED2 : data.goldBed2 ,
|
||||||
|
GOLDDINING : data.goldDining ,
|
||||||
|
NORTH : data.north ,
|
||||||
|
SOUTH : data.south ,
|
||||||
|
POOL : data.pool ,
|
||||||
|
HASSILVERLIVING: data.hasSilverliving,
|
||||||
|
HASSILVERBED : data.hasSilverbed ,
|
||||||
|
HASSILVERPOOJA : data.hasSilverpooja ,
|
||||||
|
HASGOLDLIVING : data.hasGoldliving ,
|
||||||
|
HASGOLDBED : data.hasGoldbed ,
|
||||||
|
HASGOLDBED2 : data.hasGoldbed2 ,
|
||||||
|
HASGOLDDINING : data.hasGolddining ,
|
||||||
|
HASNORTH : data.hasNorth ,
|
||||||
|
HASSOUTH : data.hasSouth ,
|
||||||
|
HASPOOL : data.hasPool ,
|
||||||
|
//THREESIXTY: data.threesixty,
|
||||||
|
//HASTHREESIXTY: data.hasthreesixty,
|
||||||
|
}
|
||||||
|
}, function (error, response) {
|
||||||
|
if(error){
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
console.log("email send success");
|
||||||
|
}
|
||||||
|
transporter.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
12
controllers/feedback.js
Normal file
12
controllers/feedback.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
var authcheck = require('./authcheck');
|
||||||
|
|
||||||
|
router.get('/',authcheck,function(req, res) {
|
||||||
|
var loggeduserid = req.session.loginuserid;
|
||||||
|
var loggedusername= req.session.loginusername;
|
||||||
|
var loggeduserrole= req.session.loginuserrole;
|
||||||
|
res.render('layout',{layout:'feedback',loggeduserid:loggeduserid,loggedusername:loggedusername,loggeduserrole:loggeduserrole});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
16
controllers/index.js
Normal file
16
controllers/index.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
|
||||||
|
router.use('/login' ,require('./login'));
|
||||||
|
router.use('/logout' ,require('./logout'));
|
||||||
|
router.use('/api' ,require('./api'));
|
||||||
|
router.use('/walklist' , require('./walklist'));
|
||||||
|
router.use('/walkcreation', require('./walkcreation'));
|
||||||
|
router.use('/banner' , require('./banner'));
|
||||||
|
router.use('/userlist' , require('./userlist'));
|
||||||
|
router.use('/feedback' , require('./feedback'));
|
||||||
|
router.use('/licensing',require('./licensing'))
|
||||||
|
router.get('/', function(req, res) {
|
||||||
|
res.redirect('/login');
|
||||||
|
});
|
||||||
|
module.exports = router
|
||||||
12
controllers/licensing.js
Normal file
12
controllers/licensing.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
var authcheck = require('./authcheck');
|
||||||
|
|
||||||
|
router.get('/',authcheck,function(req, res) {
|
||||||
|
var loggeduserid = req.session.loginuserid;
|
||||||
|
var loggedusername= req.session.loginusername;
|
||||||
|
var loggeduserrole= req.session.loginuserrole;
|
||||||
|
res.render('layout',{layout:'licensing',loggeduserid:loggeduserid,loggedusername:loggedusername,loggeduserrole:loggeduserrole});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
33
controllers/login.js
Normal file
33
controllers/login.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
var express = require('express')
|
||||||
|
router = express.Router();
|
||||||
|
var rpguser_data = require('../models/rpguserlist');
|
||||||
|
|
||||||
|
router.get('/',function(req, res) {
|
||||||
|
res.render('layout',{layout:'login'});
|
||||||
|
});
|
||||||
|
|
||||||
|
router.post('/login',function(req,res){
|
||||||
|
var Email = req.body.Email;
|
||||||
|
var Password= req.body.Password;
|
||||||
|
rpguser_data.findOne({ Email : Email , Password : Password }).then((result) => {
|
||||||
|
if(result)
|
||||||
|
{
|
||||||
|
console.log(result);
|
||||||
|
if(result.Userrole = "Admin"){
|
||||||
|
req.session.loginuserid =result.Userid;
|
||||||
|
req.session.loginfirstname=result.Firstname;
|
||||||
|
req.session.loginusername =result.Username;
|
||||||
|
req.session.loginuserrole =result.Userrole;
|
||||||
|
req.session.logindatetime=new Date() ;
|
||||||
|
res.send({msg:"user details found",data:result,Userrole:result.Userrole});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
res.send({msg:"user not found"});
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
res.send({msg:"user not found"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
13
controllers/logout.js
Normal file
13
controllers/logout.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
|
||||||
|
router.get('/',function(req, res) {
|
||||||
|
delete req.session.loginuserid ;
|
||||||
|
delete req.session.loginfirstname;
|
||||||
|
delete req.session.loginusername ;
|
||||||
|
delete req.session.loginuserrole ;
|
||||||
|
delete req.session.logindatetime ;
|
||||||
|
res.redirect('/login');
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
8
controllers/main.js
Normal file
8
controllers/main.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router()
|
||||||
|
|
||||||
|
router.get('/',function(req, res) {
|
||||||
|
res.render('layout',{layout:'main'});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
12
controllers/userlist.js
Normal file
12
controllers/userlist.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
var authcheck = require('./authcheck');
|
||||||
|
|
||||||
|
router.get('/',authcheck,function(req, res) {
|
||||||
|
var loggeduserid = req.session.loginuserid;
|
||||||
|
var loggedusername= req.session.loginusername;
|
||||||
|
var loggeduserrole= req.session.loginuserrole;
|
||||||
|
res.render('layout',{layout:'userlist',loggeduserid:loggeduserid,loggedusername:loggedusername,loggeduserrole:loggeduserrole});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
12
controllers/walkcreation.js
Normal file
12
controllers/walkcreation.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
var authcheck = require('./authcheck');
|
||||||
|
|
||||||
|
router.get('/',authcheck,function(req, res) {
|
||||||
|
var loggeduserid = req.session.loginuserid;
|
||||||
|
var loggedusername= req.session.loginusername;
|
||||||
|
var loggeduserrole= req.session.loginuserrole;
|
||||||
|
res.render('layout',{layout:'walkcreation',loggeduserid:loggeduserid,loggedusername:loggedusername,loggeduserrole:loggeduserrole});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
12
controllers/walklist.js
Normal file
12
controllers/walklist.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
var express = require('express')
|
||||||
|
, router = express.Router();
|
||||||
|
var authcheck = require('./authcheck');
|
||||||
|
|
||||||
|
router.get('/',authcheck,function(req, res) {
|
||||||
|
var loggeduserid = req.session.loginuserid;
|
||||||
|
var loggedusername= req.session.loginusername;
|
||||||
|
var loggeduserrole= req.session.loginuserrole;
|
||||||
|
res.render('layout',{layout:'walklist',loggeduserid:loggeduserid,loggedusername:loggedusername,loggeduserrole:loggeduserrole});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
311
index.js
Normal file
311
index.js
Normal file
@@ -0,0 +1,311 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
var rpguser_data = require('./models/rpguserlist');
|
||||||
|
var rpgcategory_data = require("./models/rpgcategorylist");
|
||||||
|
var rpgcategoryuser_data = require("./models/rpgcategoryuserlist");
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
var path = require('path');
|
||||||
|
var keys = require('./keysfile');
|
||||||
|
var multer = require('multer');
|
||||||
|
var fs = require('fs');
|
||||||
|
const { response } = require('express');
|
||||||
|
var ACCESS_TOKEN = 'pk.eyJ1IjoiZW5zby1pbW1lcnNpdmUiLCJhIjoiY2toMW01ODE4MTk0NzJxbnZyYzhsMHB1cyJ9.02d-FQX0o80XjwRPNQXzoA';
|
||||||
|
var client = require('twilio')(keys.twilio.accountSid, keys.twilio.authToken, { lazyLoading: true });
|
||||||
|
const app = express();
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
const port = process.env.PORT || 8080;
|
||||||
|
mongoose.Promise = global.Promise;
|
||||||
|
mongoose.connect("mongodb://localhost:27017/rpgheritagewalk", {
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
const isNullOrUndefined = (val) => val === null || val === undefined || val === '' || val.length===0;
|
||||||
|
|
||||||
|
function randomString(length, chars) {
|
||||||
|
var result = '';
|
||||||
|
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
app.get('/server', function (req, res) {
|
||||||
|
res.send("Server work");
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/addrpgcategory", async function (req, res) {
|
||||||
|
var Category = req.body.Category;
|
||||||
|
if (isNullOrUndefined(Category)) {
|
||||||
|
res.status(409).send({ msg: "Empty Category Found" });
|
||||||
|
} else {
|
||||||
|
|
||||||
|
await new rpgcategory_data({ Category: Category }).save();
|
||||||
|
|
||||||
|
|
||||||
|
res.status(200).send({ msg: "Category added successfully" });
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post("/addrpgcategoryuser", async function (req, res) {
|
||||||
|
var Userid = req.body.Userid;
|
||||||
|
var Categories = req.body.Categories;
|
||||||
|
var MapId = req.body.MapId;
|
||||||
|
var MapName = req.body.MapName;
|
||||||
|
var Rating = req.body.Rating;
|
||||||
|
var NoofPOIVisited = req.body.NoofPOIVisited;
|
||||||
|
var TotalNoOfPOI = req.body.TotalNoOfPOI;
|
||||||
|
var Language = req.body.Language;
|
||||||
|
var result = await rpgcategoryuser_data.findOne({ Userid: Userid });
|
||||||
|
if (isNullOrUndefined(result)) {
|
||||||
|
await new rpgcategoryuser_data({ Categories: Categories, MapId: MapId, Userid: Userid, MapName: MapName, Rating: Rating, NoofPOIVisited: NoofPOIVisited, TotalNoOfPOI: TotalNoOfPOI, Language: Language }).save();
|
||||||
|
res.status(200).send({ msg: "Data added successfully" });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await rpgcategoryuser_data.updateOne({
|
||||||
|
$set: {
|
||||||
|
|
||||||
|
Categories: Categories,
|
||||||
|
MapId: MapId,
|
||||||
|
MapName: MapName,
|
||||||
|
Rating: Rating,
|
||||||
|
NoofPOIVisited: NoofPOIVisited,
|
||||||
|
TotalNoOfPOI: TotalNoOfPOI,
|
||||||
|
Language: Language
|
||||||
|
}
|
||||||
|
});
|
||||||
|
res.status(200).send({ msg: "Data Updated successfully" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post('/getuserlocation', async function (req, res) {
|
||||||
|
|
||||||
|
var latitude = req.body.latitude;
|
||||||
|
var longitude = req.body.longitude;
|
||||||
|
|
||||||
|
var url = 'https://api.mapbox.com/geocoding/v5/mapbox.places/'
|
||||||
|
+ longitude + ', ' + latitude
|
||||||
|
+ '.json?access_token=' + ACCESS_TOKEN;
|
||||||
|
|
||||||
|
await fetch(url).then((resp) => {
|
||||||
|
return resp.json()
|
||||||
|
}).then((resp) => {
|
||||||
|
var geoData = resp.features[0].context;
|
||||||
|
var region, city, postcode;
|
||||||
|
for (i = 0; i < geoData.length; i++) {
|
||||||
|
if (geoData[i].id.indexOf('region') >= 0) {
|
||||||
|
region = geoData[i].text;
|
||||||
|
}
|
||||||
|
if (geoData[i].id.indexOf('place') >= 0) {
|
||||||
|
city = geoData[i].text;
|
||||||
|
}
|
||||||
|
if (geoData[i].id.indexOf('postcode') >= 0) {
|
||||||
|
postcode = geoData[i].text;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (isNullOrUndefined(region) && isNullOrUndefined(city)) {
|
||||||
|
res.status(404).send({ geoData: "Map Detail Not found" });
|
||||||
|
} else {
|
||||||
|
res.status(200).send({ geoData: { region, city, postcode } });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}).catch((err) => {
|
||||||
|
res.status(404).send({ geoData: "Map Detail Not found" });
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
app.post('/getrpguser', async function (req, res) {
|
||||||
|
var Email = req.body.Email;
|
||||||
|
var result = await rpguser_data.findOne({ Email: Email });
|
||||||
|
var categoryresult = await rpgcategoryuser_data.findOne({ Userid: Email });
|
||||||
|
if (isNullOrUndefined(result) && isNullOrUndefined(categoryresult)) {
|
||||||
|
res.status(404).send({ msg: "user not found" });
|
||||||
|
} else {
|
||||||
|
res.status(200).send({ msg: "user details found", data: { result, categoryresult } });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get("/categorylist", async function (req, res) {
|
||||||
|
var Category = await rpgcategory_data.find({}, { Category: 1 });
|
||||||
|
if (isNullOrUndefined(Category)) {
|
||||||
|
res.status(404).send({ msg: "No Category Found" });
|
||||||
|
} else {
|
||||||
|
res.status(200).send({ Category });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post('/addrpguser', function (req, res) {
|
||||||
|
var Userid = randomString(10, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
|
||||||
|
var Firstname = req.body.Firstname;
|
||||||
|
var Lastname = req.body.Lastname;
|
||||||
|
var Email = req.body.Email;
|
||||||
|
var BirthYear = req.body.BirthYear;
|
||||||
|
var Gender = req.body.Gender;
|
||||||
|
var DeviceId = req.body.DeviceId;
|
||||||
|
var Username = Firstname + ' ' + Lastname;
|
||||||
|
var Userrole = req.body.Userrole;
|
||||||
|
var Password = req.body.Password;
|
||||||
|
var ProfilePic = req.body.ProfilePic;
|
||||||
|
var Language = req.body.Language;
|
||||||
|
var MobileNo = req.body.MobileNo;
|
||||||
|
var TotalPoints = '';
|
||||||
|
var StepsTaken = '';
|
||||||
|
rpguser_data.findOne({ Userid: Userid }).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
Userid = randomString(10, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rpguser_data.findOne({ Email: Email, MobileNo: MobileNo }).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
res.send({ msg: "user already exists" });
|
||||||
|
} else {
|
||||||
|
new rpguser_data({
|
||||||
|
Userid: Userid,
|
||||||
|
Firstname: Firstname,
|
||||||
|
Lastname: Lastname,
|
||||||
|
Email: Email,
|
||||||
|
BirthYear: BirthYear,
|
||||||
|
Gender: Gender,
|
||||||
|
DeviceId: DeviceId,
|
||||||
|
Username: Username,
|
||||||
|
Userrole: Userrole,
|
||||||
|
Password: Password,
|
||||||
|
ProfilePic: ProfilePic,
|
||||||
|
Language: Language,
|
||||||
|
MobileNo: MobileNo,
|
||||||
|
TotalPoints: TotalPoints,
|
||||||
|
StepsTaken: StepsTaken,
|
||||||
|
DateofRegistration: new Date()
|
||||||
|
}).save();
|
||||||
|
res.send({ msg: "user details added" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.post('/updaterpguserprofile', function (req, res) {
|
||||||
|
|
||||||
|
var storage = multer.diskStorage({
|
||||||
|
destination: function (req, file, cb) {
|
||||||
|
const storagepath = './public/images/profle';
|
||||||
|
fs.exists(storagepath, exist => {
|
||||||
|
if (!exist) {
|
||||||
|
fs.mkdir(storagepath, { recursive: true }, (err) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return cb(null, storagepath)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return cb(null, storagepath)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
filename: function (req, file, cb) {
|
||||||
|
cb(null, file.originalname);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var upload = multer({
|
||||||
|
storage: storage,
|
||||||
|
fileFilter: (req, file, cb) => {
|
||||||
|
if (file.mimetype == "image/png" || file.mimetype == "image/gif" || file.mimetype == "image/jpg" || file.mimetype == "image/jpeg") {
|
||||||
|
cb(null, true);
|
||||||
|
} else {
|
||||||
|
cb(null, false);
|
||||||
|
return cb(new Error('Only .png, .gif, .jpg and .jpeg format allowed!'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
limits: { fieldSize: 50000000 }
|
||||||
|
}).single('file');
|
||||||
|
upload(req, res, async function (err) {
|
||||||
|
// check for error thrown by multer- file size etc
|
||||||
|
if (err) {
|
||||||
|
// An unknown error occurred when uploading.
|
||||||
|
//console.log("Unknown error occured",err);
|
||||||
|
res.send({ message: "Unknown error occured", err: err });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Everything went fine.
|
||||||
|
// var Buffer = req.file;
|
||||||
|
|
||||||
|
var file = req.body.file;
|
||||||
|
if (isNullOrUndefined(file)) {
|
||||||
|
res.send({ message: "file is not present" });
|
||||||
|
|
||||||
|
} else {
|
||||||
|
var format = req.body.format;
|
||||||
|
var filename = `${randomString(5, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')}.${format}`;
|
||||||
|
var path = `public/images/profile/${filename}`;
|
||||||
|
console.log(path);
|
||||||
|
fs.writeFile(path, file, function (err) {
|
||||||
|
if (err) throw err;
|
||||||
|
console.log('Saved!');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!path) {
|
||||||
|
//console.log('Please choose a file');
|
||||||
|
res.send({ message: "Please choose a file" });
|
||||||
|
} else {
|
||||||
|
|
||||||
|
var Userid = req.body.Userid;
|
||||||
|
var ProfilePic = '';
|
||||||
|
var newfilename = Userid + '-profilepic';
|
||||||
|
var securelink = req.hostname == 'localhost' || req.hostname == '127.0.0.1' ? 'http' : 'https';
|
||||||
|
var urlpath = securelink + '://' + req.get('host');
|
||||||
|
var filename = filename;
|
||||||
|
var filenamepath = "public/images/profile/" + filename;
|
||||||
|
var newfilenamepath = "public/images/UserProfile/" + newfilename + ".jpeg";
|
||||||
|
var fullnewfilenamepath = urlpath + "/images/UserProfile/" + newfilename + ".jpeg";
|
||||||
|
ProfilePic = fullnewfilenamepath;
|
||||||
|
console.log(fullnewfilenamepath);
|
||||||
|
fs.rename(filenamepath, newfilenamepath, function (err) {
|
||||||
|
if (err) {
|
||||||
|
console.log('ERROR: ' + err);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rpguser_data.findOneAndUpdate({ Userid: Userid }, {
|
||||||
|
$set: {
|
||||||
|
ProfilePic: ProfilePic
|
||||||
|
}
|
||||||
|
}).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
res.send({ msg: "user profilepic updated", data: result });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res.send({ msg: "user profilepic updation failed" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/appVersions',async function(req,res){
|
||||||
|
var appVersion = {
|
||||||
|
android : "1.0.0",
|
||||||
|
ios : "1.0.0"
|
||||||
|
}
|
||||||
|
res.status(200).send({appVersion});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`Server Running on port ${port} `)
|
||||||
|
})
|
||||||
|
|
||||||
14
keys.js
Normal file
14
keys.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
module.exports = {
|
||||||
|
google:{
|
||||||
|
clientID: '288154823643-sqv4i0uk371rfrfqv5snfo6bmhgejs7j.apps.googleusercontent.com',
|
||||||
|
clientSecret:'1d7ge7W3_iu4SOPC7HV5Kxel',
|
||||||
|
},
|
||||||
|
dbconfigs:{
|
||||||
|
adminsCollection:"admins",
|
||||||
|
vendorsCollection:"vendors",
|
||||||
|
customerLikes:"customerLikes",
|
||||||
|
},
|
||||||
|
session:{
|
||||||
|
cookieKey:"dgfjhdsgfjdsgjhghjsdf"
|
||||||
|
}
|
||||||
|
};
|
||||||
29
keysfile.js
Normal file
29
keysfile.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
module.exports = {
|
||||||
|
google:{
|
||||||
|
clientID: '254253177337-hir9kqg3ovtr104pdu13ohtic8rsuurn.apps.googleusercontent.com',
|
||||||
|
clientSecret:'6j8jf2hdRHN6_QokDEAs1O7J',
|
||||||
|
// redirectURL:'https://nerolackansai.co.in/login/google/redirect',
|
||||||
|
redirectURL:'http://localhost:3000/login/google/redirect',
|
||||||
|
},
|
||||||
|
dbconfigs:{
|
||||||
|
adminsCollection:"admins",
|
||||||
|
vendorsCollection:"vendors",
|
||||||
|
customerLikes:"customerLikes",
|
||||||
|
},
|
||||||
|
session:{
|
||||||
|
cookieKey:"dgfjhdsgfjdsgjhghjsdf"
|
||||||
|
},
|
||||||
|
emailer:{
|
||||||
|
user: 'support@ensoimmersive.com',
|
||||||
|
pass: 'Teamens0',
|
||||||
|
},
|
||||||
|
admin:{
|
||||||
|
name:'NerolacAdmin',
|
||||||
|
password:'abcd@1234',
|
||||||
|
},
|
||||||
|
twilio:{
|
||||||
|
accountSid:'AC566d5a438d076678df24a050c9283105',
|
||||||
|
//authToken :'cd1df612b5e38b92ba330d49e3a48bfc',
|
||||||
|
authToken :'5e0b1ced7a6de98f9d49056357ca1aae'
|
||||||
|
}
|
||||||
|
};
|
||||||
30
models/adminmodel.js
Normal file
30
models/adminmodel.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const adminSchema = new Schema({
|
||||||
|
username:String,
|
||||||
|
googleId:String,
|
||||||
|
email:String
|
||||||
|
});
|
||||||
|
|
||||||
|
const Admin = mongoose.model('admin', adminSchema);
|
||||||
|
|
||||||
|
//create a default admin if no user exists
|
||||||
|
Admin.findOne({email:'harprasad@ensoimmersive.com'},function(err,currentUser){
|
||||||
|
if(err){
|
||||||
|
console.log(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(currentUser){
|
||||||
|
//do nothing if user exists
|
||||||
|
}else{
|
||||||
|
new Admin({
|
||||||
|
username:"harprasad",
|
||||||
|
email:"harprasad@ensoimmersive.com",
|
||||||
|
googleId:"nana",
|
||||||
|
}).save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = Admin;
|
||||||
14
models/bannermodel.js
Normal file
14
models/bannermodel.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const BannerSchema = new Schema({
|
||||||
|
location_name: String,
|
||||||
|
image: String,
|
||||||
|
created_at: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
}
|
||||||
|
}, { versionKey: false });
|
||||||
|
|
||||||
|
const Banner = mongoose.model('banner', BannerSchema);
|
||||||
|
module.exports = Banner;
|
||||||
75
models/customerdata.js
Normal file
75
models/customerdata.js
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const customerDataSchema = new Schema({
|
||||||
|
DateofRegistration:Date,
|
||||||
|
vendorname:String,
|
||||||
|
vendorid:String,
|
||||||
|
vendornumber:String,
|
||||||
|
customername:String,
|
||||||
|
gender:String,
|
||||||
|
email:String,
|
||||||
|
number:String,
|
||||||
|
likedcolors:[String],
|
||||||
|
likedshadecode:[String],
|
||||||
|
likednames:[String],
|
||||||
|
selectedcolors:[String],
|
||||||
|
onebhksilver:[String],
|
||||||
|
onebhkgold:[String],
|
||||||
|
twobhkgold:[String],
|
||||||
|
exterior:[String],
|
||||||
|
SilverBedhexs :[String],
|
||||||
|
SilverBednames :[String],
|
||||||
|
SilverBedshades :[String],
|
||||||
|
SilverLivinghexs :[String],
|
||||||
|
SilverLivingnames :[String],
|
||||||
|
SilverLivingshades:[String],
|
||||||
|
SilverPoojahexs :[String],
|
||||||
|
SilverPoojanames :[String],
|
||||||
|
SilverPoojashades :[String],
|
||||||
|
GoldLivinghexs :[String],
|
||||||
|
GoldLivingnames :[String],
|
||||||
|
GoldLivingshades :[String],
|
||||||
|
GoldBedhexs :[String],
|
||||||
|
GoldBednames :[String],
|
||||||
|
GoldBedshades :[String],
|
||||||
|
GoldBed2hexs :[String],
|
||||||
|
GoldBed2names :[String],
|
||||||
|
GoldBed2shades :[String],
|
||||||
|
GoldDininghexs :[String],
|
||||||
|
GoldDiningnames :[String],
|
||||||
|
GoldDiningshades :[String],
|
||||||
|
Northhexs :[String],
|
||||||
|
Northnames :[String],
|
||||||
|
Northshades :[String],
|
||||||
|
Southhexs :[String],
|
||||||
|
Southnames :[String],
|
||||||
|
Southshades :[String],
|
||||||
|
Poolhexs :[String],
|
||||||
|
Poolnames :[String],
|
||||||
|
Poolshades :[String],
|
||||||
|
threesixty:[String],
|
||||||
|
city:String,
|
||||||
|
state:String,
|
||||||
|
time:String,
|
||||||
|
selected:Number,
|
||||||
|
sessiontime:Number,
|
||||||
|
});
|
||||||
|
|
||||||
|
const CustomerEntry = mongoose.model('customerdata', customerDataSchema);
|
||||||
|
|
||||||
|
// for(var i = 0 ; i < 10 ; i++){
|
||||||
|
// new CustomerEntry({
|
||||||
|
// customername:"HP",
|
||||||
|
// email:"harprasad@ensoimmersive.com",
|
||||||
|
// number:"9040437295",
|
||||||
|
// location:"-15.623028, 15.388667",
|
||||||
|
// gender:"Male",
|
||||||
|
// likedcolors:['#FFB0BB','#BBAABB','#FFAABB'],
|
||||||
|
// vendorname:"vickey",
|
||||||
|
// vendornumber:"8585446520",
|
||||||
|
// vendorid:"GHFGII786567557454",
|
||||||
|
// DateofRegistration:new Date(),
|
||||||
|
// }).save();
|
||||||
|
// }
|
||||||
|
module.exports = CustomerEntry;
|
||||||
16
models/guesttogglemodel.js
Normal file
16
models/guesttogglemodel.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const GuestToggleSchema = new Schema({
|
||||||
|
status: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
}
|
||||||
|
}, { versionKey: false });
|
||||||
|
|
||||||
|
const GuestToggle = mongoose.model('GuestToggle', GuestToggleSchema);
|
||||||
|
module.exports = GuestToggle;
|
||||||
51
models/guidedwalkmodel.js
Normal file
51
models/guidedwalkmodel.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const addressSchema = new Schema(
|
||||||
|
{
|
||||||
|
address: { type: String },
|
||||||
|
longitude: { type: String },
|
||||||
|
latitude: { type: String },
|
||||||
|
},
|
||||||
|
{ _id: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
const GuidedWalkBookingSchema = new Schema({
|
||||||
|
|
||||||
|
time_slot: Date,
|
||||||
|
members_count: String,
|
||||||
|
booker_first_name: String,
|
||||||
|
booker_last_name: String,
|
||||||
|
email: String,
|
||||||
|
date: String,
|
||||||
|
pan_card: String,
|
||||||
|
start: String,
|
||||||
|
end: String,
|
||||||
|
telephone_number: String,
|
||||||
|
walk_id: {
|
||||||
|
type: mongoose.Schema.Types.ObjectId,
|
||||||
|
ref: 'rpgwalklist'
|
||||||
|
},
|
||||||
|
user_id: {
|
||||||
|
type: mongoose.Schema.Types.ObjectId,
|
||||||
|
ref: 'rpguserlist'
|
||||||
|
},
|
||||||
|
walk_address: String,
|
||||||
|
pickup_location: addressSchema,
|
||||||
|
amount: Number,
|
||||||
|
duration: String,
|
||||||
|
order_id: String,
|
||||||
|
payment_id: String,
|
||||||
|
ticket_pdf: String,
|
||||||
|
is_paid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
}
|
||||||
|
}, { versionKey: false });
|
||||||
|
|
||||||
|
const GuidedWalkBooking = mongoose.model('GuidedWalkBooking', GuidedWalkBookingSchema);
|
||||||
|
module.exports = GuidedWalkBooking;
|
||||||
12
models/licensingmodel.js
Normal file
12
models/licensingmodel.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpgLicensingSchema = new Schema({
|
||||||
|
toggleid:String,
|
||||||
|
togglename:String,
|
||||||
|
togglestatus:Number,
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpglicensing = mongoose.model('rpglicensing', rpgLicensingSchema);
|
||||||
|
module.exports = newRpglicensing;
|
||||||
11
models/rpgcategorylist.js
Normal file
11
models/rpgcategorylist.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpgcategorySchema = new Schema({
|
||||||
|
Category :{type:[String]},
|
||||||
|
code : Number,
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpgcategory = mongoose.model('rpgcategory', rpgcategorySchema);
|
||||||
|
module.exports = newRpgcategory;
|
||||||
18
models/rpgcategoryuserlist.js
Normal file
18
models/rpgcategoryuserlist.js
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpgcategoryuserSchema = new Schema({
|
||||||
|
Userid :String,
|
||||||
|
MapId: String,
|
||||||
|
MapName : String,
|
||||||
|
Rating : String,
|
||||||
|
NoofPOIVisited : String,
|
||||||
|
TotalNoOfPOI : String,
|
||||||
|
Map_Thumbnail:String,
|
||||||
|
Language : String,
|
||||||
|
Categories : String,
|
||||||
|
POI_TimeTaken : String,
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpgcategoryuser = mongoose.model('rpgcategoryuser', rpgcategoryuserSchema);
|
||||||
|
module.exports = newRpgcategoryuser;
|
||||||
33
models/rpgratingquestion.js
Normal file
33
models/rpgratingquestion.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpgquestionSchema = new Schema({
|
||||||
|
|
||||||
|
|
||||||
|
MapQuestions : [
|
||||||
|
{
|
||||||
|
MapQuestion_ID: String,
|
||||||
|
Question: String,
|
||||||
|
Rating:String,
|
||||||
|
Feedback_Map : String,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
AppQuestions : [
|
||||||
|
{
|
||||||
|
AppQuestion_ID: String,
|
||||||
|
Question: String,
|
||||||
|
Rating:String,
|
||||||
|
Feedback_App : String,
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
id: String,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpgquestion = mongoose.model('rpgratingquestion', rpgquestionSchema);
|
||||||
|
module.exports = newRpgquestion;
|
||||||
20
models/rpguserapprating.js
Normal file
20
models/rpguserapprating.js
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpguserappratingSchema = new Schema({
|
||||||
|
|
||||||
|
UserID :String,
|
||||||
|
AppQuestions:
|
||||||
|
[
|
||||||
|
{
|
||||||
|
AppQuestion_ID: String,
|
||||||
|
Question: String,
|
||||||
|
Rating:String,
|
||||||
|
Feedback_App : String,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpguserapprating = mongoose.model('rpguserapprating', rpguserappratingSchema);
|
||||||
|
module.exports = newRpguserapprating;
|
||||||
55
models/rpguserlist.js
Normal file
55
models/rpguserlist.js
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpguserlistSchema = new Schema({
|
||||||
|
Userid: String,
|
||||||
|
Firstname: String,
|
||||||
|
Lastname: String,
|
||||||
|
Email: String,
|
||||||
|
BirthYear: String,
|
||||||
|
Gender: String,
|
||||||
|
Username: String,
|
||||||
|
Userrole: String,
|
||||||
|
Password: String,
|
||||||
|
ProfilePic: String,
|
||||||
|
Categories: Array,
|
||||||
|
Language: String,
|
||||||
|
DeviceID: String,
|
||||||
|
Platform: String,
|
||||||
|
MobileNo: String,
|
||||||
|
MobileOTP: Number,
|
||||||
|
TotalPoints: String,
|
||||||
|
StepsTaken: String,
|
||||||
|
AppFeedback: String,
|
||||||
|
AppRating: Number,
|
||||||
|
client_id: String,
|
||||||
|
client_secret: String,
|
||||||
|
refresh_token: String,
|
||||||
|
access_token: String,
|
||||||
|
WalkDetails: [
|
||||||
|
{
|
||||||
|
Map_ID: String,
|
||||||
|
Map_Feedback: String,
|
||||||
|
Map_StartTime: String,
|
||||||
|
Map_Endtime: String,
|
||||||
|
Map_Status: String,
|
||||||
|
Map_Rating: Number,
|
||||||
|
Current_POI: Number,
|
||||||
|
Distance_Travelled: Number,
|
||||||
|
POI_Data: [
|
||||||
|
{
|
||||||
|
POI_ID: String,
|
||||||
|
AmbleFeedback: String,
|
||||||
|
AmbleStartTime: String,
|
||||||
|
AmbleEndtime: String,
|
||||||
|
AmbleStatus: String,
|
||||||
|
AmbleRating: Number
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
DateofRegistration: Date
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpguserlistEntry = mongoose.model('rpguserlist', rpguserlistSchema);
|
||||||
|
module.exports = newRpguserlistEntry;
|
||||||
23
models/rpgusermaprating.js
Normal file
23
models/rpgusermaprating.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpgusermapratingSchema = new Schema({
|
||||||
|
|
||||||
|
Map_ID : String,
|
||||||
|
UserID :String,
|
||||||
|
MapName:String,
|
||||||
|
MapQuestions :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
MapQuestion_ID: String,
|
||||||
|
Question: String,
|
||||||
|
Rating:String,
|
||||||
|
Feedback_Map : String,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpgusermaprating = mongoose.model('rpgusermaprating', rpgusermapratingSchema);
|
||||||
|
module.exports = newRpgusermaprating;
|
||||||
11
models/rpgwalkcategory.js
Normal file
11
models/rpgwalkcategory.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const rpgwalkcategorySchema = new Schema({
|
||||||
|
Category_Name :String,
|
||||||
|
Category_Value :String,
|
||||||
|
DateofRegistration:Date
|
||||||
|
});
|
||||||
|
|
||||||
|
const newRpgwalkcategoryEntry = mongoose.model('rpgwalkcategory', rpgwalkcategorySchema);
|
||||||
|
module.exports = newRpgwalkcategoryEntry;
|
||||||
79
models/rpgwalklist.js
Normal file
79
models/rpgwalklist.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const TimeSlotsSchema = new Schema(
|
||||||
|
{
|
||||||
|
Date: String,
|
||||||
|
Time_Slots: [String],
|
||||||
|
},
|
||||||
|
{ _id: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
const rpgwalklistSchema = new Schema({
|
||||||
|
Map_ID: String,
|
||||||
|
Map_Name: String,
|
||||||
|
Map_Description: String,
|
||||||
|
Trivia_List: [
|
||||||
|
{
|
||||||
|
Trivia_ID: String,
|
||||||
|
Trivia: String
|
||||||
|
}
|
||||||
|
],
|
||||||
|
Map_Thumbnail_URL: String,
|
||||||
|
Map_Status: String,
|
||||||
|
Map_Type: String,
|
||||||
|
Map_Category: [String],
|
||||||
|
Map_Rating: Number,
|
||||||
|
Map_Startlongitude: Number,
|
||||||
|
Map_Startlatitude: Number,
|
||||||
|
Map_Version: Number,
|
||||||
|
Sort_Number: Number,
|
||||||
|
Walk_Type: String,
|
||||||
|
Amount_Per_Person: Number,
|
||||||
|
Maximum_Persons_Allowed: Number,
|
||||||
|
Walk_Duration: Number,
|
||||||
|
Total_POI: Number,
|
||||||
|
TotalWalkDistance: String,
|
||||||
|
ArScene_AB_Url: String,
|
||||||
|
ArPoi: String,
|
||||||
|
AssetBundle_Name: String,
|
||||||
|
AssetBundle_IOS_Name: String,
|
||||||
|
PeriscopeARScene_Name: String,
|
||||||
|
PeriscopeARScene_URL: String,
|
||||||
|
PeriscopeARScene_IOS_URL: String,
|
||||||
|
ArScene_AB_IOS_Url: String,
|
||||||
|
Map_Ratting: String,
|
||||||
|
Map_Zip_Url: String,
|
||||||
|
Total_Trivia: String,
|
||||||
|
Dates: [TimeSlotsSchema],
|
||||||
|
Map_Polycoords: [
|
||||||
|
{
|
||||||
|
lng: Number,
|
||||||
|
lat: Number
|
||||||
|
}
|
||||||
|
],
|
||||||
|
POI_List: [
|
||||||
|
{
|
||||||
|
POI_ID: String,
|
||||||
|
POI_Number: Number,
|
||||||
|
POI_Name: String,
|
||||||
|
POI_Address: String,
|
||||||
|
POI_Description: String,
|
||||||
|
POI_Type: String,
|
||||||
|
POI_Thumbnail_URL: Array,
|
||||||
|
POI_Status: String,
|
||||||
|
POI_Content_Type: String,
|
||||||
|
POI_Content_URL: String,
|
||||||
|
POI_Trigger_Area: Number,
|
||||||
|
Latitude: Number,
|
||||||
|
Longitude: Number
|
||||||
|
}
|
||||||
|
],
|
||||||
|
DateofRegistration: Date,
|
||||||
|
});
|
||||||
|
|
||||||
|
// rpgwalklistSchema.index({ Map_Startlongitude: '2dsphere', Map_Startlatitude: '2dsphere' });
|
||||||
|
|
||||||
|
|
||||||
|
const newRpgwalklistEntry = mongoose.model('rpgwalklist', rpgwalklistSchema);
|
||||||
|
module.exports = newRpgwalklistEntry;
|
||||||
15
models/userratingmodel.js
Normal file
15
models/userratingmodel.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const UserFeedBackSchema = new Schema({
|
||||||
|
|
||||||
|
User_Id: {
|
||||||
|
type: mongoose.Schema.Types.ObjectId,
|
||||||
|
ref: 'rpguserlist'
|
||||||
|
},
|
||||||
|
Description: String,
|
||||||
|
Rating: Number,
|
||||||
|
});
|
||||||
|
|
||||||
|
const UserFeedback = mongoose.model('user-feedback', UserFeedBackSchema);
|
||||||
|
module.exports = UserFeedback;
|
||||||
114
nginx_content
Normal file
114
nginx_content
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
##
|
||||||
|
# You should look at the following URL's in order to grasp a solid understanding
|
||||||
|
# of Nginx configuration files in order to fully unleash the power of Nginx.
|
||||||
|
# http://wiki.nginx.org/Pitfalls
|
||||||
|
# http://wiki.nginx.org/QuickStart
|
||||||
|
# http://wiki.nginx.org/Configuration
|
||||||
|
#
|
||||||
|
# Generally, you will want to move this file somewhere, and start with a clean
|
||||||
|
# file but keep this around for reference. Or just disable in sites-enabled.
|
||||||
|
#
|
||||||
|
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
|
||||||
|
##
|
||||||
|
|
||||||
|
# Default server configuration
|
||||||
|
#
|
||||||
|
server {
|
||||||
|
# listen 80 default_server;
|
||||||
|
# listen [::]:80 default_server;
|
||||||
|
|
||||||
|
# SSL configuration
|
||||||
|
#
|
||||||
|
listen 443 ssl default_server;
|
||||||
|
listen [::]:443 ssl default_server;
|
||||||
|
#
|
||||||
|
# Note: You should disable gzip for SSL traffic.
|
||||||
|
# See: https://bugs.debian.org/773332
|
||||||
|
#
|
||||||
|
# Read up on ssl_ciphers to ensure a secure configuration.
|
||||||
|
# See: https://bugs.debian.org/765782
|
||||||
|
#
|
||||||
|
# Self signed certs generated by the ssl-cert package
|
||||||
|
# Don't use them in a production server!
|
||||||
|
#
|
||||||
|
# include snippets/snakeoil.conf;
|
||||||
|
|
||||||
|
root /var/www/html;
|
||||||
|
|
||||||
|
# Add index.php to the list if you are using PHP
|
||||||
|
index index.html index.htm index.nginx-debian.html;
|
||||||
|
|
||||||
|
server_name www.sparkprogress.com;
|
||||||
|
ssl_certificate /home/ensoim/sparkprogress_www.crt;
|
||||||
|
ssl_certificate_key /home/ensoim/sparkprogress_www.key;
|
||||||
|
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||||
|
#ssl_prefer_server_ciphers on;
|
||||||
|
#ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
|
||||||
|
|
||||||
|
location / {
|
||||||
|
# First attempt to serve request as file, then
|
||||||
|
# as directory, then fall back to displaying a 404.
|
||||||
|
#try_files $uri $uri/ =404;
|
||||||
|
proxy_pass http://localhost:82;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /staging/ {
|
||||||
|
rewrite ^/staging/(.*)$ /$1 break;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
proxy_pass http://localhost:81;
|
||||||
|
}
|
||||||
|
|
||||||
|
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
|
||||||
|
#
|
||||||
|
#location ~ \.php$ {
|
||||||
|
# include snippets/fastcgi-php.conf;
|
||||||
|
#
|
||||||
|
# # With php7.0-cgi alone:
|
||||||
|
# fastcgi_pass 127.0.0.1:9000;
|
||||||
|
# # With php7.0-fpm:
|
||||||
|
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# deny access to .htaccess files, if Apache's document root
|
||||||
|
# concurs with nginx's one
|
||||||
|
#
|
||||||
|
#location ~ /\.ht {
|
||||||
|
# deny all;
|
||||||
|
#}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Virtual Host configuration for example.com
|
||||||
|
#
|
||||||
|
# You can move that to a different file under sites-available/ and symlink that
|
||||||
|
# to sites-enabled/ to enable it.
|
||||||
|
#
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
server_name www.sparkprogress.me;
|
||||||
|
rewrite ^/(.*) https://www.sparkprogress.me/$1 permanent;
|
||||||
|
|
||||||
|
# root /var/www/example.com;
|
||||||
|
# index index.html;
|
||||||
|
|
||||||
|
# location / {
|
||||||
|
# try_files $uri $uri/ =404;
|
||||||
|
# }
|
||||||
|
}
|
||||||
11659
package-lock.json
generated
Normal file
11659
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
69
package.json
Normal file
69
package.json
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"name": "rpgwalk",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "rpgwalk project",
|
||||||
|
"main": "app3.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "node index.js",
|
||||||
|
"home": "node app3.js",
|
||||||
|
"serve": "nodemon app3.js"
|
||||||
|
},
|
||||||
|
"author": "Pavankumar",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"apple-client-secret-generator": "^1.0.3",
|
||||||
|
"apple-sign-in-rest": "^1.0.3",
|
||||||
|
"apple-signin": "^1.0.9",
|
||||||
|
"apple-signin-auth": "^1.7.4",
|
||||||
|
"aws-sdk": "^2.1032.0",
|
||||||
|
"base64-to-image": "^1.0.2",
|
||||||
|
"bigdatacloud-reverse-geocoding": "^0.2.0",
|
||||||
|
"body-parser": "^1.18.2",
|
||||||
|
"cookie-session": "^2.0.0-rc.1",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"dotenv": "^16.4.1",
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"express-handlebars": "^3.0.0",
|
||||||
|
"express-session": "^1.15.6",
|
||||||
|
"file-base64": "^1.0.0",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
|
"image-size": "^1.1.1",
|
||||||
|
"jquery": "^3.3.1",
|
||||||
|
"jQuery": "^1.7.4",
|
||||||
|
"jsdom": "^11.11.0",
|
||||||
|
"json2csv": "^4.3.3",
|
||||||
|
"jsonwebtoken": "^8.5.1",
|
||||||
|
"knockout.decimal": "^2.0.0",
|
||||||
|
"lodash": "^4.17.10",
|
||||||
|
"lodash.keys": "^4.2.0",
|
||||||
|
"mapbox": "^1.0.0-beta10",
|
||||||
|
"mapbox-geocoding": "^0.1.5",
|
||||||
|
"mongodb": "^4.6.0",
|
||||||
|
"mongoose": "^5.0.18",
|
||||||
|
"mongoose-to-csv": "^0.1.1",
|
||||||
|
"multer": "^1.4.1",
|
||||||
|
"nexmo": "^2.3.2",
|
||||||
|
"node-cron": "^2.0.3",
|
||||||
|
"node-fetch": "^2.6.1",
|
||||||
|
"node-geocoder": "^3.27.0",
|
||||||
|
"node-modules": "^1.0.1",
|
||||||
|
"nodemailer": "^4.6.8",
|
||||||
|
"nodemailer-express-handlebars": "^3.0.0",
|
||||||
|
"nodemailer-mailgun-transport": "^1.4.0",
|
||||||
|
"nodemon": "^3.0.3",
|
||||||
|
"passport": "^0.4.0",
|
||||||
|
"passport-google-oauth": "^1.0.0",
|
||||||
|
"passport-google-oauth20": "^1.0.0",
|
||||||
|
"pm2": "^5.1.2",
|
||||||
|
"puppeteer": "^22.6.2",
|
||||||
|
"razorpay": "^2.9.3",
|
||||||
|
"request": "^2.88.2",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"socket.io": "^2.1.1",
|
||||||
|
"stream": "0.0.2",
|
||||||
|
"twilio": "^3.22.0",
|
||||||
|
"validator": "^10.1.0",
|
||||||
|
"zip-local": "^0.3.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
public/AuthKey_3BHBGB5T8A.p8
Normal file
6
public/AuthKey_3BHBGB5T8A.p8
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg4kyDzDnbWyQEBn4m
|
||||||
|
AJvWRFvBgbJRnNHuHF27dTkPg1KgCgYIKoZIzj0DAQehRANCAASQzpJflSZCqplz
|
||||||
|
683edWn4AI9bDBb1w6AQmk0ZzBZhw0PFbvWMcyiiZe0L+6kDUEmG9rQAnX0hIhmH
|
||||||
|
zZQy8wsh
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
BIN
public/Database/MapPoiContent/1571205431.zip
Normal file
BIN
public/Database/MapPoiContent/1571205431.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/1589864360.zip
Normal file
BIN
public/Database/MapPoiContent/1589864360.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/1590920511.zip
Normal file
BIN
public/Database/MapPoiContent/1590920511.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/1611400803.zip
Normal file
BIN
public/Database/MapPoiContent/1611400803.zip
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"Map_Category":["History"],"_id":"6740541c621bec6e1fe0be4e","Map_ID":"1611400803","Map_Name":"BPT Heritage Walk","Trivia_List":[],"Map_Description":"Mumbai originally consisted of seven islands: Mumbai, Mazagaon, Parel, Worli, Mahim, Old Woman's Island, and Colaba. Over time, these islands merged into the bustling city. Mazagaon became residential, Parel turned industrial, Worli became commercial, Mahim developed a diverse community, Old Woman's Island was reclaimed, and Colaba emerged as a key business district. The Fort area, once home to a British-built fort from 1716, was demolished in the 1860s. Today, the area is known for its historic buildings made from local stones and is a protected precinct to preserve its heritage. Ballard Estate, developed between 1908 and 1914, transformed into a commercial hub through land reclamation. Featuring European Renaissance-style architecture, it reflects Mumbai’s early 20th-century commercial growth and sophisticated urban planning.","Map_Thumbnail_URL":"https://production-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/1611400803/Image/1732269084700.jpg","Map_Status":"UnPublished","Map_Type":"test","Total_POI":15,"Sort_Number":22,"Walk_Type":"Self-Paced Walk","Amount_Per_Person":null,"Maximum_Persons_Allowed":null,"Dates":[],"Map_Version":53,"Map_Startlongitude":72.8382571172623,"Map_Startlatitude":18.934259760992415,"Map_Polycoords":[],"Map_Zip_Url":"http://amble.theheritageproject.in/Database/MapPoiContent/1611400803.zip","Total_Trivia":"15","Map_Ratting":"0","DateofRegistration":"2024-11-22T09:51:24.886Z","POI_List":[],"__v":0}
|
||||||
BIN
public/Database/MapPoiContent/1678363359.zip
Normal file
BIN
public/Database/MapPoiContent/1678363359.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/1704424320.zip
Normal file
BIN
public/Database/MapPoiContent/1704424320.zip
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"Map_Category":["Architecture"],"_id":"660169e346b38018fe17101f","Map_ID":"1704424320","Map_Name":"test mine","Trivia_List":[],"Map_Description":"dnkwndkwnkdw","Map_Thumbnail_URL":"test","Map_Status":"UnPublished","Map_Type":"test","Total_POI":4,"Sort_Number":1,"Walk_Type":"Guided Walk","Amount_Per_Person":100,"Maximum_Persons_Allowed":6,"Map_Version":49,"Map_Startlongitude":72,"Map_Startlatitude":11,"Map_Polycoords":[],"Map_Zip_Url":"http://localhost:8080/Database/MapPoiContent/1704424320.zip","Total_Trivia":"4","Map_Ratting":"0","DateofRegistration":"2024-03-25T12:11:15.035Z","POI_List":[],"__v":0}
|
||||||
BIN
public/Database/MapPoiContent/1707412958224.jpeg
Normal file
BIN
public/Database/MapPoiContent/1707412958224.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
BIN
public/Database/MapPoiContent/1707459821291.mp3
Normal file
BIN
public/Database/MapPoiContent/1707459821291.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/1707459821385.jpg
Normal file
BIN
public/Database/MapPoiContent/1707459821385.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 223 KiB |
BIN
public/Database/MapPoiContent/1738370181.zip
Normal file
BIN
public/Database/MapPoiContent/1738370181.zip
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/Database/MapPoiContent/1745228348.zip
Normal file
BIN
public/Database/MapPoiContent/1745228348.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/1799075856.zip
Normal file
BIN
public/Database/MapPoiContent/1799075856.zip
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/Database/MapPoiContent/1826538791.zip
Normal file
BIN
public/Database/MapPoiContent/1826538791.zip
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/Database/MapPoiContent/1867666395.zip
Normal file
BIN
public/Database/MapPoiContent/1867666395.zip
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"Map_Category":["Architecture"],"_id":"6799fcfe621bec6e1fe0c608","Map_ID":"1867666395","Map_Name":"Bora Bazaar","Trivia_List":[],"Map_Description":"Bombay, now Mumbai, began as seven distinct islands, home to the Koli and Bhandari communities who thrived on fishing and coastal trade. •\tThese islands were significant trading points, with regions like Sopara and Chaul serving as early maritime hubs even before European colonizers arrived. •\tThe Portuguese arrived in 1561, marking the first wave of European influence on the islands’ trade and culture. •\tIn 1661, the British took over, aiming to transform Bombay into a major trading port, setting the stage for its growth as a commercial center.","Map_Thumbnail_URL":"https://production-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/1867666395/Image/1738145022509.jpg","Map_Status":"UnPublished","Map_Type":"test","Total_POI":24,"Sort_Number":6,"Walk_Type":"Self-Paced Walk","Amount_Per_Person":null,"Maximum_Persons_Allowed":null,"Dates":[],"Map_Version":55,"Map_Startlongitude":72.83527444390009,"Map_Startlatitude":18.93496919676392,"Map_Polycoords":[],"Map_Zip_Url":"http://amble.theheritageproject.in/Database/MapPoiContent/1867666395.zip","Total_Trivia":"17","Map_Ratting":"0","DateofRegistration":"2025-01-29T10:03:42.713Z","POI_List":[],"__v":0}
|
||||||
BIN
public/Database/MapPoiContent/1923177346.zip
Normal file
BIN
public/Database/MapPoiContent/1923177346.zip
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"Map_Category":["Arts and Culture,Architecture,UNESCO World Heritage Sites"],"_id":"65cdd2d01f4c321f972fb9a3","Map_ID":"1923177346","Map_Name":"Wyatt Hendrix","Trivia_List":[],"Map_Description":"Elit et optio prov","Map_Thumbnail_URL":"https://development-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/1923177346/Image/1707987664181_Bard_Generated_Image.jpeg","Map_Status":"UnPublished","Map_Type":"test","Total_POI":4,"Sort_Number":4,"Map_Version":48,"Map_Startlongitude":72,"Map_Startlatitude":80,"Map_Polycoords":[],"Map_Zip_Url":"http://localhost:8080/Database/MapPoiContent/1923177346.zip","Total_Trivia":"4","Map_Ratting":"0","DateofRegistration":"2024-02-15T09:01:04.925Z","POI_List":[{"POI_Thumbnail_URL":["https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1708320579194.png","https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1708320596205.jpeg","https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1708320596713.jpg","https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1708320597242.jpg"],"_id":"65cdd30c1f4c321f972fb9ae","POI_ID":"poi0","POI_Name":"first time all image","POI_Description":"test","POI_Type":"Poi","POI_Number":0,"POI_Status":"Published","POI_Content_Type":"audio","POI_Content_URL":"https://development-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/POIAudio/1707987722478_file_example_MP3_700KB.mp3","POI_Trigger_Area":1,"Latitude":11,"Longitude":11},{"POI_Thumbnail_URL":["https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1707992055371_1707745819581_598898.jpg","https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1707992088349_Bard_Generated_Image.jpeg","https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1707992088748_643ba7a7af006d82d55e8d1b181c9c4c.jpg"],"_id":"65cddea8589b8322d60274ca","POI_ID":"poi1","POI_Name":"Test2","POI_Description":"Tewstuibgf","POI_Type":"Poi","POI_Number":1,"POI_Status":"Published","POI_Content_Type":"audio","POI_Content_URL":"https://development-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/POIAudio/1707990693121_file_example_MP3_700KB.mp3","POI_Trigger_Area":1,"Latitude":11,"Longitude":11.2},{"POI_Thumbnail_URL":["https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1707992207550_1707982147701_1707980174953_1.%20JB%20Petit.jpg","https://development-amble.s3.ap-south-1.amazonaws.com/Database/MapPoiContent/POIImage/1707993209923_643ba7a7af006d82d55e8d1b181c9c4c.jpg"],"_id":"65cde47a589b8322d60274f8","POI_ID":"poi2","POI_Name":"Test r","POI_Description":"Testrignfdg e dgfd gdfgfd gfd","POI_Type":"Poi","POI_Number":2,"POI_Status":"Published","POI_Content_Type":"audio","POI_Content_URL":"https://development-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/POIAudio/1707992185633_file_example_MP3_700KB.mp3","POI_Trigger_Area":1,"Latitude":12.2,"Longitude":12.6},{"POI_Thumbnail_URL":[],"_id":"65cdefef68c8fc31b7c98845","POI_ID":"poi3","POI_Name":"wnwkws","POI_Description":"wdwdwdswd","POI_Type":"Poi","POI_Number":3,"POI_Status":"Published","POI_Content_Type":"audio","POI_Content_URL":"https://development-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/POIAudio/1707995118740.mp3","POI_Trigger_Area":1,"Latitude":11,"Longitude":11}],"__v":2,"Walk_type":"Self-Paced Walk","Amount_Per_Person":5,"Maximum_Persons_Allowed":6,"Walk_Type":"Guided Walk"}
|
||||||
BIN
public/Database/MapPoiContent/1944830487.zip
Normal file
BIN
public/Database/MapPoiContent/1944830487.zip
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/Database/MapPoiContent/1992279972.zip
Normal file
BIN
public/Database/MapPoiContent/1992279972.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2023695413.zip
Normal file
BIN
public/Database/MapPoiContent/2023695413.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2031660561.zip
Normal file
BIN
public/Database/MapPoiContent/2031660561.zip
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
public/Database/MapPoiContent/2032825405/Image/0.png
Normal file
BIN
public/Database/MapPoiContent/2032825405/Image/0.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 544 KiB |
BIN
public/Database/MapPoiContent/2071949649.zip
Normal file
BIN
public/Database/MapPoiContent/2071949649.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2088649036.zip
Normal file
BIN
public/Database/MapPoiContent/2088649036.zip
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"Map_Category":["Architecture"],"_id":"67cc4a66621bec6e1fe0c9b4","Map_ID":"2088649036","Map_Name":"Testing amble","Trivia_List":[],"Map_Description":"rpg location ","Map_Thumbnail_URL":"https://production-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/2088649036/Image/1741441638160.jpg","Map_Status":"UnPublished","Map_Type":"test","Total_POI":6,"Sort_Number":5,"Walk_Type":"Self-Paced Walk","Amount_Per_Person":null,"Maximum_Persons_Allowed":null,"Dates":[],"Map_Version":56,"Map_Startlongitude":72.82124387939118,"Map_Startlatitude":19.01139544857203,"Map_Polycoords":[],"Map_Zip_Url":"http://amble.theheritageproject.in/Database/MapPoiContent/2088649036.zip","Total_Trivia":"5","Map_Ratting":"0","DateofRegistration":"2025-03-08T13:47:18.353Z","POI_List":[],"__v":0}
|
||||||
BIN
public/Database/MapPoiContent/2115814978.zip
Normal file
BIN
public/Database/MapPoiContent/2115814978.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2165261592.zip
Normal file
BIN
public/Database/MapPoiContent/2165261592.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2188477380.zip
Normal file
BIN
public/Database/MapPoiContent/2188477380.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2211067092.zip
Normal file
BIN
public/Database/MapPoiContent/2211067092.zip
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{"Map_Category":["Arts and Culture"],"_id":"66c41a7cfb9167f056413364","Map_ID":"2211067092","Map_Name":"Test Walk Resume","Trivia_List":[],"Map_Description":"Resume from where we left","Map_Thumbnail_URL":"https://production-amble.s3.ap-south-1.amazonaws.com//Database/MapPoiContent/2211067092/Image/1724127868852.jpg","Map_Status":"UnPublished","Map_Type":"test","Total_POI":3,"Sort_Number":35,"Walk_Type":"Self-Paced Walk","Amount_Per_Person":null,"Maximum_Persons_Allowed":null,"Dates":[],"Map_Version":50,"Map_Startlongitude":76.98575,"Map_Startlatitude":11.04447,"Map_Polycoords":[],"Map_Zip_Url":"http://amble.theheritageproject.in/Database/MapPoiContent/2211067092.zip","Total_Trivia":"3","Map_Ratting":"0","DateofRegistration":"2024-08-20T04:24:28.985Z","POI_List":[],"__v":0}
|
||||||
BIN
public/Database/MapPoiContent/2236609840.zip
Normal file
BIN
public/Database/MapPoiContent/2236609840.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/2248092362.zip
Normal file
BIN
public/Database/MapPoiContent/2248092362.zip
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707413165677.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707413165677.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707413256105.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707413256105.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707413275306.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707413275306.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707413303968.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707413303968.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707458789930.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707458789930.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707459316723.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707459316723.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707459349081.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707459349081.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707459368524.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707459368524.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707459384040.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707459384040.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707459928452.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707459928452.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707460445457.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707460445457.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707460480549.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707460480549.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707460595966.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707460595966.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707464543841.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707464543841.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707473137548.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707473137548.mp3
Normal file
Binary file not shown.
BIN
public/Database/MapPoiContent/POIAudio/1707474455655.mp3
Normal file
BIN
public/Database/MapPoiContent/POIAudio/1707474455655.mp3
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user