From f7de7286943a93356c01dfb5b1d02f32f1f39c53 Mon Sep 17 00:00:00 2001 From: Brendan Early Date: Sat, 3 Apr 2021 10:24:18 -0500 Subject: [PATCH 1/3] Onedrive Business account permissions fix #633 Co-authored-by: jbostoen <-> --- _locales/en/messages.json | 4 ++++ src/background.ts | 10 ++++++++-- src/components/Popup/OneDrivePage.vue | 6 +++++- src/models/backup.ts | 4 +++- src/store/Backup.ts | 2 +- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index d1864f5c6..06c357bab 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -321,6 +321,10 @@ "message": "Sign in", "description": "Sign in to 3rd party storage services" }, + "sign_in_business": { + "message": "Sign in (Business)", + "description": "Sign in to 3rd party storage services" + }, "log_out": { "message": "Logout", "description": "Sign out of 3rd party storage services" diff --git a/src/background.ts b/src/background.ts index 2722816ea..28de51cb5 100644 --- a/src/background.ts +++ b/src/background.ts @@ -331,7 +331,9 @@ function getBackupToken(service: string) { redirUrl = encodeURIComponent(chrome.identity.getRedirectURL()); authUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=${ getCredentials().onedrive.client_id - }&response_type=code&redirect_uri=${redirUrl}&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite.AppFolder%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access&response_mode=query&prompt=consent`; + }&response_type=code&redirect_uri=${redirUrl}&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite${ + localStorage.oneDriveBusiness === "false" ? ".AppFolder" : "" + }%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access&response_mode=query&prompt=consent`; } chrome.identity.launchWebAuthFlow( { url: authUrl, interactive: true }, @@ -459,7 +461,11 @@ function getBackupToken(service: string) { xhr.send( `client_id=${ getCredentials().onedrive.client_id - }&grant_type=authorization_code&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite.AppFolder%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access&code=${value}&redirect_uri=${redirUrl}&client_secret=${encodeURIComponent( + }&grant_type=authorization_code&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite${ + localStorage.oneDriveBusiness === "false" + ? ".AppFolder" + : "" + }%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access&code=${value}&redirect_uri=${redirUrl}&client_secret=${encodeURIComponent( getCredentials().onedrive.client_secret )}` ); diff --git a/src/components/Popup/OneDrivePage.vue b/src/components/Popup/OneDrivePage.vue index 1fb2ad42e..7657942a9 100644 --- a/src/components/Popup/OneDrivePage.vue +++ b/src/components/Popup/OneDrivePage.vue @@ -26,6 +26,9 @@ {{ i18n.sign_in }} + + {{ i18n.sign_in_business }} + {{ i18n.manual_dropbox }} @@ -67,7 +70,8 @@ export default Vue.extend({ }, }, methods: { - getBackupToken() { + getBackupToken(business?: boolean) { + localStorage.oneDriveBusiness = Boolean(business); chrome.runtime.sendMessage({ action: service }); }, async backupLogout() { diff --git a/src/models/backup.ts b/src/models/backup.ts index 5e3991b55..4f9cd979f 100644 --- a/src/models/backup.ts +++ b/src/models/backup.ts @@ -538,7 +538,9 @@ export class OneDrive implements BackupProvider { localStorage.oneDriveRefreshToken }&client_secret=${encodeURIComponent( getCredentials().onedrive.client_secret - )}&grant_type=refresh_token&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite.AppFolder%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access` + )}&grant_type=refresh_token&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite${ + localStorage.oneDriveBusiness === "false" ? ".AppFolder" : "" + }%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access` ); } ); diff --git a/src/store/Backup.ts b/src/store/Backup.ts index 0588dcd35..2290f47fc 100644 --- a/src/store/Backup.ts +++ b/src/store/Backup.ts @@ -24,7 +24,7 @@ export class Backup implements Module { break; case "onedrive": - state.driveToken = args.value; + state.oneDriveToken = args.value; break; default: From 19351efda2259452287f4b0b95e366e62380ae2f Mon Sep 17 00:00:00 2001 From: Brendan Early Date: Sat, 3 Apr 2021 11:45:21 -0500 Subject: [PATCH 2/3] Add permissions message to OneDrive sign-in page --- _locales/en/messages.json | 3 +++ src/components/Popup/OneDrivePage.vue | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 06c357bab..6d36bd739 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -325,6 +325,9 @@ "message": "Sign in (Business)", "description": "Sign in to 3rd party storage services" }, + "onedrive_business_perms": { + "message": "Why do business accounts require more permissions?" + }, "log_out": { "message": "Logout", "description": "Sign out of 3rd party storage services" diff --git a/src/components/Popup/OneDrivePage.vue b/src/components/Popup/OneDrivePage.vue index 7657942a9..80bf74472 100644 --- a/src/components/Popup/OneDrivePage.vue +++ b/src/components/Popup/OneDrivePage.vue @@ -29,6 +29,11 @@ {{ i18n.sign_in_business }} + {{ i18n.manual_dropbox }} From e3f7cdf4de33af0696259cbdf6f7dfbb17753d38 Mon Sep 17 00:00:00 2001 From: Brendan Early Date: Fri, 9 Apr 2021 12:34:57 -0500 Subject: [PATCH 3/3] review fix --- src/background.ts | 4 ++-- src/models/backup.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/background.ts b/src/background.ts index 28de51cb5..1358c02df 100644 --- a/src/background.ts +++ b/src/background.ts @@ -332,7 +332,7 @@ function getBackupToken(service: string) { authUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=${ getCredentials().onedrive.client_id }&response_type=code&redirect_uri=${redirUrl}&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite${ - localStorage.oneDriveBusiness === "false" ? ".AppFolder" : "" + localStorage.oneDriveBusiness !== "true" ? ".AppFolder" : "" }%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access&response_mode=query&prompt=consent`; } chrome.identity.launchWebAuthFlow( @@ -462,7 +462,7 @@ function getBackupToken(service: string) { `client_id=${ getCredentials().onedrive.client_id }&grant_type=authorization_code&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite${ - localStorage.oneDriveBusiness === "false" + localStorage.oneDriveBusiness !== "true" ? ".AppFolder" : "" }%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access&code=${value}&redirect_uri=${redirUrl}&client_secret=${encodeURIComponent( diff --git a/src/models/backup.ts b/src/models/backup.ts index 4f9cd979f..70e64f44d 100644 --- a/src/models/backup.ts +++ b/src/models/backup.ts @@ -539,7 +539,7 @@ export class OneDrive implements BackupProvider { }&client_secret=${encodeURIComponent( getCredentials().onedrive.client_secret )}&grant_type=refresh_token&scope=https%3A%2F%2Fgraph.microsoft.com%2FFiles.ReadWrite${ - localStorage.oneDriveBusiness === "false" ? ".AppFolder" : "" + localStorage.oneDriveBusiness !== "true" ? ".AppFolder" : "" }%20https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20offline_access` ); }