User system expanded

This commit is contained in:
Felix Albrigtsen 2022-04-22 19:32:25 +02:00
parent 0ff1db6fb4
commit 63618245e2
3 changed files with 57 additions and 9 deletions

View File

@ -17,8 +17,13 @@ app.use(express.json());
app.use(express.urlencoded({ extended: true })); app.use(express.urlencoded({ extended: true }));
app.use(session({ app.use(session({
resave: true, resave: true,
saveUninitialized: true, saveUninitialized: false,
secret: 'ASURASECRET' secret: process.env.COOKIE_SECRET,
rolling: true,
cookie: {
secure: process.env.COOKIE_SECURE,
maxAge: 60 * 60 * 1000 // 1 hour (in milliseconds)
}
})); }));
let api = express.Router(); let api = express.Router();
app.use("/api", api); app.use("/api", api);
@ -76,19 +81,43 @@ passport.use(new GoogleStrategy({
)); ));
app.get('/auth/google', app.get('/auth/google',
passport.authenticate('google', { scope : ['profile', 'email'] })); passport.authenticate('google', { scope : ['profile', 'email']
}));
app.get('/auth/google/callback', app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/error' }), passport.authenticate('google', { failureRedirect: '/error' }),
async function(req, res) { async function(req, res) {
// Get user profile from passport // Get user profile from passport
let user = { let user = {
id: req.user.id, googleId: req.user.id,
asuraId: null,
name: req.user.displayName, name: req.user.displayName,
email: req.user.emails[0].value email: req.user.emails[0].value,
imgurl: req.user.photos[0].value
} }
// Check if user exists in database
tmdb.getUserByEmail(user.email)
.then(dbUser => {
user.asuraId = dbUser.id;
if (!dbUser.googleId) {
// User is "preregistered" with email only, so complete the registration
user.isManager = false;
tmdb.editUser(user.email, user)
.then(() => { user.asuraId = dbUser.id})
.catch(err => console.log(err));
} else {
user = dbUser;
}
req.session.user = user; req.session.user = user;
res.json(user); res.json({"status": "OK", "data": user});
})
.catch(err => {
// User is neither registered nor preregistered
res.json({"status": "error", message: "Email is not in administrator list."});
return
});
} }
); );
@ -369,6 +398,17 @@ api.get("/users/getSessionUser", (req, res) => {
} }
}); });
api.get("/users/getSavedUser", (req, res) => {
if (!req.session.user) {
res.json({"status": "error", "data": "No user logged in"});
return
}
let googleId = req.session.user.googleId;
tmdb.getUserByGoogleId(googleId)
.then(user => res.json({"status": "OK", "data": user}))
.catch(err => res.json({"status": "error", "data": err}));
});
api.get("/users/getUsers", (req, res) => { api.get("/users/getUsers", (req, res) => {
tmdb.getUsers() tmdb.getUsers()
.then(users => res.json({"status": "OK", "data": users})) .then(users => res.json({"status": "OK", "data": users}))
@ -403,4 +443,11 @@ api.post("/users/edit", (req, res) => {
}); });
api.get("/dumpsession", (req, res) => {
let out = {};
out.session = req.session;
out.header = req.headers;
res.json(out);
});
// #endregion // #endregion

View File

@ -40,7 +40,7 @@ CREATE TABLE matches (
CREATE TABLE users ( CREATE TABLE users (
id INTEGER PRIMARY KEY AUTO_INCREMENT, id INTEGER PRIMARY KEY AUTO_INCREMENT,
googleId INTEGER, googleId TEXT,
name TEXT, name TEXT,
email TEXT NOT NULL, email TEXT NOT NULL,
isManager BOOLEAN NOT NULL isManager BOOLEAN NOT NULL

View File

@ -17,6 +17,7 @@ module.exports = {
getTeamsByTournamentId: getTeamsByTournamentId, getTeamsByTournamentId: getTeamsByTournamentId,
getUsers: getUsers, getUsers: getUsers,
getUserByEmail: getUserByEmail, getUserByEmail: getUserByEmail,
getUserByGoogleId: getUserByGoogleId,
createUserBlank: createUserBlank, createUserBlank: createUserBlank,
editUser: editUser, editUser: editUser,
} }
@ -496,7 +497,7 @@ function createUserBlank(email) {
return; return;
} }
// Create a user, with only an email address // Create a user, with only an email address
connection.query("INSERT INTO users (email, isManager) VALUES (?), FALSE", [escapeString(email)], (err, sets) => { connection.query("INSERT INTO users (email, isManager) VALUES (?, FALSE)", [escapeString(email)], (err, sets) => {
if (err) { if (err) {
console.log(err); console.log(err);
reject(err); reject(err);