提交 c6bf931b 编写于 作者: R Rachel Macfarlane

Move settings sync auth provider id out to setting

上级 2eb1c837
......@@ -140,11 +140,12 @@ export interface IUserDataSyncStore {
url: string;
name: string;
account: string;
authenticationProviderId: string;
}
export function getUserDataSyncStore(configurationService: IConfigurationService): IUserDataSyncStore | undefined {
const value = configurationService.getValue<IUserDataSyncStore>(CONFIGURATION_SYNC_STORE_KEY);
return value && value.url && value.name && value.account ? value : undefined;
return value && value.url && value.name && value.account && value.authenticationProviderId ? value : undefined;
}
export const IUserDataSyncStoreService = createDecorator<IUserDataSyncStoreService>('IUserDataSyncStoreService');
......
......@@ -38,16 +38,15 @@ import { Session } from 'vs/editor/common/modes';
import { isPromiseCanceledError, canceled } from 'vs/base/common/errors';
import { toErrorMessage } from 'vs/base/common/errorMessage';
const enum MSAAuthStatus {
const enum AuthStatus {
Initializing = 'Initializing',
SignedIn = 'SignedIn',
SignedOut = 'SignedOut'
}
const CONTEXT_AUTH_TOKEN_STATE = new RawContextKey<string>('authTokenStatus', MSAAuthStatus.Initializing);
const CONTEXT_AUTH_TOKEN_STATE = new RawContextKey<string>('authTokenStatus', AuthStatus.Initializing);
const SYNC_PUSH_LIGHT_ICON_URI = URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/userDataSync/browser/media/check-light.svg`));
const SYNC_PUSH_DARK_ICON_URI = URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/userDataSync/browser/media/check-dark.svg`));
const MSA = 'MSA';
type ConfigureSyncQuickPickItem = { id: string, label: string, description?: string };
export class UserDataSyncWorkbenchContribution extends Disposable implements IWorkbenchContribution {
......@@ -104,8 +103,8 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
}
private async initializeActiveAccount(): Promise<void> {
const accounts = await this.authenticationService.getSessions(MSA);
// MSA provider has not yet been registered
const accounts = await this.authenticationService.getSessions(this.userDataSyncStore!.authenticationProviderId);
// Auth provider has not yet been registered
if (!accounts) {
return;
}
......@@ -141,20 +140,20 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
if (account) {
this.userDataAuthTokenService.setToken(account.accessToken);
this.authenticationState.set(MSAAuthStatus.SignedIn);
this.authenticationState.set(AuthStatus.SignedIn);
} else {
this.userDataAuthTokenService.setToken(undefined);
this.authenticationState.set(MSAAuthStatus.SignedOut);
this.authenticationState.set(AuthStatus.SignedOut);
}
this.updateBadge();
}
private async onDidChangeSessions(providerId: string): Promise<void> {
if (providerId === MSA) {
if (providerId === this.userDataSyncStore!.authenticationProviderId) {
if (this.activeAccount) {
// Try to update existing account, case where access token has been refreshed
const accounts = (await this.authenticationService.getSessions(MSA) || []);
const accounts = (await this.authenticationService.getSessions(this.userDataSyncStore!.authenticationProviderId) || []);
const matchingAccount = accounts.filter(a => a.id === this.activeAccount?.id)[0];
this.activeAccount = matchingAccount;
} else {
......@@ -164,13 +163,13 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
}
private async onDidRegisterAuthenticationProvider(providerId: string) {
if (providerId === MSA) {
if (providerId === this.userDataSyncStore!.authenticationProviderId) {
await this.initializeActiveAccount();
}
}
private onDidUnregisterAuthenticationProvider(providerId: string) {
if (providerId === MSA) {
if (providerId === this.userDataSyncStore!.authenticationProviderId) {
this.activeAccount = undefined;
this.authenticationState.reset();
}
......@@ -215,7 +214,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
this.updateBadge();
const enabled = this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING);
if (enabled) {
if (this.authenticationState.get() === MSAAuthStatus.SignedOut) {
if (this.authenticationState.get() === AuthStatus.SignedOut) {
const handle = this.notificationService.prompt(Severity.Info, localize('sign in message', "Please sign in with your {0} account to continue sync", this.userDataSyncStore!.account),
[
{
......@@ -238,7 +237,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
let clazz: string | undefined;
let priority: number | undefined = undefined;
if (this.userDataSyncService.status !== SyncStatus.Uninitialized && this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING) && this.authenticationState.get() === MSAAuthStatus.SignedOut) {
if (this.userDataSyncService.status !== SyncStatus.Uninitialized && this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING) && this.authenticationState.get() === AuthStatus.SignedOut) {
badge = new NumberBadge(1, () => localize('sign in to sync', "Sign in to Sync"));
} else if (this.userDataSyncService.status === SyncStatus.HasConflicts) {
badge = new NumberBadge(1, () => localize('resolve conflicts', "Resolve Conflicts"));
......@@ -261,7 +260,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
quickPick.title = localize('turn on sync', "Turn on Sync");
quickPick.ok = false;
quickPick.customButton = true;
if (this.authenticationState.get() === MSAAuthStatus.SignedIn) {
if (this.authenticationState.get() === AuthStatus.SignedIn) {
quickPick.description = localize('turn on sync detail', "Turn on to synchronize your following data across all your devices.");
quickPick.customLabel = localize('turn on', "Turn on");
} else {
......@@ -287,7 +286,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
}
private async doTurnOn(): Promise<void> {
if (this.authenticationState.get() === MSAAuthStatus.SignedOut) {
if (this.authenticationState.get() === AuthStatus.SignedOut) {
await this.signIn();
}
await this.handleFirstTimeSync();
......@@ -400,7 +399,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
private async signIn(): Promise<void> {
try {
this.activeAccount = await this.authenticationService.login(MSA);
this.activeAccount = await this.authenticationService.login(this.userDataSyncStore!.authenticationProviderId);
} catch (e) {
this.notificationService.error(e);
throw e;
......@@ -409,7 +408,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
private async signOut(): Promise<void> {
if (this.activeAccount) {
await this.authenticationService.logout(MSA, this.activeAccount.id);
await this.authenticationService.logout(this.userDataSyncStore!.authenticationProviderId, this.activeAccount.id);
this.activeAccount = undefined;
}
}
......@@ -481,7 +480,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
private registerActions(): void {
const turnOnSyncCommandId = 'workbench.userData.actions.syncStart';
const turnOnSyncWhenContext = ContextKeyExpr.and(CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), ContextKeyExpr.not(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.notEqualsTo(MSAAuthStatus.Initializing));
const turnOnSyncWhenContext = ContextKeyExpr.and(CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), ContextKeyExpr.not(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.notEqualsTo(AuthStatus.Initializing));
CommandsRegistry.registerCommand(turnOnSyncCommandId, async () => {
try {
await this.turnOn();
......@@ -508,7 +507,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
});
const signInCommandId = 'workbench.userData.actions.signin';
const signInWhenContext = ContextKeyExpr.and(CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), ContextKeyExpr.has(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.isEqualTo(MSAAuthStatus.SignedOut));
const signInWhenContext = ContextKeyExpr.and(CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), ContextKeyExpr.has(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthStatus.SignedOut));
CommandsRegistry.registerCommand(signInCommandId, () => this.signIn());
MenuRegistry.appendMenuItem(MenuId.GlobalActivity, {
group: '5_sync',
......@@ -534,7 +533,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
id: stopSyncCommandId,
title: localize('global activity stop sync', "Turn off sync")
},
when: ContextKeyExpr.and(ContextKeyExpr.has(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.isEqualTo(MSAAuthStatus.SignedIn), CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.HasConflicts))
when: ContextKeyExpr.and(ContextKeyExpr.has(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthStatus.SignedIn), CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.HasConflicts))
});
MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
command: {
......@@ -605,7 +604,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
id: 'workbench.userData.actions.signout',
title: localize('sign out', "Sync: Sign out")
},
when: ContextKeyExpr.and(CONTEXT_AUTH_TOKEN_STATE.isEqualTo(MSAAuthStatus.SignedIn)),
when: ContextKeyExpr.and(CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthStatus.SignedIn)),
};
CommandsRegistry.registerCommand(signOutMenuItem.command.id, () => this.signOut());
MenuRegistry.appendMenuItem(MenuId.CommandPalette, signOutMenuItem);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册