diff --git a/extensions/vscode-account/package.json b/extensions/vscode-account/package.json index 1cc728195e9..c4df52ce732 100644 --- a/extensions/vscode-account/package.json +++ b/extensions/vscode-account/package.json @@ -1,8 +1,8 @@ { "name": "vscode-account", "publisher": "vscode", - "displayName": "Account", - "description": "", + "displayName": "%displayName%", + "description": "%description%", "version": "0.0.1", "engines": { "vscode": "^1.42.0" @@ -15,6 +15,20 @@ "*" ], "main": "./out/extension.js", + "contributes": { + "commands": [ + { + "command": "microsoft.signin", + "title": "%signIn%", + "category": "%displayName%" + }, + { + "command": "microsoft.signout", + "title": "%signOut%", + "category": "%displayName%" + } + ] + }, "scripts": { "vscode:prepublish": "npm run compile", "compile": "gulp compile-extension:vscode-account", diff --git a/extensions/vscode-account/package.nls.json b/extensions/vscode-account/package.nls.json new file mode 100644 index 00000000000..8211a3f6e9c --- /dev/null +++ b/extensions/vscode-account/package.nls.json @@ -0,0 +1,6 @@ +{ + "displayName": "Microsoft Account", + "description": "Microsoft authentication provider", + "signIn": "Sign in", + "signOut": "Sign out" +} diff --git a/extensions/vscode-account/src/extension.ts b/extensions/vscode-account/src/extension.ts index 36c2d4a02df..88f5f3133ed 100644 --- a/extensions/vscode-account/src/extension.ts +++ b/extensions/vscode-account/src/extension.ts @@ -6,13 +6,15 @@ import * as vscode from 'vscode'; import { AzureActiveDirectoryService, onDidChangeSessions } from './AADHelper'; -export async function activate(_: vscode.ExtensionContext) { +export const DEFAULT_SCOPES = 'https://management.core.windows.net/.default offline_access'; + +export async function activate(context: vscode.ExtensionContext) { const loginService = new AzureActiveDirectoryService(); await loginService.initialize(); - vscode.authentication.registerAuthenticationProvider({ + context.subscriptions.push(vscode.authentication.registerAuthenticationProvider({ id: 'MSA', displayName: 'Microsoft', onDidChangeSessions: onDidChangeSessions.event, @@ -28,7 +30,37 @@ export async function activate(_: vscode.ExtensionContext) { logout: async (id: string) => { return loginService.logout(id); } - }); + })); + + context.subscriptions.push(vscode.commands.registerCommand('microsoft.signin', () => { + return loginService.login(DEFAULT_SCOPES); + })); + + context.subscriptions.push(vscode.commands.registerCommand('microsoft.signout', async () => { + const sessions = loginService.sessions; + if (sessions.length === 0) { + return; + } + + if (sessions.length === 1) { + await loginService.logout(loginService.sessions[0].id); + onDidChangeSessions.fire(); + return; + } + + const selectedSession = await vscode.window.showQuickPick(sessions.map(session => { + return { + id: session.id, + label: session.accountName + }; + })); + + if (selectedSession) { + await loginService.logout(selectedSession.id); + onDidChangeSessions.fire(); + return; + } + })); return; }