microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
6a465861663d7c6f9433e89c6f6619df320dcef3

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/extension/appcenter/command/commandExecutor.ts

141lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import * as vscode from "vscode";
5import * as Q from "q";
6import * as qs from "qs";
7import * as os from "os";
8
9import { ILogger, LogLevel } from "../../log/LogHelper";
10// tslint:disable-next-line:no-var-requires
11const opener = require("opener");
12import Auth from "../../appcenter/auth/auth";
13import { AppCenterLoginType } from "../appCenterConstants";
14import { Profile } from "../../appcenter/auth/profile/profile";
15import { SettingsHelper } from "../../settingsHelper";
16import { AppCenterClient } from "../api/index";
17import { DefaultApp } from "./commandParams";
18import { AppCenterExtensionManager } from "../appCenterExtensionManager";
19import { ACStrings } from "../appCenterStrings";
20
21interface IAppCenterAuth {
22 login(appcenterManager: AppCenterExtensionManager): Q.Promise<void>;
23 logout(appcenterManager: AppCenterExtensionManager): Q.Promise<void>;
24 whoAmI(): Q.Promise<void>;
25}
26
27interface IAppCenterApps {
28 getCurrentApp(): Q.Promise<void>;
29 setCurrentApp(): Q.Promise<void>;
30}
31
32interface IAppCenterCodePush {
33 releaseReact(client: AppCenterClient, appCenterManager: AppCenterExtensionManager): Q.Promise<void>;
34}
35
36export class AppCenterCommandExecutor implements IAppCenterAuth, IAppCenterCodePush, IAppCenterApps {
37 private logger: ILogger;
38
39 constructor(logger: ILogger) {
40 this.logger = logger;
41 }
42
43 public login(appCenterManager: AppCenterExtensionManager): Q.Promise<void> {
44 const appCenterLoginOptions: string[] = Object.keys(AppCenterLoginType).filter(k => typeof AppCenterLoginType[k as any] === "number");
45 vscode.window.showQuickPick(appCenterLoginOptions, { placeHolder: ACStrings.SelectLoginTypeMsg })
46 .then((loginType) => {
47 switch (loginType) {
48 case (AppCenterLoginType[AppCenterLoginType.Interactive]):
49 const loginUrl = `${SettingsHelper.getAppCenterLoginEndpoint()}?${qs.stringify({ hostname: os.hostname()})}`;
50 vscode.window.showInformationMessage(ACStrings.PleaseLoginViaBrowser, "OK")
51 .then((selection: string) => {
52 if (selection.toLowerCase() === "ok") {
53 opener(loginUrl);
54 return vscode.window.showInputBox({ prompt: ACStrings.PleaseProvideToken, ignoreFocusOut: true }).then(token => {
55 if (token) {
56 this.loginWithToken(token, appCenterManager);
57 }
58 });
59 } else return Q.resolve(void 0);
60 });
61 break;
62 case (AppCenterLoginType[AppCenterLoginType.Token]):
63 vscode.window.showInputBox({ prompt: ACStrings.PleaseProvideToken , ignoreFocusOut: true}).then(token => {
64 if (token) {
65 this.loginWithToken(token, appCenterManager);
66 }
67 });
68 break;
69 default:
70 throw new Error("Unsupported login parameter!");
71 }
72 });
73 return Q.resolve(void 0);
74 }
75
76 public logout(appCenterManager: AppCenterExtensionManager): Q.Promise<void> {
77 const logoutChoices: string[] = ["Logout"];
78 vscode.window.showQuickPick(logoutChoices, { placeHolder: ACStrings.LogoutPrompt })
79 .then((logoutType) => {
80 switch (logoutType) {
81 case ("Logout"):
82 return Auth.doLogout().then(() => {
83 vscode.window.showInformationMessage(ACStrings.UserLoggedOutMsg);
84 appCenterManager.setupNotAuthenticatedStatusBar();
85 return Q.resolve(void 0);
86 }).catch(() => {
87 this.logger.log("An errro occured on logout", LogLevel.Error);
88 });
89 default:
90 return Q.resolve(void 0);
91 }
92 });
93 return Q.resolve(void 0);
94 }
95
96 public whoAmI(): Q.Promise<void> {
97 return Auth.whoAmI().then((displayName: string) => {
98 if (displayName) {
99 vscode.window.showInformationMessage(ACStrings.YouAreLoggedInMsg(displayName));
100 } else {
101 vscode.window.showInformationMessage(ACStrings.UserIsNotLoggedInMsg);
102 }
103 });
104 }
105
106 public getCurrentApp(): Q.Promise<void> {
107 this.getCurrentAppForUser().then((app: DefaultApp) => {
108 vscode.window.showInformationMessage(ACStrings.YourCurrentAppMsg(app.identifier));
109 });
110 return Q.resolve(void 0);
111 }
112
113 public setCurrentApp(): Q.Promise<void> {
114 vscode.window.showInformationMessage(`Current App was saved!`);
115 return Q.resolve(void 0);
116 }
117
118 public releaseReact(client: AppCenterClient, appCenterManager: AppCenterExtensionManager): Q.Promise<void> {
119 return Q.resolve(void 0);
120 }
121
122 private getCurrentAppForUser(): Q.Promise<DefaultApp> {
123 // TODO: get it for real!
124 let app: DefaultApp = {
125 appName: "UpdatedViaCLI",
126 ownerName: "max-mironov",
127 identifier: "max-mironov/UpdatedViaClI",
128 };
129 return Q.resolve(app);
130 }
131
132 private loginWithToken(token: string, appCenterManager: AppCenterExtensionManager) {
133 return Auth.doTokenLogin(token).then((profile: Profile) => {
134 vscode.window.showInformationMessage(ACStrings.YouAreLoggedInMsg(profile.displayName));
135 appCenterManager.setuAuthenticatedStatusBar(profile.displayName);
136 return this.getCurrentAppForUser().then((currentApp: DefaultApp) => {
137 appCenterManager.setCurrentAppStatusBar(currentApp.identifier);
138 });
139 });
140 }
141}