From efecc0f17c95f43881182f0a7a8a0b2148f177ba Mon Sep 17 00:00:00 2001 From: jlu18 Date: Mon, 1 Nov 2021 13:24:40 -0400 Subject: [PATCH 1/5] Added usersettings in google login schema and controller to pull it --- apiv1/controllers/GoogleLoginController.js | 78 +++++++++++++++++++++- apiv1/models/GoogleLoginModel.js | 9 ++- apiv1/routes/GoogleLoginRoutes.js | 4 ++ 3 files changed, 88 insertions(+), 3 deletions(-) diff --git a/apiv1/controllers/GoogleLoginController.js b/apiv1/controllers/GoogleLoginController.js index 1f8a19bb..ae1035d5 100644 --- a/apiv1/controllers/GoogleLoginController.js +++ b/apiv1/controllers/GoogleLoginController.js @@ -1,4 +1,4 @@ -const { isAdmin } = require('../authorization/verifyAuth'); +const { isAdmin, verifyGoogleToken } = require('../authorization/verifyAuth'); const GoogleLoginModel = require('../models/GoogleLoginModel'); const ObjectId = require('mongoose').Types.ObjectId; @@ -75,5 +75,81 @@ module.exports = { } return resp.status(200).json(account); + }, + getUserSetting : async function(req,resp){ + console.log("getting settings") + let uid = req.headers['x-access-token']; + if(!uid){ + return resp.status(401).json({ + message: "No userID supplied", + error: "Unauthorized" + }); + } + + if(uid !== "1"){ + uid = await verifyGoogleToken(req.headers['x-access-token']); + if(!uid){ + return resp.status(401).json(invalid_token); + } + } + + console.log(resp.params); + + let setting; + try { + const user = await GoogleLoginModel.findOne({_id:uid}); + setting = user.userSettings; + }catch(err){ + return resp.status(500).json({ + message: "Error finding User Setting", + error: err + }); + } + return resp.json(setting); + + }, + updateUserSetting: async function(req,resp){ + let id = req.params.id; + let body = req.body; + + if(!req.headers['x-access-token']){ + return resp.status(400).json({ + message: "Missing user ID", + error: "Bad Request" + }); + }else{ + let uid = await verifyGoogleToken(req.headers['x-access-token']); + if(!uid){ + return resp.status(401).json({ + message: "Invalid token recieved", + error: "Unauthorized" + }); + } + } + + if(Object.keys(body) === 0 || body.settings === undefined){ + return resp.status(400).json({ + message: "Missing required fields", + error: (Object.keys(body) == 0 ? "No body provided" : "No settings provided") + }); + } + + let googleId; + try { + googleId = await GoogleLoginModel.findByid(id); + } catch (err) { + return resp.status(500).json({ + message: "Error getting id", + error: err + }); + } + + if(!googleId){ + return resp.status(404).json({ + message: `Could not find googleId "${id}"`, + error: "Id not found" + }); + } + console.log(googleId); } }; \ No newline at end of file diff --git a/apiv1/models/GoogleLoginModel.js b/apiv1/models/GoogleLoginModel.js index 9d58d13e..d5c99156 100644 --- a/apiv1/models/GoogleLoginModel.js +++ b/apiv1/models/GoogleLoginModel.js @@ -1,9 +1,14 @@ let mongoose = require('mongoose'); let Schema = mongoose.Schema; -let GoogleAccountSchema = new Schema({ +const UserSetting = { + "darkMode": { type: Boolean, default:true } +}; + +const GoogleAccountSchema = new Schema({ "email": String, - "googleId": String + "googleId": String, + 'userSettings':UserSetting }); module.exports = mongoose.model('GoogleLogin', GoogleAccountSchema); \ No newline at end of file diff --git a/apiv1/routes/GoogleLoginRoutes.js b/apiv1/routes/GoogleLoginRoutes.js index 7ffce326..59c97890 100644 --- a/apiv1/routes/GoogleLoginRoutes.js +++ b/apiv1/routes/GoogleLoginRoutes.js @@ -6,4 +6,8 @@ router.get('/', GoogleLoginController.list); router.get('/id/:id', GoogleLoginController.getByID); +router.get('/settings', GoogleLoginController.getUserSetting); + +router.post('/settings', GoogleLoginController.updateUserSetting); + module.exports = router; \ No newline at end of file From 9e4901a7756fd9f0b110be5a34e06161a28c31c1 Mon Sep 17 00:00:00 2001 From: jlu18 Date: Mon, 8 Nov 2021 16:57:27 -0500 Subject: [PATCH 2/5] Modified bit so it will save the updated settings --- apiv1/controllers/GoogleLoginController.js | 36 +++++++++++++--------- apiv1/models/GoogleLoginModel.js | 4 +-- apiv1/routes/GoogleLoginRoutes.js | 2 +- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/apiv1/controllers/GoogleLoginController.js b/apiv1/controllers/GoogleLoginController.js index ae1035d5..2c157646 100644 --- a/apiv1/controllers/GoogleLoginController.js +++ b/apiv1/controllers/GoogleLoginController.js @@ -77,7 +77,6 @@ module.exports = { return resp.status(200).json(account); }, getUserSetting : async function(req,resp){ - console.log("getting settings") let uid = req.headers['x-access-token']; if(!uid){ return resp.status(401).json({ @@ -93,8 +92,6 @@ module.exports = { } } - console.log(resp.params); - let setting; try { const user = await GoogleLoginModel.findOne({_id:uid}); @@ -117,26 +114,26 @@ module.exports = { message: "Missing user ID", error: "Bad Request" }); - }else{ - let uid = await verifyGoogleToken(req.headers['x-access-token']); - if(!uid){ - return resp.status(401).json({ - message: "Invalid token recieved", - error: "Unauthorized" - }); - } } - if(Object.keys(body) === 0 || body.settings === undefined){ + if(Object.keys(body) === 0 || body === undefined){ return resp.status(400).json({ message: "Missing required fields", error: (Object.keys(body) == 0 ? "No body provided" : "No settings provided") }); } + let uid = await verifyGoogleToken(req.headers['x-access-token']); + if(!uid){ + return resp.status(401).json({ + message: "Invalid token recieved", + error: "Unauthorized" + }); + } + let googleId; try { - googleId = await GoogleLoginModel.findByid(id); + googleId = await GoogleLoginModel.findById(uid); } catch (err) { return resp.status(500).json({ message: "Error getting id", @@ -150,6 +147,17 @@ module.exports = { error: "Id not found" }); } - console.log(googleId); + + googleId.userSettings = body; + try { + await googleId.save(); + }catch(err){ + return resp.status(500).json({ + message: "Error updating user settings", + error: err + }); + } + + return resp.status(200).json(googleId);//No Content } }; \ No newline at end of file diff --git a/apiv1/models/GoogleLoginModel.js b/apiv1/models/GoogleLoginModel.js index d5c99156..97f2100d 100644 --- a/apiv1/models/GoogleLoginModel.js +++ b/apiv1/models/GoogleLoginModel.js @@ -2,7 +2,7 @@ let mongoose = require('mongoose'); let Schema = mongoose.Schema; const UserSetting = { - "darkMode": { type: Boolean, default:true } + "darkMode": { type: Boolean, default:false } }; const GoogleAccountSchema = new Schema({ @@ -11,4 +11,4 @@ const GoogleAccountSchema = new Schema({ 'userSettings':UserSetting }); -module.exports = mongoose.model('GoogleLogin', GoogleAccountSchema); \ No newline at end of file +module.exports = mongoose.model('GoogleLogin', GoogleAccountSchema); diff --git a/apiv1/routes/GoogleLoginRoutes.js b/apiv1/routes/GoogleLoginRoutes.js index 59c97890..e6409136 100644 --- a/apiv1/routes/GoogleLoginRoutes.js +++ b/apiv1/routes/GoogleLoginRoutes.js @@ -8,6 +8,6 @@ router.get('/id/:id', GoogleLoginController.getByID); router.get('/settings', GoogleLoginController.getUserSetting); -router.post('/settings', GoogleLoginController.updateUserSetting); +router.put('/settings', GoogleLoginController.updateUserSetting); module.exports = router; \ No newline at end of file From b5fd002ea1036952c6ac677a8c711dc3e817a505 Mon Sep 17 00:00:00 2001 From: jlu18 Date: Thu, 13 Jan 2022 08:47:44 -0500 Subject: [PATCH 3/5] Removed darkMode field and change it to fontSize to match with frontend PR --- apiv1/models/GoogleLoginModel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apiv1/models/GoogleLoginModel.js b/apiv1/models/GoogleLoginModel.js index 97f2100d..87afe133 100644 --- a/apiv1/models/GoogleLoginModel.js +++ b/apiv1/models/GoogleLoginModel.js @@ -2,7 +2,7 @@ let mongoose = require('mongoose'); let Schema = mongoose.Schema; const UserSetting = { - "darkMode": { type: Boolean, default:false } + "fontSize": { type: Number, default: 12 } }; const GoogleAccountSchema = new Schema({ From df0d5799828511b2ea7a6b069d31ce2b188137fb Mon Sep 17 00:00:00 2001 From: jlu18 Date: Wed, 2 Feb 2022 13:09:15 -0500 Subject: [PATCH 4/5] Merge branch 'dev' of https://github.com/engaging-computing/myr-backend into usersetting From 951c03617180e98a9e0cc283a950dc385178e346 Mon Sep 17 00:00:00 2001 From: jlu18 Date: Wed, 2 Feb 2022 13:25:51 -0500 Subject: [PATCH 5/5] Fixed UID check for getUserSettings, Removed a comment --- apiv1/controllers/GoogleLoginController.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/apiv1/controllers/GoogleLoginController.js b/apiv1/controllers/GoogleLoginController.js index 2c157646..10308075 100644 --- a/apiv1/controllers/GoogleLoginController.js +++ b/apiv1/controllers/GoogleLoginController.js @@ -78,18 +78,21 @@ module.exports = { }, getUserSetting : async function(req,resp){ let uid = req.headers['x-access-token']; - if(!uid){ + + if(!uid || uid === "1"){ return resp.status(401).json({ - message: "No userID supplied", + message: "Invalid userID supplied", error: "Unauthorized" }); } - if(uid !== "1"){ - uid = await verifyGoogleToken(req.headers['x-access-token']); - if(!uid){ - return resp.status(401).json(invalid_token); - } + uid = await verifyGoogleToken(req.headers['x-access-token']); + + if(!uid){ + return resp.status(404).json({ + message: "Failed to Found the supplied UserID", + error: "Not Found" + }); } let setting; @@ -158,6 +161,6 @@ module.exports = { }); } - return resp.status(200).json(googleId);//No Content + return resp.status(200).json(googleId); } }; \ No newline at end of file