Adding course model and functionalities

This commit is contained in:
hardcodder 2021-04-10 13:17:40 +05:30
parent 03b88ccc8d
commit f940193d17
17 changed files with 1000 additions and 14 deletions

13
app.js
View File

@ -3,6 +3,10 @@ const mongoose = require('mongoose') ;
const bodyparser = require('body-parser') ; const bodyparser = require('body-parser') ;
const authRoute = require('./routes/auth') ; const authRoute = require('./routes/auth') ;
const profileRoute = require('./routes/profile') ; const profileRoute = require('./routes/profile') ;
const paymentRoute = require('./routes/payment') ;
const courseRoute = require('./routes/course') ;
const adminRoute = require('./routes/admin') ;
const cors = require('cors') ;
//const passport = require('passport'); //const passport = require('passport');
//const cookieSession = require('cookie-session') ; //const cookieSession = require('cookie-session') ;
//require('./passport-setup') ; //require('./passport-setup') ;
@ -11,6 +15,7 @@ const app = express() ;
const MONGO_URI = `mongodb+srv://Cantilever:Cantilever@cluster0.dqxva.mongodb.net/myFirstDatabase?retryWrites=true&w=majority` const MONGO_URI = `mongodb+srv://Cantilever:Cantilever@cluster0.dqxva.mongodb.net/myFirstDatabase?retryWrites=true&w=majority`
app.use(cors()) ;
app.use(bodyparser.json()) ; app.use(bodyparser.json()) ;
// app.use(cookieSession({ // app.use(cookieSession({
@ -71,11 +76,17 @@ app.use(bodyparser.json()) ;
app.use(authRoute) ; app.use(authRoute) ;
app.use(profileRoute) ; app.use(profileRoute) ;
app.use(paymentRoute) ;
app.use(courseRoute) ;
app.use(adminRoute) ;
mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }). mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }).
then(result => { then(result => {
console.log('connected'); console.log('connected');
app.listen(3000) ; app.listen(5000) ;
}) })
.catch(err => { .catch(err => {
console.log(err); console.log(err);

110
controllers/admin.js Normal file
View File

@ -0,0 +1,110 @@
const Course = require('../models/Course') ;
module.exports.addSchedule = async (req , res , next) => {
try
{
//we will take startTime , endTime and link as input
const startTime = req.body.startTime ;
const endTime = req.body.endTime ;
const link = req.body.link ;
//we will alse take CourseId as input
const parCourseId = req.body.parCourseId ;
const course = await Course.findById(parCourseId) ;
const meetings = [...course.meetings] ;
let newMeet = {
startTime : startTime ,
endTime : endTime ,
link : link
} ;
//pushing the new schedule
meetings.push(newMeet) ;
course.meetings = meetings ;
await course.save() ;
res.json({
success : "added schedule"
})
}
catch(err)
{
res.json({
err : "Can not add"
})
}
}
module.exports.deleteSchedule = async (req , res , next) => {
try{
//we need index as input
const index = req.body.index ;
//we need courseId
const parCourseId = req.body.parCourseId ;
const course = await Course.findById(parCourseId) ;
const meetings = [...course.meetings] ;
if(index < (meetings.length))
{
meetings.splice(index , 1) ;
course.meetings = meetings ;
await course.save() ;
res.json({
success : "deleted schedule"
})
}
else
{
res.json({
err : "Index out of bound"
})
}
}
catch(err)
{
res.json({
err : "Can not delete"
})
}
}
module.exports.editSchedule = async (req , res , next) => {
try{
//we will take startTime , endTime and link as input
const startTime = req.body.startTime ;
const endTime = req.body.endTime ;
const link = req.body.link ;
//we need to take the index as input
const index = req.body.index ;
//we will take courseId as input
const parCourseId = req.body.parCourseId ;
const course = await Course.findById(parCourseId) ;
const meetings = [...course.meetings] ;
if(index < (meetings.length))
{
let newMeet = {
startTime : startTime ,
endTime : endTime ,
link : link
} ;
meetings[index] = newMeet ;
course.meetings = meetings ;
await course.save() ;
res.json({
success : "edited schedule"
})
}
else
{
res.json({
err : "Index out of bound"
})
}
}
catch(err)
{
res.json({
err : "Can not edit"
})
}
}

View File

@ -9,7 +9,7 @@ module.exports.Protected = async (req,res,next)=>{
} }
module.exports.postSignup = async (req , res , next) => { module.exports.postSignup = async (req , res , next) => {
try try
{ { //we need firstName , lastName , email , password as input
let firstName = req.body.firstName || " " ; let firstName = req.body.firstName || " " ;
let lastName = req.body.lastName || " " ; let lastName = req.body.lastName || " " ;
let email = req.body.email ; let email = req.body.email ;
@ -36,7 +36,9 @@ module.exports.postSignup = async (req , res , next) => {
let student = new Student({ let student = new Student({
user:user._id user:user._id
}) })
await student.save() ; student = await student.save() ;
user.student = student._id ;
await user.save() ;
res.json({ res.json({
message:"Successfully signed Up" , message:"Successfully signed Up" ,
type:"success" type:"success"
@ -53,6 +55,7 @@ module.exports.postSignup = async (req , res , next) => {
module.exports.postSignin = async (req , res , next) => { module.exports.postSignin = async (req , res , next) => {
try try
{ {
//we need email and password as input
let email = req.body.email ; let email = req.body.email ;
let password = req.body.password ; let password = req.body.password ;
let user = await User.findOne({email : email}) ; let user = await User.findOne({email : email}) ;

112
controllers/course.js Normal file
View File

@ -0,0 +1,112 @@
const Course = require('../models/Course') ;
const CourseType = require('../models/CourseType') ;
module.exports.postAddCourse = async (req , res , next) => {
try
{
//we will take input as name , mentor and totalLectures
let name = req.body.name ;
let mentor = req.body.mentor ;
let totalLectures = req.body.totalLectures ;
if(name)
{
name = name.trim() ;
}
if(mentor)
{
mentor = mentor.trim() ;
}
if(totalLectures)
{
totalLectures = Number(totalLectures) ;
}
let course = new Course({
name : name ,
mentor : mentor ,
totalLectures : totalLectures
}) ; ;
course = await course.save() ;
//tier 1
let tier1 = new CourseType({
name : course.name ,
amount : 7000 ,
tier : 1 ,
course : course._id
})
tier1 = await tier1.save() ;
//tier 2
let tier2 = new CourseType({
name : course.name ,
amount : 5000 ,
tier : 2 ,
course : course._id
})
tier2 =await tier2.save() ;
//tier 3
let tier3 = new CourseType({
name : course.name ,
amount : 3000 ,
tier : 3 ,
course : course._id
})
tier3 = await tier3.save() ;
course.types.tier1 = tier1 ;
course.types.tier2 = tier2 ;
course.types.tier3 = tier3 ;
await course.save() ;
res.json({
success: "Successfully created"
})
}
catch(err)
{
console.log(err);
res.json({
error : err
})
}
}
module.exports.getAllCourses = async (req , res , next) => {
try
{
//we will be getting all the courses here
const courses = await Course.find().populate("types.tier1").populate("types.tier2").populate("types.tier3") ;
res.json({
courses : courses
})
}
catch
{
res.json({
error : "error"
})
}
}
module.exports.meetSchedule = async (req , res , next) => {
try
{
//we need courseTypeId as input
const courseId = req.body.courseId ;
const course = await CourseType.findById(courseId).populate("course") ;
res.json({
courses : course
})
}
catch(err)
{
res.json({
error : "error"
})
}
}

153
controllers/payment.js Normal file
View File

@ -0,0 +1,153 @@
const razorpay = require('razorpay') ;
const Order = require('../models/Order') ;
const User = require('../models/User') ;
const CourseType = require('../models/CourseType') ;
const Course = require('../models/Course') ;
const Student = require('../models/Student');
//test credentials of razorpay
const instance = new razorpay({
key_id : 'rzp_test_8YMWcm8JJ4fhzp' ,
key_secret : 'jP1P03cD4ShN8Fp7Q3T6BXQo'
}) ;
module.exports.postVerify =async (req , res , next) => {
try
{
//Secret we put in razorpay
const SECRET = 'CantileverLabs' ;
const crypto = require('crypto')
const shasum = crypto.createHmac('sha256', SECRET) ;
shasum.update(JSON.stringify(req.body))
const digest = shasum.digest('hex')
//if secret is matched
if (digest === req.headers['x-razorpay-signature']) {
console.log('request is legit')
// process it
const orderId = req.body.payload.payment.entity.order_id ;
//fetching the order from the orderId
let order = await Order.findOne({orderId:orderId}) ;
let courseId = order.course ;
//adding the payment detail
order.paymentDetail = req.body.payload.payment ;
//making the paymentSuccess as true
order.paymentSuccess = true ;
//now getting the details of user which has bought this course
const userId = order.user ;
let user = await User.findById(userId) ;
let student =await Student.findById(user.student) ;
let ind = -1 ;
//checking whether user has already bought this course or not
if(student.courses.basicInfo)
{
ind = student.courses.basicInfo.findIndex(course => String(course) == String(courseId)) ;
}
console.log(ind);
if(ind == -1)
{
//adding a new object in the courses array of student
let newObj = {
basicInfo : courseId ,
details : {
completed : []
}
}
let courses = [...student.courses] ;
courses.push(newObj) ;
student.courses = courses ;
await student.save() ;
await order.save() ;
res.status(200).json({
status : 'ok'
}) ;
}
else
{
//user has already bought this course
res.status(500).json({
error:'already paid'
})
}
//now updating that course in user also
//console.log(req.body.payload.payment) ;
//require('fs').writeFileSync('payment1.json', JSON.stringify(req.body, null, 4))
}
else {
// pass it
console.log("HELLO IN ERROR");
res.status(500).json({
error:'error'
})
}
}
catch(err)
{
console.log(err);
}
} ;
module.exports.postRazorpay = async (req , res , next) => {
try
{
//this route will be called after clicking the payment
//here this is the id of courseType
const courseId = req.body.courseId || "607142ec6de6df1a31bf509b" ;
const userId = req.user._id ;
let user = await User.findById(userId) ;
let course =await CourseType.findById(courseId) ;
//we are creating a new order associated to it
//we are setting the paymentSuccess to be false
let order = new Order({
course : courseId ,
user : userId ,
paymentSuccess : false
}) ;
order = await order.save() ;
const payment_capture = 1 ;
//setting the amount according to the course
const amount = Number(course.amount) ;
const options = {amount : (amount*100).toString()
, currency : "INR"
, receipt : order._id.toString()
, payment_capture
} ;
//this is a razorpay feature
const response = await instance.orders.create(options) ;
order.orderId = response.id ;
await order.save() ;
res.json({
id:response.id ,
currency : response.currency ,
amount : response.amount ,
name:(user.firstName + " " + user.lastName) ,
email:user.email ,
receipt : response.receipt
});
}
catch(err)
{
console.log(err);
res.json({
error : "error"
})
}
}

View File

@ -1,6 +1,7 @@
const Student = require('../models/Student') ; const Student = require('../models/Student') ;
const User = require('../models/User') ; const User = require('../models/User') ;
//function for trimming strings
function trim_arr(arr) function trim_arr(arr)
{ {
let newArr = arr.map(a => { let newArr = arr.map(a => {
@ -12,9 +13,10 @@ function trim_arr(arr)
module.exports.getProfile =async (req , res , next) => { module.exports.getProfile =async (req , res , next) => {
try try
{ {
//we can get the profile of the user including the courses which user has bought
const userId = req.user._id ; const userId = req.user._id ;
let user = await User.findById(userId) ; let user = await User.findById(userId) ;
let student = await Student.findOne({user : userId}) ; let student = await Student.findOne({user : userId}).populate("courses.basicInfo") ;
res.json({ res.json({
user:user , user:user ,
student:student student:student
@ -31,9 +33,8 @@ module.exports.getProfile =async (req , res , next) => {
module.exports.postProfile = async (req , res , next) => { module.exports.postProfile = async (req , res , next) => {
try try
{ {
//Here we are updating the profile of the user
const userId = req.user._id ; const userId = req.user._id ;
let courses = req.body.courses ;
let interests = req.body.interests ; let interests = req.body.interests ;
let projects = req.body.projects ; let projects = req.body.projects ;
let yearofgrad = req.body.yearofgrad ; let yearofgrad = req.body.yearofgrad ;
@ -42,10 +43,6 @@ module.exports.postProfile = async (req , res , next) => {
let skills = req.body.skills ; let skills = req.body.skills ;
let student = await Student.findOne({user : userId}) ; let student = await Student.findOne({user : userId}) ;
if(courses)
{
student.courses = trim_arr(courses.split(",")) ;
}
if(interests) if(interests)
{ {
student.interests = trim_arr(interests.split(",")) ; student.interests = trim_arr(interests.split(",")) ;
@ -86,6 +83,7 @@ module.exports.postProfile = async (req , res , next) => {
} }
module.exports.deleteUser = async (req , res , next) => { module.exports.deleteUser = async (req , res , next) => {
//here we are deleting the user
const userId = req.user._id ; const userId = req.user._id ;
try try
{ {

50
models/Course.js Normal file
View File

@ -0,0 +1,50 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema ;
const courseSchema = new Schema({
name : {
type : String ,
required : true
} ,
mentor : {
type : String ,
required : true
} ,
totalLectures : {
type : Number ,
required : true
} ,
meetings : [
{
startTime : {
type : String ,
required : true
} ,
endTime : {
type : String ,
required : true
} ,
link : {
type : String ,
required : true
}
}
] ,
types : {
tier1: {
type : mongoose.Types.ObjectId ,
ref : 'CourseType'
} ,
tier2 : {
type : mongoose.Types.ObjectId ,
ref : 'CourseType'
} ,
tier3: {
type : mongoose.Types.ObjectId ,
ref : 'CourseType'
}
}
}) ;
module.exports = mongoose.model('Course' , courseSchema) ;

25
models/CourseType.js Normal file
View File

@ -0,0 +1,25 @@
const mongoose = require('mongoose') ;
const Schema = mongoose.Schema ;
const courseTypeSchema = new Schema({
name : {
type : String ,
required : true
} ,
tier : {
type:Number ,
required : true
} ,
amount : {
type : Number ,
required : true
} ,
course : {
type : mongoose.Types.ObjectId ,
ref : 'Course' ,
required : true
}
})
module.exports = mongoose.model('CourseType' , courseTypeSchema) ;

28
models/Order.js Normal file
View File

@ -0,0 +1,28 @@
const mongoose = require('mongoose') ;
const Schema = mongoose.Schema ;
const orderSchema = new Schema({
user : {
type:mongoose.Types.ObjectId ,
ref:'User' ,
required:true
} ,
course : {
type: mongoose.Types.ObjectId ,
ref : 'CourseType' ,
required : true
},
paymentSuccess : {
type:Boolean ,
required : true
} ,
paymentDetail : {
type:Object
} ,
orderId : {
type : String
}
}) ;
module.exports = mongoose.model('Order' , orderSchema) ;

View File

@ -14,7 +14,14 @@ const studentSchema = new Schema({
} , } ,
courses:[ courses:[
{ {
type:String basicInfo : {
type:mongoose.Types.ObjectId ,
ref : 'CourseType' ,
required : true
} ,
details : {
type : Object
}
} }
], ],
interests:[ interests:[

View File

@ -20,7 +20,12 @@ const userSchema = new Schema({
} , } ,
googleId : { googleId : {
type : String type : String
} ,
student : {
type : mongoose.Types.ObjectId ,
ref: 'Student'
} }
//need to add isAdmin
}) ; }) ;
module.exports = mongoose.model("User" , userSchema) ; module.exports = mongoose.model("User" , userSchema) ;

387
package-lock.json generated
View File

@ -56,6 +56,17 @@
"negotiator": "0.6.2" "negotiator": "0.6.2"
} }
}, },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ansi-align": { "ansi-align": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
@ -108,6 +119,39 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
}, },
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@ -119,6 +163,14 @@
"resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
"integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
}, },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bcryptjs": { "bcryptjs": {
"version": "2.4.3", "version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
@ -249,6 +301,11 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true "dev": true
}, },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"chalk": { "chalk": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
@ -328,6 +385,14 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true "dev": true
}, },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -402,12 +467,34 @@
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
}, },
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"crypto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
"integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig=="
},
"crypto-random-string": { "crypto-random-string": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
"integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
"dev": true "dev": true
}, },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -437,6 +524,11 @@
"integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
"dev": true "dev": true
}, },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"denque": { "denque": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz",
@ -467,6 +559,15 @@
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
"dev": true "dev": true
}, },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
"ecdsa-sig-formatter": { "ecdsa-sig-formatter": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
@ -553,6 +654,26 @@
"vary": "~1.1.2" "vary": "~1.1.2"
} }
}, },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"fill-range": { "fill-range": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -576,6 +697,21 @@
"unpipe": "~1.0.0" "unpipe": "~1.0.0"
} }
}, },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"forwarded": { "forwarded": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@ -602,6 +738,14 @@
"pump": "^3.0.0" "pump": "^3.0.0"
} }
}, },
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob-parent": { "glob-parent": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@ -645,6 +789,20 @@
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
"dev": true "dev": true
}, },
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"requires": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
}
},
"has-flag": { "has-flag": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@ -675,6 +833,16 @@
"toidentifier": "1.0.0" "toidentifier": "1.0.0"
} }
}, },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"iconv-lite": { "iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@ -793,8 +961,7 @@
"is-typedarray": { "is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
"dev": true
}, },
"is-yarn-global": { "is-yarn-global": {
"version": "0.3.0", "version": "0.3.0",
@ -807,12 +974,37 @@
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
}, },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-buffer": { "json-buffer": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
"dev": true "dev": true
}, },
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsonwebtoken": { "jsonwebtoken": {
"version": "8.5.1", "version": "8.5.1",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
@ -837,6 +1029,17 @@
} }
} }
}, },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"jwa": { "jwa": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
@ -887,6 +1090,11 @@
"package-json": "^6.3.0" "package-json": "^6.3.0"
} }
}, },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash.includes": { "lodash.includes": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
@ -1086,6 +1294,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}, },
"nanoid": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
"integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA=="
},
"negotiator": { "negotiator": {
"version": "0.6.2", "version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@ -1152,6 +1365,16 @@
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
}, },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"on-finished": { "on-finished": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@ -1276,6 +1499,11 @@
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
}, },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"picomatch": { "picomatch": {
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
@ -1293,6 +1521,14 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
}, },
"promise": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz",
"integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==",
"requires": {
"asap": "~2.0.6"
}
},
"proxy-addr": { "proxy-addr": {
"version": "2.0.6", "version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
@ -1302,6 +1538,11 @@
"ipaddr.js": "1.9.1" "ipaddr.js": "1.9.1"
} }
}, },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
},
"pstree.remy": { "pstree.remy": {
"version": "1.1.8", "version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@ -1318,6 +1559,11 @@
"once": "^1.3.1" "once": "^1.3.1"
} }
}, },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"pupa": { "pupa": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
@ -1348,6 +1594,16 @@
"unpipe": "1.0.0" "unpipe": "1.0.0"
} }
}, },
"razorpay": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/razorpay/-/razorpay-2.0.6.tgz",
"integrity": "sha512-tWdV+WfRuuQSGQcGtUXmsPx5WO3QPrEKegy+AbGWT1STD5kxIYW0KHjdspu7YnTTP3q7ekwHDUYYjG8zSR5IiQ==",
"requires": {
"promise": "^8.0.1",
"request": "^2.88.0",
"request-promise": "^4.2.2"
}
},
"rc": { "rc": {
"version": "1.2.8", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@ -1406,6 +1662,59 @@
"rc": "^1.2.8" "rc": "^1.2.8"
} }
}, },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.6",
"extend": "~3.0.2",
"forever-agent": "~0.6.1",
"form-data": "~2.3.2",
"har-validator": "~5.1.3",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.19",
"oauth-sign": "~0.9.0",
"performance-now": "^2.1.0",
"qs": "~6.5.2",
"safe-buffer": "^5.1.2",
"tough-cookie": "~2.5.0",
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
"dependencies": {
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}
}
},
"request-promise": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz",
"integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==",
"requires": {
"bluebird": "^3.5.0",
"request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
}
},
"request-promise-core": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
"integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
"requires": {
"lodash": "^4.17.19"
}
},
"require_optional": { "require_optional": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
@ -1513,6 +1822,14 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
}, },
"shortid": {
"version": "2.2.16",
"resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz",
"integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==",
"requires": {
"nanoid": "^2.1.0"
}
},
"sift": { "sift": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
@ -1538,11 +1855,32 @@
"memory-pager": "^1.0.2" "memory-pager": "^1.0.2"
} }
}, },
"sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
}
},
"statuses": { "statuses": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}, },
"stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
},
"string-width": { "string-width": {
"version": "4.2.2", "version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@ -1650,11 +1988,33 @@
"nopt": "~1.0.10" "nopt": "~1.0.10"
} }
}, },
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"requires": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
"tsscmp": { "tsscmp": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
"integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA=="
}, },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-fest": { "type-fest": {
"version": "0.8.1", "version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
@ -1728,6 +2088,14 @@
"xdg-basedir": "^4.0.0" "xdg-basedir": "^4.0.0"
} }
}, },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"requires": {
"punycode": "^2.1.0"
}
},
"url-parse-lax": { "url-parse-lax": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
@ -1747,11 +2115,26 @@
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
}, },
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
"vary": { "vary": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
}, },
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"widest-line": { "widest-line": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",

View File

@ -12,11 +12,15 @@
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"cookie-session": "^1.4.0", "cookie-session": "^1.4.0",
"cors": "^2.8.5",
"crypto": "^1.0.1",
"express": "^4.17.1", "express": "^4.17.1",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"mongoose": "^5.12.2", "mongoose": "^5.12.2",
"passport": "^0.4.1", "passport": "^0.4.1",
"passport-google-oauth": "^2.0.0" "passport-google-oauth": "^2.0.0",
"razorpay": "^2.0.6",
"shortid": "^2.2.16"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^2.0.7" "nodemon": "^2.0.7"

60
payment1.json Normal file
View File

@ -0,0 +1,60 @@
{
"entity": "event",
"account_id": "acc_Gw1LiFWVLVRYkG",
"event": "payment.captured",
"contains": [
"payment"
],
"payload": {
"payment": {
"entity": {
"id": "pay_GwUwfzZD7hnooU",
"entity": "payment",
"amount": 50000,
"currency": "INR",
"status": "captured",
"order_id": "order_GwUvksWDBcSdw9",
"invoice_id": null,
"international": false,
"method": "card",
"amount_refunded": 0,
"refund_status": null,
"captured": true,
"description": "Test Transaction",
"card_id": "card_Gw33mMf3bsqqb0",
"card": {
"id": "card_Gw33mMf3bsqqb0",
"entity": "card",
"name": "Gaurav Kumar",
"last4": "1111",
"network": "Visa",
"type": "debit",
"issuer": null,
"international": false,
"emi": false,
"sub_type": "consumer"
},
"bank": null,
"wallet": null,
"vpa": null,
"email": "test@test.com",
"contact": "+919999999999",
"notes": {
"address": "Razorpay Corporate Office"
},
"fee": 1000,
"tax": 0,
"error_code": null,
"error_description": null,
"error_source": null,
"error_step": null,
"error_reason": null,
"acquirer_data": {
"auth_code": "892379"
},
"created_at": 1617900492
}
}
},
"created_at": 1617900495
}

12
routes/admin.js Normal file
View File

@ -0,0 +1,12 @@
const express = require('express') ;
const adminController = require('../controllers/admin')
const router = express.Router() ;
router.post('/addSchedule' , adminController.addSchedule) ;
router.post('/editSchedule' , adminController.editSchedule) ;
router.post('/deleteSchedule' , adminController.deleteSchedule) ;
module.exports = router ;

12
routes/course.js Normal file
View File

@ -0,0 +1,12 @@
const express = require('express') ;
const courseController = require('../controllers/course') ;
const router = express.Router() ;
router.post('/addCourse' , courseController.postAddCourse) ;
router.get('/getAllCourses' , courseController.getAllCourses) ;
router.post('/meetSchedule' , courseController.meetSchedule) ;
module.exports = router ;

13
routes/payment.js Normal file
View File

@ -0,0 +1,13 @@
const express = require('express') ;
const authMiddleware = require('../middleware/requirelogin') ;
const paymentController = require('../controllers/payment') ;
const router = express.Router() ;
router.post('/verification' , paymentController.postVerify) ;
router.post('/razorpay' ,authMiddleware , paymentController.postRazorpay) ;
module.exports = router ;