Skip to content

Commit 8723bf1

Browse files
authored
fix: groupsio error messages upon connection [CM-2276]
Return proper error code & message for : - Invalid email/password - 2FA required - Invalid 2FA
1 parent f267aa7 commit 8723bf1

2 files changed

Lines changed: 27 additions & 6 deletions

File tree

backend/src/services/integrationService.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,11 +1438,21 @@ export default class IntegrationService {
14381438
groupsioCookie: cookie,
14391439
groupsioCookieExpiry: cookieExpiry,
14401440
}
1441-
} catch (err) {
1442-
if ('two_factor_required' in response.data) {
1443-
throw new Error400(this.options.language, 'errors.groupsio.twoFactorRequired')
1441+
} catch (error) {
1442+
this.options.log.error(error.response.data, 'Error while login into GroupsIo!')
1443+
const errorType = String(error.response.data.type)
1444+
const isTwoFactorRequired =
1445+
errorType.includes('two_factor_required') || errorType.includes('2nd_factor_required')
1446+
if (isTwoFactorRequired) {
1447+
throw new Error400(this.options.language, 'Two-factor authentication code is required')
14441448
}
1445-
throw new Error400(this.options.language, 'errors.groupsio.invalidCredentials')
1449+
const invalidCredentials =
1450+
errorType.includes('invalid password') || errorType.includes('invalid email')
1451+
if (invalidCredentials) throw new Error400(this.options.language, 'Invalid email or password')
1452+
const invalid2FA = errorType.includes('2nd_factor_wrong')
1453+
if (invalid2FA)
1454+
throw new Error400(this.options.language, 'Invalid Two-factor authentication code')
1455+
throw error
14461456
}
14471457
}
14481458

frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
:size="14"
114114
class="text-red-500 mr-2"
115115
/>
116-
<span class="text-red-500 text-sm">Authentication failed</span>
116+
<span class="text-red-500 text-sm">{{ errorMessage || "Authentication failed" }}</span>
117117
</div>
118118
</div>
119119
</el-form>
@@ -321,6 +321,7 @@ const isVerificationEnabled = ref(false);
321321
const isVerifyingAccount = ref(false);
322322
const isAPIConnectionValid = ref(false);
323323
const accountVerificationFailed = ref(false);
324+
const errorMessage = ref('');
324325
const cookie = ref('');
325326
const cookieExpiry = ref('');
326327
const loading = ref(false);
@@ -370,6 +371,7 @@ const $v = useVuelidate(rules, form, { $stopPropagation: true });
370371
const validateAccount = async () => {
371372
isVerifyingAccount.value = true;
372373
accountVerificationFailed.value = false;
374+
errorMessage.value = '';
373375
try {
374376
const response = await IntegrationService.groupsioGetToken(
375377
form.email,
@@ -382,9 +384,16 @@ const validateAccount = async () => {
382384
cookieExpiry.value = groupsioCookieExpiry;
383385
isAPIConnectionValid.value = true;
384386
getUserSubscriptions();
385-
} catch (e) {
387+
} catch (error) {
386388
isAPIConnectionValid.value = false;
387389
accountVerificationFailed.value = true;
390+
391+
// Only display API error message for status code 400
392+
if (error?.response?.status === 400 && typeof error?.response?.data === 'string') {
393+
errorMessage.value = error.response.data;
394+
} else {
395+
errorMessage.value = 'Authentication failed';
396+
}
388397
}
389398
isVerifyingAccount.value = false;
390399
};
@@ -491,6 +500,7 @@ const handleCancel = () => {
491500
isAPIConnectionValid.value = false;
492501
isVerifyingAccount.value = false;
493502
accountVerificationFailed.value = false;
503+
errorMessage.value = '';
494504
$v.value.$reset();
495505
} else {
496506
form.email = props.integration?.settings?.email;
@@ -504,6 +514,7 @@ const handleCancel = () => {
504514
isAPIConnectionValid.value = true;
505515
isVerifyingAccount.value = false;
506516
accountVerificationFailed.value = false;
517+
errorMessage.value = '';
507518
$v.value.$reset();
508519
}
509520
userSubscriptions.value = [];

0 commit comments

Comments
 (0)