From e410244739cff42f94e359f1397237e09ad5f8f4 Mon Sep 17 00:00:00 2001 From: Max P Date: Thu, 29 Sep 2016 10:44:18 -0700 Subject: [PATCH] refactor isAuthenticated SDK api to erase session state when authorization failed on 'code-push release' call. --- cli/script/command-executor.ts | 13 +++---------- sdk/script/management-sdk.ts | 17 +++++++---------- sdk/test/management-sdk.ts | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/cli/script/command-executor.ts b/cli/script/command-executor.ts index e7c2b7ab..6748463d 100644 --- a/cli/script/command-executor.ts +++ b/cli/script/command-executor.ts @@ -1172,16 +1172,9 @@ export var release = (command: cli.IReleaseCommand): Promise => { return getPackageFilePromise .then((file: IPackageFile): Promise => { - return sdk.isAuthenticatedWithMessage() - .then((result: any): Promise => { - if (result.authenticated){ - return sdk.release(command.appName, command.deploymentName, file.path, command.appStoreVersion, updateMetadata, uploadProgress); - } else { - throw { - statusCode: result.status, - message: result.errorMessage - }; - } + return sdk.isAuthenticated(true) + .then((isAuth: boolean): Promise => { + return sdk.release(command.appName, command.deploymentName, file.path, command.appStoreVersion, updateMetadata, uploadProgress); }) .then((): void => { log("Successfully released an update containing the \"" + command.package + "\" " + (isSingleFilePackage ? "file" : "directory") + " to the \"" + command.deploymentName + "\" deployment of the \"" + command.appName + "\" app."); diff --git a/sdk/script/management-sdk.ts b/sdk/script/management-sdk.ts index 8de54a11..71464c41 100644 --- a/sdk/script/management-sdk.ts +++ b/sdk/script/management-sdk.ts @@ -76,7 +76,7 @@ class AccountManager { return this._accessKey; } - public isAuthenticatedWithMessage(): Promise { + public isAuthenticated(throwIfUnauthorized?: boolean): Promise { return Promise((resolve, reject, notify) => { var request: superagent.Request = superagent.get(this._serverUrl + urlEncode `/authenticated`); if (this._proxy) (request).proxy(this._proxy); @@ -90,18 +90,15 @@ class AccountManager { } var authenticated: boolean = status === 200; - var errorMessage: string = authenticated ? null : this.getErrorMessage(err, res); - resolve({authenticated, status, errorMessage}); - }); - }); - } + if (!authenticated && throwIfUnauthorized){ + reject(this.getCodePushError(err, res)); + return; + } - public isAuthenticated(): Promise { - return this.isAuthenticatedWithMessage() - .then((res: any) => { - return res.authenticated; + resolve(authenticated); }); + }); } public addAccessKey(friendlyName: string, ttl?: number): Promise { diff --git a/sdk/test/management-sdk.ts b/sdk/test/management-sdk.ts index 96cc35bc..cf2c850e 100644 --- a/sdk/test/management-sdk.ts +++ b/sdk/test/management-sdk.ts @@ -88,6 +88,20 @@ describe("Management SDK", () => { }); }); + it("isAuthenticated handles unsuccessful auth with promise rejection", (done: MochaDone) => { + mockReturn("Unauthorized", 401, {}); + + // use optional parameter to ask for rejection of the promise if not authenticated + manager.isAuthenticated(true) + .done((authenticated: boolean) => { + assert.fail("isAuthenticated should have rejected the promise"); + done(); + }, (err) => { + assert.equal(err.message, "Unauthorized", "Error message should be 'Unauthorized'"); + done(); + }); + }); + it("isAuthenticated handles unexpected status codes", (done: MochaDone) => { mockReturn("Not Found", 404, {}); manager.isAuthenticated()