Skip to content
Merged
89 changes: 88 additions & 1 deletion apiv1/controllers/GoogleLoginController.js
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -75,5 +75,92 @@ module.exports = {
}

return resp.status(200).json(account);
},
getUserSetting : async function(req,resp){
let uid = req.headers['x-access-token'];

if(!uid || uid === "1"){
return resp.status(401).json({
message: "Invalid userID supplied",
error: "Unauthorized"
});
}

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;
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"
});
}

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(uid);
} 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"
});
}

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);
}
};
11 changes: 8 additions & 3 deletions apiv1/models/GoogleLoginModel.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
let mongoose = require('mongoose');
let Schema = mongoose.Schema;

let GoogleAccountSchema = new Schema({
const UserSetting = {
"fontSize": { type: Number, default: 12 }
};

const GoogleAccountSchema = new Schema({
"email": String,
"googleId": String
"googleId": String,
'userSettings':UserSetting
});

module.exports = mongoose.model('GoogleLogin', GoogleAccountSchema);
module.exports = mongoose.model('GoogleLogin', GoogleAccountSchema);
4 changes: 4 additions & 0 deletions apiv1/routes/GoogleLoginRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ router.get('/', GoogleLoginController.list);

router.get('/id/:id', GoogleLoginController.getByID);

router.get('/settings', GoogleLoginController.getUserSetting);

router.put('/settings', GoogleLoginController.updateUserSetting);

module.exports = router;