Skip to content

Commit 0632977

Browse files
authored
Merge pull request #2326 from contentstack/fix/DX-3920
Fix: Moved the MFA to catch block
2 parents 5d4a2e9 + 41f70ad commit 0632977

File tree

13 files changed

+1482
-1526
lines changed

13 files changed

+1482
-1526
lines changed

.talismanrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
fileignoreconfig:
22
- filename: package-lock.json
3-
checksum: 21d5e66a045c155578dc6b6d747745b94c4591c1e17f5226b94b833a46ee9bff
3+
checksum: 7fe633822937ac8ac6153c796e02ad26f31a4cdbf28d62650fe7bc990ccabac4
44
- filename: pnpm-lock.yaml
5-
checksum: a0e789a97a39aece1d637ed121bb6847d39dfb9033b71ea8bf10619eec2e246a
5+
checksum: 096da506eea94052c82ddf88d0167be7511c4ce136d3de8cb1e6cc11c2444fd5
66
- filename: packages/contentstack-import-setup/test/unit/backup-handler.test.ts
77
checksum: 0582d62b88834554cf12951c8690a73ef3ddbb78b82d2804d994cf4148e1ef93
88
- filename: packages/contentstack-import-setup/test/config.json

package-lock.json

Lines changed: 622 additions & 641 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/contentstack-auth/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-auth",
33
"description": "Contentstack CLI plugin for authentication activities",
4-
"version": "1.7.0",
4+
"version": "1.7.1",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"scripts": {

packages/contentstack-auth/src/utils/auth-handler.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,25 +118,26 @@ class AuthHandler {
118118
if (result.user) {
119119
log.debug('Login successful, user found', { module: 'auth-handler', userEmail: result.user.email });
120120
resolve(result.user as User);
121-
} else if (result.error_code === 294) {
122-
const tfToken = await this.handleOTPFlow(tfaToken, loginPayload);
123-
121+
} else {
122+
log.debug('Login failed: no user found.', { module: 'auth-handler', result });
123+
reject(new Error(messageHandler.parse('CLI_AUTH_LOGIN_NO_USER')));
124+
}
125+
})
126+
.catch(async (error: any) => {
127+
if (error.errorCode === 294) {
124128
try {
129+
const tfToken = await this.handleOTPFlow(tfaToken, loginPayload);
125130
resolve(await this.login(email, password, tfToken));
126131
} catch (error) {
127132
log.debug('Login with TFA token failed.', { module: 'auth-handler', error });
128133
cliux.print('CLI_AUTH_2FA_FAILED', { color: 'red' });
129134
reject(error);
130135
}
131136
} else {
132-
log.debug('Login failed: no user found.', { module: 'auth-handler', result });
133-
reject(new Error(messageHandler.parse('CLI_AUTH_LOGIN_NO_USER')));
137+
log.debug('Login API call failed.', { module: 'auth-handler', error: error?.errorMessage || error });
138+
cliux.print('CLI_AUTH_LOGIN_FAILED', { color: 'yellow' });
139+
reject(error);
134140
}
135-
})
136-
.catch((error: any) => {
137-
log.debug('Login API call failed.', { module: 'auth-handler', error: error?.errorMessage || error });
138-
cliux.print('CLI_AUTH_LOGIN_FAILED', { color: 'yellow' });
139-
handleAndLogError(error, { module: 'auth-handler' });
140141
});
141142
} else {
142143
const hasEmail = !!email;
@@ -203,7 +204,7 @@ class AuthHandler {
203204
.catch((error: Error) => {
204205
log.debug('Token validation failed.', { module: 'auth-handler', error: error.message });
205206
cliux.print('CLI_AUTH_TOKEN_VALIDATION_FAILED', { color: 'yellow' });
206-
handleAndLogError(error, { module: 'auth-handler' });
207+
reject(error);
207208
});
208209
} else {
209210
log.debug('Token validation failed: no auth token provided.', { module: 'auth-handler' });

packages/contentstack-auth/src/utils/mfa-handler.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -87,20 +87,6 @@ class MFAHandler {
8787
}
8888
}
8989

90-
if (!secret) {
91-
log.debug('Checking stored MFA secret', { module: 'mfa-handler' });
92-
const mfaConfig = configHandler.get('mfa');
93-
if (mfaConfig?.secret) {
94-
try {
95-
secret = this.encrypter.decrypt(mfaConfig.secret);
96-
source = 'stored configuration';
97-
} catch (error) {
98-
log.debug('Failed to decrypt stored MFA secret', { module: 'mfa-handler', error });
99-
handleAndLogError(error, { module: 'mfa-handler' }, messageHandler.parse('CLI_AUTH_MFA_DECRYPT_FAILED'));
100-
}
101-
}
102-
}
103-
10490
if (secret) {
10591
try {
10692
const code = this.generateMFACode(secret);

packages/contentstack-auth/test/unit/auth-handler.test.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ describe('Auth Handler', function () {
3030
return Promise.reject(new Error('Invalid 2FA code'));
3131
}
3232
} else {
33-
return Promise.resolve({ error_code: 294 });
33+
const error: any = new Error('2FA required');
34+
error.errorCode = 294;
35+
return Promise.reject(error);
3436
}
3537
}
3638
return Promise.resolve({ user });
@@ -113,13 +115,23 @@ describe('Auth Handler', function () {
113115
it('Login with 2FA enabled invalid otp, failed to login', async function () {
114116
this.timeout(10000);
115117
TFAEnabled = true;
116-
let result;
118+
askOTPStub.restore();
119+
askOTPStub = sinon.stub(interactive, 'askOTP').callsFake(function () {
120+
return Promise.resolve(InvalidTFATestToken);
121+
});
117122
try {
118-
result = await authHandler.login(credentials.email, credentials.password);
123+
await authHandler.login(credentials.email, credentials.password);
124+
expect.fail('Should have thrown an error');
119125
} catch (error) {
120-
result = error;
126+
expect(error).to.be.instanceOf(Error);
127+
expect((error as Error).message).to.include('Invalid 2FA code');
128+
} finally {
129+
TFAEnabled = false;
130+
askOTPStub.restore();
131+
askOTPStub = sinon.stub(interactive, 'askOTP').callsFake(function () {
132+
return Promise.resolve(TFATestToken);
133+
});
121134
}
122-
TFAEnabled = false;
123135
});
124136

125137
it('Login with 2FA enabled with sms channel, should be logged in successfully', async function () {

packages/contentstack-bootstrap/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-cm-bootstrap",
33
"description": "Bootstrap contentstack apps",
4-
"version": "1.18.0",
4+
"version": "1.18.1",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"scripts": {
@@ -16,14 +16,14 @@
1616
"test:report": "nyc --reporter=lcov mocha \"test/**/*.test.js\""
1717
},
1818
"dependencies": {
19-
"@contentstack/cli-cm-seed": "~1.14.0",
19+
"@contentstack/cli-cm-seed": "~1.14.1",
2020
"@contentstack/cli-command": "~1.7.1",
2121
"@contentstack/cli-utilities": "~1.16.0",
2222
"@oclif/core": "^4.3.0",
2323
"@oclif/plugin-help": "^6.2.28",
2424
"inquirer": "8.2.7",
2525
"mkdirp": "^1.0.4",
26-
"tar": "^6.2.1 "
26+
"tar": "^7.5.6"
2727
},
2828
"devDependencies": {
2929
"@oclif/test": "^4.1.13",

packages/contentstack-export/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"winston": "^3.17.0"
2222
},
2323
"devDependencies": {
24-
"@contentstack/cli-auth": "~1.7.0",
24+
"@contentstack/cli-auth": "~1.7.1",
2525
"@contentstack/cli-config": "~1.17.0",
2626
"@contentstack/cli-dev-dependencies": "~1.3.1",
2727
"@oclif/plugin-help": "^6.2.28",

packages/contentstack-import/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"@contentstack/cli-audit": "~1.17.0",
99
"@contentstack/cli-command": "~1.7.1",
1010
"@contentstack/cli-utilities": "~1.16.0",
11-
"@contentstack/management": "~1.22.0",
11+
"@contentstack/management": "~1.27.3",
1212
"@contentstack/cli-variants": "~1.3.6",
1313
"@oclif/core": "^4.3.0",
1414
"big-json": "^3.2.0",

packages/contentstack-seed/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
{
22
"name": "@contentstack/cli-cm-seed",
33
"description": "create a Stack from existing content types, entries, assets, etc.",
4-
"version": "1.14.0",
4+
"version": "1.14.1",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"dependencies": {
88
"@contentstack/cli-cm-import": "~1.31.0",
99
"@contentstack/cli-command": "~1.7.1",
1010
"@contentstack/cli-utilities": "~1.16.0",
11-
"@contentstack/management": "~1.22.0",
11+
"@contentstack/management": "~1.27.3",
1212
"inquirer": "8.2.7",
1313
"mkdirp": "^1.0.4",
14-
"tar": "^6.2.1",
14+
"tar": "^7.5.6",
1515
"tmp": "^0.2.3"
1616
},
1717
"devDependencies": {

0 commit comments

Comments
 (0)