-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
146 lines (122 loc) · 4.83 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
const dotenv = require('dotenv').config()
const express = require('express')
const session = require('express-session')
const passport = require('passport')
const Auth0Strategy = require('passport-auth0')
const bodyParser = require('body-parser')
const massive = require('massive')
const cors = require('cors');
const port = 3000
const current_exercises_controller = require('./current_exercises_controller')
const goal_exercises_controller = require('./goal_exercises_controller')
const user_controller = require('./user_controller')
const path = require('path');
const app = module.exports = express()
app.use(bodyParser.json());
app.use(cors() )
app.use(session({
resave: true, //Without this you get a constant warning about default values
saveUninitialized: true, //Without this you get a constant warning about default values
secret: process.env.secret
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));
//massive(config.massiveConnectionString).then( db => {app.set("db", db)});
const massiveConnectionString = process.env.DATABASE_URL
massive(massiveConnectionString).then( db => {app.set("db", db)});
// db.create_user(function(err, user) {
// if (err) console.log(err);
// else console.log('CREATED USER');
// console.log(user);
// })
passport.use(new Auth0Strategy({
domain: process.env.domain,
clientID: process.env.clientID,
clientSecret: process.env.clientSecret,
callbackURL: '/auth/callback',
scope: 'openid profile email',
},
function(accessToken, refreshToken, extraParams, profile, done) {
//Find user in database
const db = app.get('db')
console.log('profile', profile);
const id = profile.id.toString()
const user_id = id.slice(6,id.length);
db.getUserByAuthId([user_id]).then((user) => {
console.log("user", user.length)
console.log("the user", user)
if (user.length < 1) { //if there isn't one, we'll create one!
console.log('CREATING USER', profile);
db.createUserByAuth([ profile.nickname, user_id]).then((user) => {
console.log('USER CREATED user[0]', user[0]);
console.log('USER CREATED user', user_id);
return done(null, user[0]); // GOES TO SERIALIZE USER
})
}
else { //when we find the user, return it
console.log('FOUND USER', user[0]);
console.log('FOUND USER', user);
return done(null, user);
}
}).catch(err => console.log(err));
}
));
//THIS IS INVOKED ONE TIME TO SET THINGS UP
passport.serializeUser((userA, done) => {
console.log('serializing', userA);
let userB = userA;
//Things you might do here :
//Serialize just the id, get other information to add to session,
done(null, userB); //PUTS 'USER' ON THE SESSION
});
//USER COMES FROM SESSION - THIS IS INVOKED FOR EVERY ENDPOINT
passport.deserializeUser((userB, done) => {
let userC = userB;
//Things you might do here :
// Query the database with the user id, get other information to put on req.user
done(null, userC); //PUTS 'USER' ON REQ.USER
});
app.get('/auth', passport.authenticate('auth0'));
app.get('/auth/callback',
passport.authenticate('auth0', {successRedirect: '/#!/basic'}), function(req, res) {
console.log('callback')
res.status(200).send(req.user);
})
app.get('/auth/me', (req, res) => {
console.log(req.user)
var user = req.user;
if (!req.user) return res.sendStatus(404);
//THIS IS WHATEVER VALUE WE GOT FROM userC variable above.
res.status(200).send(req.user);
})
app.get('/auth/logout', (req, res) => {
console.log('logging out res?:', res.user )
console.log('logging out?:', req.user )
req.logout();
res.redirect('http://vintruv-fitness.herokuapp.com');
//
// http://vincentcastig.auth0.com/v2/logout
// https://YOUR_AUTH0_DOMAIN/v2/logout
})
//app.use means we are using some middleware
app.post('/api/exercise', current_exercises_controller.create)
app.get('/api/exercises', current_exercises_controller.getAll)
app.get('/api/exercise/:id', current_exercises_controller.getOne)
app.get('/api/lastexercise', current_exercises_controller.getLast)
app.put('/api/exercise/:id', current_exercises_controller.update)
app.delete('/api/exercise/:id', current_exercises_controller.delete)
//post exercise goal on registration
app.post('/api/goal', goal_exercises_controller.create)
app.get('/api/goals', goal_exercises_controller.getAll)
app.get('/api/goal/:id', goal_exercises_controller.getOne)
app.put('/api/goal/:id', goal_exercises_controller.update)
app.delete('/api/goal/:id', goal_exercises_controller.delete)
//register user
app.post('/api/user', user_controller.create)
app.get('/api/users', user_controller.getAll)
//login user and find user by username
app.get('/api/user', user_controller.getUser)
app.listen(process.env.PORT, () => {
console.log(`Hey dude, I'm listening`)
})