From b447d81b4c23d9c8fe5e52b8b989b908bf3dd2d1 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 22 Jul 2025 18:23:11 +1200 Subject: [PATCH 1/8] Add service account to file permissions --- server/googleActions.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/server/googleActions.js b/server/googleActions.js index 0ca7556ba..bfa44c800 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -6,6 +6,7 @@ import config from './config.js'; let serviceAuth; +let clientEmail; if(!config.get('service_account')){ const reset = '\x1b[0m'; // Reset to default style const yellow = '\x1b[33m'; // yellow color @@ -15,6 +16,10 @@ if(!config.get('service_account')){ JSON.parse(config.get('service_account')) : config.get('service_account'); + if(keys?.client_email) { + clientEmail = keys.client_email; + } + try { serviceAuth = googleDrive.auth.fromJSON(keys); serviceAuth.scopes = ['https://www.googleapis.com/auth/drive']; @@ -227,9 +232,27 @@ const GoogleActions = { if(!obj) return; + if(clientEmail) { + await drive.permissions.create({ + resource : { + type : 'user', + emailAddress : clientEmail, + role : 'writer' + }, + fileId : obj.data.id, + fields : 'id', + }) + .catch((err)=>{ + console.log('Error updating permissions'); + console.error(err); + }); + } + await drive.permissions.create({ - resource : { type : 'anyone', - role : 'writer' }, + resource : { + type : 'anyone', + role : 'writer' + }, fileId : obj.data.id, fields : 'id', }) From 8e2abb9f78c1c065b8206e310041305797f0bac5 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 25 Jul 2025 12:04:41 +1200 Subject: [PATCH 2/8] Basic Google file permission checking --- server/app.js | 5 ++++- server/googleActions.js | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/server/app.js b/server/app.js index 869fe6555..0e69484b0 100644 --- a/server/app.js +++ b/server/app.js @@ -318,6 +318,9 @@ app.get('/user/:username', async (req, res, next)=>{ // If stub matches file from Google, use Google metadata over stub metadata if(googleBrews && googleBrews.length > 0) { for (const brew of brews.filter((brew)=>brew.googleId)) { + const permissionCheck = await GoogleActions.checkPermissions(auth, brew); + brew.permissionCheck = permissionCheck; + const match = googleBrews.findIndex((b)=>b.editId === brew.editId); if(match !== -1) { brew.googleId = googleBrews[match].googleId; @@ -330,7 +333,7 @@ app.get('/user/:username', async (req, res, next)=>{ } //Remaining unstubbed google brews display current user as author - googleBrews = googleBrews.map((brew)=>({ ...brew, authors: [req.account.username] })); + googleBrews = googleBrews.map(async (brew)=>({ ...brew, authors: [req.account.username] })); brews = _.concat(brews, googleBrews); } } diff --git a/server/googleActions.js b/server/googleActions.js index bfa44c800..447d99874 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -264,6 +264,26 @@ const GoogleActions = { return obj.data.id; }, + checkPermissions : async (auth, brew)=>{ + if(!brew?.googleId) return; + const drive = googleDrive.drive({ version: 'v3', auth }); + + try { + const driveData = await drive.permissions.list({ fileId: brew.googleId }); + const permissionsList = driveData?.data?.permissions; + + if(permissionsList.some((permission)=>{ + return permission.id == 'anyoneWithLink' && permission.role == 'writer'; + })){ + return 1; + }; + } catch (err) { + return err.code; + } + + return 999; + }, + getGoogleBrew : async (auth = defaultAuth, id, accessId, accessType)=>{ const drive = googleDrive.drive({ version: 'v3', auth: auth }); From 35d93582d762b619a9dc1817f9d74690bc8ddfc2 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 10 Nov 2025 06:04:10 +0000 Subject: [PATCH 3/8] Remove unnecessary async map function --- server/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/app.js b/server/app.js index da1a4ba7e..e3978ee8b 100644 --- a/server/app.js +++ b/server/app.js @@ -334,7 +334,7 @@ app.get('/user/:username', dbCheck, async (req, res, next)=>{ } //Remaining unstubbed google brews display current user as author - googleBrews = googleBrews.map(async (brew)=>({ ...brew, authors: [req.account.username] })); + googleBrews = googleBrews.map((brew)=>({ ...brew, authors: [req.account.username] })); brews = _.concat(brews, googleBrews); } } From de85c8468507956ba5c96d78ea1af425a9341dd1 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 10 Nov 2025 06:05:58 +0000 Subject: [PATCH 4/8] Remove permissionsCheck from brew listing --- server/app.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/app.js b/server/app.js index e3978ee8b..1bdb5aac3 100644 --- a/server/app.js +++ b/server/app.js @@ -319,9 +319,6 @@ app.get('/user/:username', dbCheck, async (req, res, next)=>{ // If stub matches file from Google, use Google metadata over stub metadata if(googleBrews && googleBrews.length > 0) { for (const brew of brews.filter((brew)=>brew.googleId)) { - const permissionCheck = await GoogleActions.checkPermissions(auth, brew); - brew.permissionCheck = permissionCheck; - const match = googleBrews.findIndex((b)=>b.editId === brew.editId); if(match !== -1) { brew.googleId = googleBrews[match].googleId; From 14ea286aa27a877aec9fb93bfed66770593e3653 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 10 Nov 2025 06:07:37 +0000 Subject: [PATCH 5/8] Remove Google permissions check function --- server/googleActions.js | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/server/googleActions.js b/server/googleActions.js index 447d99874..bfa44c800 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -264,26 +264,6 @@ const GoogleActions = { return obj.data.id; }, - checkPermissions : async (auth, brew)=>{ - if(!brew?.googleId) return; - const drive = googleDrive.drive({ version: 'v3', auth }); - - try { - const driveData = await drive.permissions.list({ fileId: brew.googleId }); - const permissionsList = driveData?.data?.permissions; - - if(permissionsList.some((permission)=>{ - return permission.id == 'anyoneWithLink' && permission.role == 'writer'; - })){ - return 1; - }; - } catch (err) { - return err.code; - } - - return 999; - }, - getGoogleBrew : async (auth = defaultAuth, id, accessId, accessType)=>{ const drive = googleDrive.drive({ version: 'v3', auth: auth }); From 1adbbc2ced21f7157b5a4937c7cea5d0860b090a Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sat, 15 Nov 2025 15:37:01 +1300 Subject: [PATCH 6/8] Updated error message on failure to set permissions on Google Drive file --- server/googleActions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/googleActions.js b/server/googleActions.js index bfa44c800..5a2f82001 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -243,7 +243,7 @@ const GoogleActions = { fields : 'id', }) .catch((err)=>{ - console.log('Error updating permissions'); + console.log('Error updating permissions on Google Drive file'); console.error(err); }); } From e063eab4e7c928daa4e036b1485a3b4237336a9d Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sat, 15 Nov 2025 15:40:55 +1300 Subject: [PATCH 7/8] Make error messages more distinctive --- server/googleActions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/googleActions.js b/server/googleActions.js index 5a2f82001..8210f1827 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -243,7 +243,7 @@ const GoogleActions = { fields : 'id', }) .catch((err)=>{ - console.log('Error updating permissions on Google Drive file'); + console.log('Error adding Service Account permissions on Google Drive file'); console.error(err); }); } @@ -257,7 +257,7 @@ const GoogleActions = { fields : 'id', }) .catch((err)=>{ - console.log('Error updating permissions'); + console.log('Error adding "Anyone" permissions on Google Drive file'); console.error(err); }); From a0cfec7668f2d087e6838707f6a8b1135a2d00d3 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sat, 15 Nov 2025 04:35:23 +0000 Subject: [PATCH 8/8] test change --- server/googleActions.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/server/googleActions.js b/server/googleActions.js index 8210f1827..b13ca11b9 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -249,10 +249,8 @@ const GoogleActions = { } await drive.permissions.create({ - resource : { - type : 'anyone', - role : 'writer' - }, + resource : { type : 'anyone', + role : 'writer' }, fileId : obj.data.id, fields : 'id', })