Skip to content

Commit 4a79f84

Browse files
authored
Set 'loggedIn' context to true only after server url is detected (#1991)
Signed-off-by: Denis Golovin dgolovin@redhat.com
1 parent b4ff606 commit 4a79f84

File tree

2 files changed

+15
-76
lines changed

2 files changed

+15
-76
lines changed

src/odo.ts

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -481,15 +481,6 @@ export class OdoImpl implements Odo {
481481

482482
private static instance: Odo;
483483

484-
private readonly odoLoginMessages = [
485-
'Please log in to the cluster',
486-
'the server has asked for the client to provide credentials',
487-
'Please login to your server',
488-
'Unauthorized',
489-
'User "system:anonymous" cannot list resource "projects"',
490-
'"system:anonymous"',
491-
];
492-
493484
public readonly subject: Subject<OdoEvent> = new Subject<OdoEvent>();
494485

495486
public static get Instance(): Odo {
@@ -508,37 +499,17 @@ export class OdoImpl implements Odo {
508499
}
509500

510501
public async _getClusters(): Promise<OpenShiftObject[]> {
511-
let clusters: OpenShiftObject[] = await this.getClustersWithOdo();
512-
if (clusters.length === 0) {
513-
clusters = await this.getClustersWithOc();
514-
}
515-
return clusters;
516-
}
517-
518-
private async getClustersWithOc(): Promise<OpenShiftObject[]> {
519-
let clusters: OpenShiftObject[] = [];
520-
const result: cliInstance.CliExitData = await this.execute(Command.printOcVersion(), process.cwd(), false);
521-
clusters = result.stdout.trim().split('\n').filter((value) => {
522-
return value.includes('Server ');
523-
}).map((value) => {
524-
const server: string = value.substr(value.indexOf(' ')+1).trim();
525-
return new OpenShiftCluster(server);
526-
});
527-
return clusters;
528-
}
529-
530-
private async getClustersWithOdo(): Promise<OpenShiftObject[]> {
531502
let clusters: OpenShiftObject[] = [];
532503
const result: cliInstance.CliExitData = await this.execute(
533-
Command.printOdoVersionAndProjects(), process.cwd(), false
504+
Command.printOdoVersion(), process.cwd(), false
534505
);
535-
commands.executeCommand('setContext', 'isLoggedIn', true);
536-
clusters = result.stdout.trim().split('\n').filter((value) => {
537-
return value.includes('Server:');
538-
}).map((value) => {
539-
const server: string = value.substr(value.indexOf(':')+1).trim();
540-
return new OpenShiftCluster(server);
541-
});
506+
commands.executeCommand('setContext', 'isLoggedIn', false);
507+
clusters = result.stdout.trim().split('\n')
508+
.filter((value) => value.includes('Server:'))
509+
.map((value) => {
510+
commands.executeCommand('setContext', 'isLoggedIn', true);
511+
return new OpenShiftCluster(value.substr(value.indexOf(':')+1).trim())
512+
});
542513
return clusters;
543514
}
544515

@@ -801,8 +772,8 @@ export class OdoImpl implements Odo {
801772
}
802773

803774
public async requireLogin(): Promise<boolean> {
804-
const result: cliInstance.CliExitData = await this.execute(Command.printOdoVersionAndProjects(), process.cwd(), false);
805-
return this.odoLoginMessages.some((msg) => result.stderr.includes(msg));
775+
const result: cliInstance.CliExitData = await this.execute('oc whoami', process.cwd(), false);
776+
return !!result.error;
806777
}
807778

808779
private async insertAndReveal(item: OpenShiftObject): Promise<OpenShiftObject> {

test/unit/odo.test.ts

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -146,15 +146,10 @@ suite('odo', () => {
146146
yamlStub.returns({ ActiveApplications: activeProjs });
147147
execStub.onFirstCall().resolves({
148148
error: undefined,
149-
stdout: 'Server https://172.17.185.52:8443',
149+
stdout: 'Server: https://172.17.185.52:8443',
150150
stderr: ''
151151
});
152152
execStub.onSecondCall().resolves({
153-
error: undefined,
154-
stdout: 'Server https://172.17.185.52:8443',
155-
stderr: ''
156-
});
157-
execStub.onThirdCall().resolves({
158153
error: undefined,
159154
stdout: JSON.stringify({
160155
items: [
@@ -590,54 +585,27 @@ suite('odo', () => {
590585
`Server: ${clusterUrl}`,
591586
'Kubernetes: v1.11.0+d4cacc0'
592587
];
593-
const odoVersionOutLoggedOut = [
594-
'odo v0.0.15 (2f7ed497)',
595-
'',
596-
'Kubernetes: v1.11.0+d4cacc0'
597-
];
598-
const oc = [
599-
'oc v3.9.0+191fece',
600-
'kubernetes v1.9.1+a0ce1bc657',
601-
'features: Basic-Auth',
602-
'',
603-
`Server ${clusterUrl}`,
604-
'kubernetes v1.11.0+d4cacc0'
605-
];
606588

607-
test('extension first uses odo version to get cluster url', async () => {
589+
test('extension uses odo version to get cluster url', async () => {
608590
sandbox.stub(odo.OdoImpl.prototype, 'execute').resolves({
609591
error: undefined,
610592
stdout: odoVersionOutLoggedIn.join('\n'),
611593
stderr: ''
612594
});
613595
const cluster: odo.OpenShiftObject[] = await odo.getInstance().getClusters();
614-
assert.equal(cluster[0].getName(), clusterUrl);
615-
});
616-
617-
test('extension uses oc version to get cluster url as a backup plan', async () => {
618-
sandbox.stub(odo.OdoImpl.prototype, 'execute').onFirstCall().resolves({
619-
error: undefined,
620-
stdout: odoVersionOutLoggedOut.join('\n'),
621-
stderr: ''
622-
}).onSecondCall().resolves({
623-
error: undefined,
624-
stdout: oc.join('\n'),
625-
stderr: ''
626-
});
627-
const cluster: odo.OpenShiftObject[] = await odo.getInstance().getClusters();
628-
assert.equal(cluster[0].getName(), clusterUrl);
596+
expect(cluster[0].getName()).equals(clusterUrl);
629597
});
630598

631599
test('extension uses odo version to determine if login is required', async () => {
632600
const stub = sandbox.stub(odoCli, 'execute').resolves({ error: null, stdout: 'logged in', stderr: ''});
633601
const result = await odoCli.requireLogin();
634602

635-
expect(stub).calledOnceWith(verbose.Command.printOdoVersionAndProjects());
603+
expect(stub).calledOnceWith('oc whoami');
636604
expect(result).false;
637605
});
638606

639607
test('requireLogin returns true if odo is not logged in to the cluster', async () => {
640-
sandbox.stub(odoCli, 'execute').resolves({ error: null, stdout: '', stderr: 'Please log in to the cluster'});
608+
sandbox.stub(odoCli, 'execute').resolves({ error: new Error('Not logged in!'), stdout: '', stderr: ''});
641609
const result = await odoCli.requireLogin();
642610

643611
expect(result).true;

0 commit comments

Comments
 (0)