提交 8e822e10 编写于 作者: R Rachel Macfarlane

Clarify statuses for AuthTokenService

上级 dda39439
......@@ -8,10 +8,11 @@ import { Event, Emitter } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri';
export const enum AuthTokenStatus {
Inactive = 'Inactive',
Active = 'Active',
Initializing = 'Initializing',
SignedOut = 'SignedOut',
SignedIn = 'SignedIn',
SigningIn = 'SigningIn',
Refreshing = 'Refreshing'
RefreshingToken = 'RefreshingToken'
}
export const IAuthTokenService = createDecorator<IAuthTokenService>('IAuthTokenService');
......
......@@ -49,7 +49,7 @@ export interface IToken {
export class AuthTokenService extends Disposable implements IAuthTokenService {
_serviceBrand: undefined;
private _status: AuthTokenStatus = AuthTokenStatus.Refreshing;
private _status: AuthTokenStatus = AuthTokenStatus.Initializing;
get status(): AuthTokenStatus { return this._status; }
private _onDidChangeStatus: Emitter<AuthTokenStatus> = this._register(new Emitter<AuthTokenStatus>());
readonly onDidChangeStatus: Event<AuthTokenStatus> = this._onDidChangeStatus.event;
......@@ -67,7 +67,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
if (storedRefreshToken) {
this.refresh(storedRefreshToken);
} else {
this.setStatus(AuthTokenStatus.Inactive);
this.setStatus(AuthTokenStatus.SignedOut);
}
});
}
......@@ -91,7 +91,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
const timeoutPromise = new Promise((resolve: (value: IToken) => void, reject) => {
const wait = setTimeout(() => {
this.setStatus(AuthTokenStatus.Inactive);
this.setStatus(AuthTokenStatus.SignedOut);
clearTimeout(wait);
reject('Login timed out.');
}, 1000 * 60 * 5);
......@@ -117,7 +117,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
private setToken(token: IToken) {
this._activeToken = token;
this.credentialsService.setPassword(SERVICE_NAME, ACCOUNT, token.refreshToken);
this.setStatus(AuthTokenStatus.Active);
this.setStatus(AuthTokenStatus.SignedIn);
}
private async exchangeCodeForToken(clientId: string, tenantId: string, codeVerifier: string, state: string): Promise<IToken> {
......@@ -190,7 +190,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
private async refresh(refreshToken: string): Promise<void> {
return new Promise((resolve, reject) => {
this.setStatus(AuthTokenStatus.Refreshing);
this.setStatus(AuthTokenStatus.RefreshingToken);
const postData = toQuery({
refresh_token: refreshToken,
client_id: clientId,
......@@ -231,7 +231,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
post.end();
post.on('error', err => {
this.setStatus(AuthTokenStatus.Inactive);
this.setStatus(AuthTokenStatus.SignedOut);
reject(err);
});
});
......@@ -240,7 +240,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
async logout(): Promise<void> {
await this.credentialsService.deletePassword(SERVICE_NAME, ACCOUNT);
this._activeToken = undefined;
this.setStatus(AuthTokenStatus.Inactive);
this.setStatus(AuthTokenStatus.SignedOut);
}
private setStatus(status: AuthTokenStatus): void {
......
......@@ -56,7 +56,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
if (!this.userDataSyncStoreService.enabled) {
throw new Error('Not enabled');
}
if (this.authTokenService.status === AuthTokenStatus.Inactive) {
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
throw new Error('Not Authenticated. Please sign in to start sync.');
}
for (const synchroniser of this.synchronisers) {
......@@ -116,7 +116,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ
}
private onDidChangeAuthTokenStatus(): void {
if (this.authTokenService.status === AuthTokenStatus.Inactive) {
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
this.stop();
}
}
......@@ -180,7 +180,7 @@ export class UserDataAutoSync extends Disposable {
private isSyncEnabled(): boolean {
return this.configurationService.getValue<boolean>('configurationSync.enable')
&& this.userDataSyncService.status !== SyncStatus.Uninitialized
&& this.authTokenService.status !== AuthTokenStatus.Inactive;
&& this.authTokenService.status !== AuthTokenStatus.SignedOut;
}
}
......@@ -31,7 +31,7 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { IProductService } from 'vs/platform/product/common/productService';
const CONTEXT_AUTH_TOKEN_STATE = new RawContextKey<string>('authTokenStatus', AuthTokenStatus.Inactive);
const CONTEXT_AUTH_TOKEN_STATE = new RawContextKey<string>('authTokenStatus', AuthTokenStatus.SignedOut);
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`));
......@@ -75,7 +75,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
private onDidChangeAuthTokenStatus(status: AuthTokenStatus) {
this.authTokenContext.set(status);
if (status === AuthTokenStatus.Active) {
if (status === AuthTokenStatus.SignedIn) {
this.signInNotificationDisposable.clear();
}
this.updateBadge();
......@@ -111,7 +111,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
this.updateBadge();
const enabled = this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING);
if (enabled) {
if (this.authTokenService.status === AuthTokenStatus.Inactive) {
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
const handle = this.notificationService.prompt(Severity.Info, localize('ask to sign in', "Please sign in with your {0} account to sync configuration across all your machines", this.productService.settingsSyncStore!.account),
[
{
......@@ -133,7 +133,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
let badge: IBadge | undefined = undefined;
let clazz: string | undefined;
if (this.userDataSyncService.status !== SyncStatus.Uninitialized && this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING) && this.authTokenService.status === AuthTokenStatus.Inactive) {
if (this.userDataSyncService.status !== SyncStatus.Uninitialized && this.configurationService.getValue<boolean>(UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING) && this.authTokenService.status === AuthTokenStatus.SignedOut) {
badge = new NumberBadge(1, () => localize('sign in', "Sync: Sign in..."));
} else if (this.authTokenService.status === AuthTokenStatus.SigningIn) {
badge = new ProgressBadge(() => localize('signing in', "Signin in..."));
......@@ -151,7 +151,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
}
private async turnOn(): Promise<void> {
if (this.authTokenService.status === AuthTokenStatus.Inactive) {
if (this.authTokenService.status === AuthTokenStatus.SignedOut) {
const result = await this.dialogService.confirm({
type: 'info',
message: localize('sign in to account', "Sign in to {0}", this.productService.settingsSyncStore!.name),
......@@ -290,7 +290,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
MenuRegistry.appendMenuItem(MenuId.CommandPalette, startSyncMenuItem);
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(AuthTokenStatus.Inactive));
const signInWhenContext = ContextKeyExpr.and(CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), ContextKeyExpr.has(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthTokenStatus.SignedOut));
CommandsRegistry.registerCommand(signInCommandId, () => this.signIn());
MenuRegistry.appendMenuItem(MenuId.GlobalActivity, {
group: '5_sync',
......@@ -328,7 +328,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
MenuRegistry.appendMenuItem(MenuId.GlobalActivity, {
group: '5_sync',
command: stopSyncCommand,
when: ContextKeyExpr.and(ContextKeyExpr.has(`config.${UserDataSyncWorkbenchContribution.ENABLEMENT_SETTING}`), CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthTokenStatus.Active), 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(AuthTokenStatus.SignedIn), CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.Uninitialized), CONTEXT_SYNC_STATE.notEqualsTo(SyncStatus.HasConflicts))
});
MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
command: stopSyncCommand,
......@@ -383,7 +383,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo
id: 'workbench.userData.actions.signout',
title: localize('sign out', "Sign Out")
},
when: ContextKeyExpr.and(CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthTokenStatus.Active)),
when: ContextKeyExpr.and(CONTEXT_AUTH_TOKEN_STATE.isEqualTo(AuthTokenStatus.SignedIn)),
};
CommandsRegistry.registerCommand(signOutMenuItem.command.id, () => this.signOut());
MenuRegistry.appendMenuItem(MenuId.CommandPalette, signOutMenuItem);
......
......@@ -17,7 +17,7 @@ const ACCOUNT = 'MyAccount';
export class AuthTokenService extends Disposable implements IAuthTokenService {
_serviceBrand: undefined;
private _status: AuthTokenStatus = AuthTokenStatus.Refreshing;
private _status: AuthTokenStatus = AuthTokenStatus.Initializing;
get status(): AuthTokenStatus { return this._status; }
private _onDidChangeStatus: Emitter<AuthTokenStatus> = this._register(new Emitter<AuthTokenStatus>());
readonly onDidChangeStatus: Event<AuthTokenStatus> = this._onDidChangeStatus.event;
......@@ -31,9 +31,9 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
super();
this.getToken().then(token => {
if (token) {
this.setStatus(AuthTokenStatus.Active);
this.setStatus(AuthTokenStatus.SignedIn);
} else {
this.setStatus(AuthTokenStatus.Inactive);
this.setStatus(AuthTokenStatus.SignedOut);
}
});
}
......@@ -51,7 +51,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
const token = await this.quickInputService.input({ placeHolder: localize('enter token', "Please provide the auth bearer token"), ignoreFocusLost: true, });
if (token) {
await this.credentialsService.setPassword(SERVICE_NAME, ACCOUNT, token);
this.setStatus(AuthTokenStatus.Active);
this.setStatus(AuthTokenStatus.SignedIn);
}
}
......@@ -61,7 +61,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
async logout(): Promise<void> {
await this.credentialsService.deletePassword(SERVICE_NAME, ACCOUNT);
this.setStatus(AuthTokenStatus.Inactive);
this.setStatus(AuthTokenStatus.SignedOut);
}
private setStatus(status: AuthTokenStatus): void {
......
......@@ -18,7 +18,7 @@ export class AuthTokenService extends Disposable implements IAuthTokenService {
private readonly channel: IChannel;
private _status: AuthTokenStatus = AuthTokenStatus.Inactive;
private _status: AuthTokenStatus = AuthTokenStatus.Initializing;
get status(): AuthTokenStatus { return this._status; }
private _onDidChangeStatus: Emitter<AuthTokenStatus> = this._register(new Emitter<AuthTokenStatus>());
readonly onDidChangeStatus: Event<AuthTokenStatus> = this._onDidChangeStatus.event;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册