Skip to content

Commit da78ad6

Browse files
authored
Merge pull request #814 from salesforcecli/sm/html-maintenance
fix: handle html maintenance message
2 parents 324fe6e + 95eb2e7 commit da78ad6

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

src/shared/orgListUtil.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -329,18 +329,10 @@ export class OrgListUtil {
329329
await org.refreshAuth();
330330
return 'Connected';
331331
} catch (err) {
332-
const error = err as SfError;
333-
const logger = await OrgListUtil.retrieveLogger();
334-
logger.trace(`error refreshing auth for org: ${org.getUsername()}`);
335-
logger.trace(error);
336-
return (error.code ?? error.message) as string;
332+
return authErrorHandler(err, org.getUsername() as string);
337333
}
338334
} catch (err) {
339-
const error = err as SfError;
340-
const logger = await OrgListUtil.retrieveLogger();
341-
logger.trace(`error refreshing auth for org: ${username}`);
342-
logger.trace(error);
343-
return (error.code ?? error.message ?? 'Unknown') as string;
335+
return authErrorHandler(err, username);
344336
}
345337
}
346338
}
@@ -377,3 +369,15 @@ const removeRestrictedInfoFromConfig = (
377369
const sandboxFilter = (org: AuthFieldsFromFS): boolean => Boolean(org.isSandbox);
378370
const regularOrgFilter = (org: AuthFieldsFromFS): boolean => !org.isSandbox && !org.isDevHub;
379371
const devHubFilter = (org: AuthFieldsFromFS): boolean => Boolean(org.isDevHub);
372+
373+
const authErrorHandler = async (err: unknown, username: string): Promise<string> => {
374+
const error = err as SfError;
375+
const logger = await OrgListUtil.retrieveLogger();
376+
logger.trace(`error refreshing auth for org: ${username}`);
377+
logger.trace(error);
378+
// Orgs under maintenace return html as the error message.
379+
if (error.message.includes('maintenance')) return 'Down (Maintenance)';
380+
// handle other potential html responses
381+
if (error.message.includes('<html>')) return 'Bad Response';
382+
return (error.code ?? error.message) as string;
383+
};

test/shared/orgListUtil.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,33 @@ describe('orgListUtil tests', () => {
208208
expect(checkNonScratchOrgIsDevHub.called).to.be.false;
209209
});
210210

211+
it('handles html responses for non-scratch orgs under maintenance', async () => {
212+
determineConnectedStatusForNonScratchOrg.restore();
213+
stubMethod(sandbox, Org, 'create').returns(Org.prototype);
214+
stubMethod(sandbox, Org.prototype, 'getField').returns(undefined);
215+
stubMethod(sandbox, Org.prototype, 'getUsername').returns(devHubConfigFields.username);
216+
stubMethod(sandbox, Org.prototype, 'refreshAuth').rejects({
217+
message: `<html>
218+
<body>
219+
<center>
220+
<table bgcolor="white" cellpadding="0" cellspacing="0" width="758">
221+
<tbody>
222+
<tr>
223+
<td><span style="font-family: Verdana; font-size: medium; font-weight: bold;">We are down for maintenance.</span><br><br>Sorry for the inconvenience. We'll be back shortly.</td><br>
224+
</tr>
225+
</tbody>
226+
</table>
227+
</center>
228+
</body>
229+
</html>`,
230+
});
231+
232+
const orgGroups = await OrgListUtil.readLocallyValidatedMetaConfigsGroupedByOrgType(fileNames, false);
233+
expect(orgGroups.nonScratchOrgs).to.have.length(1);
234+
expect(orgGroups.nonScratchOrgs[0].connectedStatus).to.equal('Down (Maintenance)');
235+
expect(checkNonScratchOrgIsDevHub.called).to.be.false;
236+
});
237+
211238
it('handles auth file problems for non-scratch orgs', async () => {
212239
determineConnectedStatusForNonScratchOrg.restore();
213240
stubMethod(sandbox, Org, 'create').rejects({ message: 'bad file' });

0 commit comments

Comments
 (0)