Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
1cca616
Shahynaz
TheGr8OK Nov 23, 2021
354fdb0
adjusting flight component
TheGr8OK Nov 24, 2021
821d206
stash
kareemyaser Nov 25, 2021
87f1e5d
centered view flights
kareemyaser Nov 25, 2021
ede7ccf
view flights details from view flights is done <<<3
kareemyaser Nov 26, 2021
3524e59
zabat kam color w 3mlt placeholders sah
kareemyaser Nov 27, 2021
1f1d102
arrival terminal done
kareemyaser Nov 27, 2021
aa1ab6f
working on bookflight unfinished
TheGr8OK Nov 28, 2021
1b5a071
return back flights from booking (round trip)is done
kareemyaser Nov 29, 2021
85f0ed7
kamel
kareemyaser Nov 30, 2021
6ea444f
Omar making reservations DB
TheGr8OK Nov 30, 2021
ad117dd
preFinal sprint 2
TheGr8OK Dec 2, 2021
e375e2c
myflights pre final
TheGr8OK Dec 3, 2021
0f699aa
Last Check sp2
TheGr8OK Dec 3, 2021
67666b9
Last Check sprint
TheGr8OK Dec 3, 2021
b1dedae
Done'
danayad Dec 3, 2021
71ea713
background added
TheGr8OK Dec 13, 2021
6ec7806
Merge branch 'dev' of https://github.com/advanced-computer-lab/ACLord…
TheGr8OK Dec 18, 2021
c5ec170
j
TheGr8OK Dec 18, 2021
4e6fe47
Sign up page
TheGr8OK Dec 21, 2021
7e29633
kimo
TheGr8OK Dec 22, 2021
87b132e
login and signup
TheGr8OK Dec 22, 2021
da12842
l
TheGr8OK Dec 22, 2021
1f796d7
payment
danayad Dec 23, 2021
77475eb
still here
TheGr8OK Dec 23, 2021
98768b2
jgc
TheGr8OK Dec 23, 2021
22b69d1
authenticating
TheGr8OK Dec 23, 2021
444bb9b
d
danayad Dec 24, 2021
fcf8625
bye
TheGr8OK Dec 25, 2021
70844a9
mail
TheGr8OK Dec 25, 2021
3f7affb
summary
TheGr8OK Dec 25, 2021
72de24a
backend mo7taram
TheGr8OK Dec 25, 2021
e749c52
return adjusted
TheGr8OK Dec 25, 2021
6d6630e
Done na2es el passwords
danayad Dec 25, 2021
e54380c
view details text colour
danayad Dec 25, 2021
67a1b1b
sp3
TheGr8OK Dec 25, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/ACLords
Submodule ACLords added at a1cee5
200 changes: 200 additions & 0 deletions src/AuthServer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
require('dotenv').config()
const jwt = require('jsonwebtoken');
const express = require("express");
const mongoose = require('mongoose');
const flightController = require('./Routes/flightController');
const userController = require('./Routes/userController');
const bodyparser = require("body-parser");
const app = express();
var cors = require('cors');
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use(express.json())
const bodyParser = require("body-parser");
const User = require('./models/Users');
const bcrypt = require('bcrypt')
const cookieParser = require('cookie-parser')
app.use(cookieParser())

//D
const stripe = require('stripe')(process.env.STRIPE_PRIVATE_KEY)

const storeItems = new Map([
[1, { priceInCents: 10000, name: "Flight Payment" }],
])


// app.get('/set-cookies', (req,res)=> {
// res.cookie('accessToken', )
// })

// app.get('/read-cookies', (req,res)=> {

// })


app.post("/create-checkout-session", async (req, res) => {
try {
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
mode: "payment",
line_items: req.body.items.map(item => {
const storeItem = storeItems.get(item.id)
return {
price_data: {
currency: "egp",
product_data: {
name: storeItem.name,
},
unit_amount: storeItem.priceInCents,
},
quantity: item.quantity,
}
}),
success_url: `http://localhost:3000/ViewDetails/BookFlight`,
cancel_url: `http://localhost:3000/ViewFlights`,
})
res.json({ url: session.url })
} catch (e) {
res.status(500).json({ error: e.message })
}
})


app.post("/create-checkout-session2", async (req, res) => {
try {
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
mode: "payment",
line_items: req.body.items.map(item => {
const storeItem = storeItems.get(item.id)
return {
price_data: {
currency: "egp",
product_data: {
name: storeItem.name,
},
unit_amount: storeItem.priceInCents,
},
quantity: item.quantity,
}
}),
success_url: `http://localhost:3000/MyFlights`,
cancel_url: `http://localhost:3000/ViewFlights`,
})
res.json({ url: session.url })
} catch (e) {
res.status(500).json({ error: e.message })
}
})


app.use(bodyParser.urlencoded({
extended: true
}))
app.use(bodyParser.urlencoded({
type: 'application/*+json'
}))
app.use(bodyParser.json());


mongoose.connect("mongodb+srv://ACLords:1234qwer@airlinedb.e4p3f.mongodb.net/AirLineDB?retryWrites=true&w=majority",
{ useNewUrlParser: true, useUnifiedTopology: true })
.then(result => console.log("MongoDB is now connected"))
.catch(err => console.log(err));

app.use(cors());


let refreshTokens = []

app.post('/token', (req, res) => {
const refreshToken = req.body.token
if (refreshToken == null) return res.sendStatus(401)
if (refreshTokens.includes(refreshToken)) return res.sendStatus(403)
jwt.verify(refreshToken, process.env.REFRESH_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403)
const accessToken = generateAccessToken({ email: user.email })
res.json({ accessToken: accessToken })
})
})

app.delete('/logout', (req, res) => {
refreshTokens = refreshTokens.filter(token => token !== req.body.token)

res.sendStatus(204)
})
// app.post("/SignUp", userController.addUser)

app.post('/SignUp', (req, res) => {
console.log(req.body);
userController.addUser(req.body, res);
}
)



app.post('/Login', async (req, res) => {

User.find({ Email: req.body.Email })

.then(async result => {
if (result[0] == null) {
res.send('Email does not exist. Please create new account.')
}
if (await bcrypt.compare(req.body.Password, result[0].Password)) {
const user = {
_id: result[0]._id,
Email: result[0].Email,
Password: result[0].Password,
FirstName: result[0].FirstName,
LastName: result[0].LastName,
CountryCode: result[0].CountryCode,
TelephoneNumber: result[0].TelephoneNumber,
PassportNumber: result[0].PassportNumber
}
const accessToken = generateAccessToken(user)
const refreshToken = jwt.sign(user, process.env.REFRESH_TOKEN_SECRET)
refreshTokens.push(refreshToken)
const tokens = {
result: result[0],
accessToken: accessToken,
refreshToken: refreshToken
}
// res.cookie('accessToken', accessToken)
// res.cookie('refreshToken', refreshToken)
console.log(user.body)
console.log("foo2")
res.send(tokens)
// res.status(200).json({Email: req.body.Email})


}

else {
res.send('Password is incorrect')
}

}).catch(err => {
console.log(err);
});

})

function generateAccessToken(user) {
return jwt.sign(user, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '15s' })
}

function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]
if (token == null) return res.sendStatus(401)

jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403)
req.user = user;
next()
})
}

app.listen(4000)
26 changes: 22 additions & 4 deletions src/Models/Flights.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,44 @@ const flightSchema = new Schema({
// },
Cabin: {
type: String,
required: false,
required: true,
},
EconomySeats: {
type: String,
required: true,
required: false,
},
BusinessClassSeats: {
type: String,
required: true
required: false
},
Airport: {
type: String,
required: true
},
Passengers:{
type: String,
required: true
},

SeatsAvailableOnFlight:{
type: String,
required:false
}
},

Duration:{
type: String,
required:false
},

BaggageAllowance:{
type: String,
required:false
},

Price:{
type: String,
required:false
},
/*
FlightNumber: {
type: String,
Expand Down
82 changes: 82 additions & 0 deletions src/Models/Reservation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const reservationSchema = new Schema({
userId: {
type: String,
required: true
},
flightId:{
type: String,
required:true
},
From: {
type: String,
required: false,
},
To: {
type: String,
required: false,
},
FlightNumber: {
type: String,
required: false,
},
DepartureDate: {
type: String,
required: false
},
ArrivalDate: {
type: String,
required: false
},
// FlightDate: {
// type:String,
// required: false,
// },
Cabin: {
type: String,
required: false,
},
EconomySeats: {
type: String,
required: false,
},
BusinessClassSeats: {
type: String,
required: false
},
Airport: {
type: String,
required: false
},
Passengers:{
type: String,
required: false
},

SeatsAvailableOnFlight:{
type: String,
required:false
},

Duration:{
type: String,
required:false
},

BaggageAllowance:{
type: String,
required:false
},

Price:{
type: String,
required:false
},


}, { timestamps: true });

const Reservation = mongoose.model('Reservation', reservationSchema);
module.exports = Reservation;
Loading