Skip to content

Commit

Permalink
fix #2666 Placeholders
Browse files Browse the repository at this point in the history
Signed-off-by: zFernand0 <[email protected]>
  • Loading branch information
zFernand0 committed Jan 16, 2024
1 parent 9aef3b0 commit de42251
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 52 deletions.
1 change: 1 addition & 0 deletions packages/zowe-explorer-api/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ All notable changes to the "zowe-explorer-api" extension will be documented in t

- Added return type for `IZoweUSSTreeNode.openUSS`.
- Fixed use of `this` in static methods in `ZoweVsCodeExtension`. [#2606](https://github.com/zowe/vscode-extension-for-zowe/pull/2606)
- Fixed `ZoweVsCodeExtension.promptUserPass` to not use hardcoded values for user and password. [#2666](https://github.com/zowe/vscode-extension-for-zowe/issues/2666)

## `2.13.1`

Expand Down
6 changes: 2 additions & 4 deletions packages/zowe-explorer-api/src/profiles/ProfilesCache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -539,14 +539,12 @@ export class ProfilesCache {
}

private shouldRemoveTokenFromProfile(profile: zowe.imperative.IProfileLoaded, baseProfile: zowe.imperative.IProfileLoaded): boolean {
return (
baseProfile?.profile?.host &&
return (baseProfile?.profile?.host &&
baseProfile?.profile?.port &&
profile?.profile?.host &&
profile?.profile?.port &&
(baseProfile?.profile.host !== profile?.profile.host || baseProfile?.profile.port !== profile?.profile.port) &&
profile?.profile.tokenType.startsWith(zowe.imperative.SessConstants.TOKEN_TYPE_APIML)
);
profile?.profile.tokenType.startsWith(zowe.imperative.SessConstants.TOKEN_TYPE_APIML)) as boolean;
}

public async updateBaseProfileFileLogin(
Expand Down
94 changes: 55 additions & 39 deletions packages/zowe-explorer-api/src/vscode/ZoweVsCodeExtension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,50 +166,66 @@ export class ZoweVsCodeExtension {
node?: IZoweNodeType,
zeRegister?: ZoweExplorerApi.IApiRegisterClient, // ZoweExplorerApiRegister
zeProfiles?: ProfilesCache // Profiles extends ProfilesCache
): Promise<void> {
): Promise<boolean> {
const cache: ProfilesCache = zeProfiles ?? ZoweVsCodeExtension.profilesCache;
const baseProfile = await cache.fetchBaseProfile();
if (baseProfile) {
if (typeof serviceProfile === "string") {
serviceProfile = await ZoweVsCodeExtension.getServiceProfileForAuthPurposes(cache, serviceProfile);
}
const tokenType = loginTokenType ?? serviceProfile.profile.tokenType ?? imperative.SessConstants.TOKEN_TYPE_APIML;
const updSession = new imperative.Session({
hostname: serviceProfile.profile.host,
port: serviceProfile.profile.port,
user: "Username",
password: "Password",
rejectUnauthorized: serviceProfile.profile.rejectUnauthorized,
tokenType,
type: imperative.SessConstants.AUTH_TYPE_TOKEN,
});
const creds = await ZoweVsCodeExtension.promptUserPass({ session: updSession.ISession, rePrompt: true });
updSession.ISession.base64EncodedAuth = imperative.AbstractSession.getBase64Auth(creds[0], creds[1]);

const loginToken = await (zeRegister?.getCommonApi(serviceProfile).login ?? Login.apimlLogin)(updSession);
const updBaseProfile: imperative.IProfile = {
tokenType,
tokenValue: loginToken,
};
const connOk = serviceProfile.profile.host === baseProfile.profile.host && serviceProfile.profile.port === baseProfile.profile.port;
let profileToUpdate: imperative.IProfileLoaded;
if (connOk) {
profileToUpdate = baseProfile;
} else {
profileToUpdate = serviceProfile;
}
if (baseProfile == null) {
return false;
}
if (typeof serviceProfile === "string") {
serviceProfile = await ZoweVsCodeExtension.getServiceProfileForAuthPurposes(cache, serviceProfile);
}
const tokenType = loginTokenType ?? serviceProfile.profile.tokenType ?? imperative.SessConstants.TOKEN_TYPE_APIML;
const updSession = new imperative.Session({
hostname: serviceProfile.profile.host,
port: serviceProfile.profile.port,
user: "Username",
password: "Password",
rejectUnauthorized: serviceProfile.profile.rejectUnauthorized,
tokenType,
type: imperative.SessConstants.AUTH_TYPE_TOKEN,
});
delete updSession.ISession.user;
delete updSession.ISession.password;
const creds = await ZoweVsCodeExtension.promptUserPass({ session: updSession.ISession, rePrompt: true });
if (!creds) {
return false;
}
updSession.ISession.base64EncodedAuth = imperative.AbstractSession.getBase64Auth(creds[0], creds[1]);

await cache.updateBaseProfileFileLogin(profileToUpdate, updBaseProfile, !connOk);
const baseIndex = cache.allProfiles.findIndex((profile) => profile.name === profileToUpdate.name);
cache.allProfiles[baseIndex] = { ...profileToUpdate, profile: { ...profileToUpdate.profile, ...updBaseProfile } };
const loginToken = await (zeRegister?.getCommonApi(serviceProfile).login ?? Login.apimlLogin)(updSession);
const updBaseProfile: imperative.IProfile = {
tokenType,
tokenValue: loginToken,
};

if (node) {
node.setProfileToChoice({
...node.getProfile(),
profile: { ...node.getProfile().profile, ...updBaseProfile },
});
}
// A simplified version of the ProfilesCache.shouldRemoveTokenFromProfile `private` method
const connOk =
// First check whether or not the base profile already does not have a token
baseProfile.profile.tokenType == null || // If base profile does not have a token, we assume it's OK to store the token value there
// The above will ensure that Zowe Explorer behaves the same way as the Zowe CLI in regards to using the base profile for token auth.

// If base profile already has a token type stored, then we check whether or not the connection details are the same
(serviceProfile.profile.host === baseProfile.profile.host && serviceProfile.profile.port === baseProfile.profile.port);
// If the connection details do not match, then we MUST forcefully store the token in the service profile
let profileToUpdate: imperative.IProfileLoaded;
if (connOk) {
profileToUpdate = baseProfile;
} else {
profileToUpdate = serviceProfile;
}

await cache.updateBaseProfileFileLogin(profileToUpdate, updBaseProfile, !connOk);
const baseIndex = cache.allProfiles.findIndex((profile) => profile.name === profileToUpdate.name);
cache.allProfiles[baseIndex] = { ...profileToUpdate, profile: { ...profileToUpdate.profile, ...updBaseProfile } };

if (node) {
node.setProfileToChoice({
...node.getProfile(),
profile: { ...node.getProfile().profile, ...updBaseProfile },
});
}
return true;
}

/**
Expand Down
26 changes: 17 additions & 9 deletions packages/zowe-explorer/src/Profiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1201,21 +1201,27 @@ export class Profiles extends ProfilesCache {
return;
}

const zeInstance = ZoweExplorerApiRegister.getInstance();
try {
loginTokenType = await ZoweExplorerApiRegister.getInstance().getCommonApi(serviceProfile).getTokenTypeName();
loginTokenType = await zeInstance.getCommonApi(serviceProfile).getTokenTypeName();
} catch (error) {
ZoweLogger.warn(error);
Gui.showMessage(localize("ssoLogin.tokenType.error", "Error getting supported tokenType value for profile {0}", serviceProfile.name));
return;
}
try {
if (loginTokenType && loginTokenType.startsWith(zowe.imperative.SessConstants.TOKEN_TYPE_APIML)) {
await this.loginWithRegularProfile(serviceProfile, node);
let loginOk = false;
if (loginTokenType && !loginTokenType.startsWith(zowe.imperative.SessConstants.TOKEN_TYPE_APIML)) {
loginOk = await this.loginWithRegularProfile(serviceProfile, node);
} else {
await ZoweVsCodeExtension.loginWithBaseProfile(serviceProfile, loginTokenType, node, ZoweExplorerApiRegister.getInstance(), this);
loginOk = await ZoweVsCodeExtension.loginWithBaseProfile(serviceProfile, loginTokenType, node, zeInstance, this);
}
if (loginOk) {
Gui.showMessage(localize("ssoLogin.successful", "Login to authentication service was successful."));
await Profiles.getInstance().refresh(zeInstance);
} else {
Gui.showMessage(this.profilesOpCancelled);
}
Gui.showMessage(localize("ssoLogin.successful", "Login to authentication service was successful."));
await Profiles.getInstance().refresh(ZoweExplorerApiRegister.getInstance());
} catch (err) {
const message = localize("ssoLogin.error", "Unable to log in with {0}. {1}", serviceProfile.name, err?.message);
ZoweLogger.error(message);
Expand Down Expand Up @@ -1348,16 +1354,17 @@ export class Profiles extends ProfilesCache {
.map((arg) => arg.argName);
}

private async loginWithRegularProfile(serviceProfile: zowe.imperative.IProfileLoaded, node?: IZoweNodeType): Promise<void> {
private async loginWithRegularProfile(serviceProfile: zowe.imperative.IProfileLoaded, node?: IZoweNodeType): Promise<boolean> {
let session: zowe.imperative.Session;
if (node) {
session = node.getSession();
} else {
}
if (session == null) {
session = await ZoweExplorerApiRegister.getInstance().getCommonApi(serviceProfile).getSession();
}
const creds = await this.loginCredentialPrompt();
if (!creds) {
return;
return false;
}
session.ISession.user = creds[0];
session.ISession.password = creds[1];
Expand All @@ -1370,6 +1377,7 @@ export class Profiles extends ProfilesCache {
profile: { ...node.getProfile().profile, ...session },
});
}
return true;
}

private async getConfigLocationPrompt(action: string): Promise<string> {
Expand Down

0 comments on commit de42251

Please sign in to comment.