-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
122 lines (105 loc) · 3.45 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import express, { response } from "express";
import bodyParser from "body-parser";
import ejs from "ejs";
import allRoutes from "./src/routes/routes.js"
import mongoose from "mongoose";
import passport from "passport";
import passportLocal from "passport-local"
import cors from "cors";
import cookieParser from "cookie-parser";
import session from "express-session";
import flash from "connect-flash";
import googleAuth from "passport-google-oauth20";
import facebookAuth from "passport-facebook";
import dotenv from "dotenv/config.js"
import dbMethods from "./src/models/databaseMethods.js";
import entryController from "./src/controllers/entryController.js";
const GoogleStrategy = googleAuth.Strategy;
const FacebookStrategy = facebookAuth.Strategy;
const localStrategy = passportLocal.Strategy;
mongoose.set('strictQuery', true);
mongoose.connect(process.env.DBURL);
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('MongoDB connection established successfully!');
});
const app = express();
app.use(cors({optionsSuccessStatus:200}));
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.json())
app.use(cookieParser());
app.use(session({
secret: "SecretKey",
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 1000*60*60*24
}
}))
app.use(flash())
app.use(express.static("public"));
app.set("view engine", "ejs");
app.set("views", "views");
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localStrategy({
usernameField: "email",
passwordField: "password",
passReqToCallback: true
}, async (req, email, password, done)=>{
const authenticateuser = await entryController.postLoginControl(email, password);
if(authenticateuser) return done(null, authenticateuser, null)
return done(null, false, req.flash("errors","Incorrect email or password"))
}))
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: process.env.GOOGLE_CALLBACK_URL
}, async function(accessToken, refreshToken, profile, cb) {
const user = {email: profile.emails[0].value, username: profile.name.givenName, googleId: profile.id}
dbMethods.findAndUpdate(user)
.then(foundUser=>{
console.log(foundUser)
return cb(null, foundUser);
})
.catch(e=>{
return cb(e, null)
})
}
))
passport.use(new FacebookStrategy({
clientID: process.env.FACEBOOK_CLIENT_ID,
clientSecret:process.env.FACEBOOK_CLIENT_SECRET,
callbackURL: process.env.FACEBOOK_CALLBACK_URL
}, function(accessToken, refreshToken, profile, cb) {
const user = {username: profile.displayName, facebookId: profile.id}
fetch(`https://graph.facebook.com/${profile.id}?fields=id,name,email&access_token=${accessToken}`)
.then((data)=>{
return data.json();
}).then((response=>{
user.email = response.email;
console.log(user)
dbMethods.findAndUpdate(user)
.then(foundUser=>{
return cb(null, foundUser);
})
.catch(e=>{
return cb(e, null)
})
}))
} ))
passport.serializeUser(function(user, done){
done(null, user)
})
passport.deserializeUser(async function(userid, done){
const user = await dbMethods.findSomeThingById(userid);
if (user) return done(null, user)
else return done(null, null)
})
allRoutes(app);
app.listen(process.env.PORT || 3000, ()=>{
console.log("Your app is running at port 80")
})
export default app;