diff --git a/_locales/en/messages.json b/_locales/en/messages.json index d1864f5c6..6d36bd739 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -321,6 +321,13 @@ "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" + }, + "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/background.ts b/src/background.ts index 2722816ea..1358c02df 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 !== "true" ? ".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 !== "true" + ? ".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..80bf74472 100644 --- a/src/components/Popup/OneDrivePage.vue +++ b/src/components/Popup/OneDrivePage.vue @@ -26,6 +26,14 @@ {{ i18n.sign_in }} + + {{ i18n.sign_in_business }} + +
+ {{ + i18n.onedrive_business_perms + }} +
{{ i18n.manual_dropbox }} @@ -67,7 +75,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..70e64f44d 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 !== "true" ? ".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: