From 87f2b1fc366dd32a4e9cecea55fcebd6b3d18ded Mon Sep 17 00:00:00 2001 From: fatme Date: Tue, 30 Jul 2019 13:53:52 +0300 Subject: [PATCH] fix: fix appstore list command for accounts with 2fa Currently `tns appstore list` command throws an error when account is with 2fa and `--appleApplicationSpecificPassword` option is not provided. We shouldn't throw an error in this situation as we don't need `--appleApplicationSpecificPassword` on `tns appstore list` command as we don't use third party application. This option is mandatory only for `tns appstore upload` command where we use iTunesTransporter app when uploading the application. --- lib/commands/appstore-upload.ts | 3 ++- lib/services/apple-portal/apple-portal-session-service.ts | 3 ++- lib/services/apple-portal/definitions.d.ts | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/commands/appstore-upload.ts b/lib/commands/appstore-upload.ts index 45557a1050..9c2c582b34 100644 --- a/lib/commands/appstore-upload.ts +++ b/lib/commands/appstore-upload.ts @@ -42,7 +42,8 @@ export class PublishIOS implements ICommand { const user = await this.$applePortalSessionService.createUserSession({ username, password }, { applicationSpecificPassword: this.$options.appleApplicationSpecificPassword, sessionBase64: this.$options.appleSessionBase64, - requireInteractiveConsole: true + requireInteractiveConsole: true, + requireApplicationSpecificPassword: true }); if (!user.areCredentialsValid) { this.$errors.failWithoutHelp(`Invalid username and password combination. Used '${username}' as the username.`); diff --git a/lib/services/apple-portal/apple-portal-session-service.ts b/lib/services/apple-portal/apple-portal-session-service.ts index 786ef9833c..9d63e0270d 100644 --- a/lib/services/apple-portal/apple-portal-session-service.ts +++ b/lib/services/apple-portal/apple-portal-session-service.ts @@ -96,7 +96,8 @@ export class ApplePortalSessionService implements IApplePortalSessionService { const statusCode = err && err.response && err.response.statusCode; result.areCredentialsValid = statusCode !== 401 && statusCode !== 403; result.isTwoFactorAuthenticationEnabled = statusCode === 409; - if (result.isTwoFactorAuthenticationEnabled && opts && !opts.applicationSpecificPassword) { + + if (result.isTwoFactorAuthenticationEnabled && opts && opts.requireApplicationSpecificPassword && !opts.applicationSpecificPassword) { this.$errors.failWithoutHelp(`Your account has two-factor authentication enabled but --appleApplicationSpecificPassword option is not provided. To generate an application-specific password, please go to https://appleid.apple.com/account/manage. This password will be used for the iTunes Transporter, which is used to upload your application.`); diff --git a/lib/services/apple-portal/definitions.d.ts b/lib/services/apple-portal/definitions.d.ts index 3d8a3b074d..74f6dea05d 100644 --- a/lib/services/apple-portal/definitions.d.ts +++ b/lib/services/apple-portal/definitions.d.ts @@ -19,6 +19,7 @@ interface IAppleCreateUserSessionOptions { applicationSpecificPassword?: string; sessionBase64: string; requireInteractiveConsole?: boolean; + requireApplicationSpecificPassword?: boolean; } interface IAppleLoginResult {