From c15672993166fd670ed832eb8da83c36537530c4 Mon Sep 17 00:00:00 2001 From: jason westover Date: Sat, 7 Sep 2024 17:07:55 -0500 Subject: [PATCH] Update to api function for MessageID Update to api function for MessageIDs - PaswordChangeRequired This patch is just a small tweak while still assuming the current X.Y.Z version format. When searching for a standard Registry string from @Message.ExtendedInfo -which is an array of Message objects-, we should stick to the default namespace. For example, if someone added OpenBMC.0.5.0.PaswordChangeRequired it could be erroneous to assume that it has the same meaning, since semantically it is a different message. For our use, trying to do something useful with version portion seems problematic, so I am fine with ignoring them as already done with code being updated here. The search function has been made generic to allow reuse, and some IntelliSense sugar was added. Tested, as Paul documented: Tested: logging in, navigating, logging out with non-expired password. Logging in, navigating, then running `passwd -e ` via ssh leads to functional password change page on the next request and then navigating proceeds normally, and logging out too. If password is expired before logging in the user gets redirected to the password change page automatically after logging in. Change-Id: I306ace2024efea13f25e24528a048d0955b2f95b Signed-off-by: j-westover --- src/store/api.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/store/api.js b/src/store/api.js index 0e119c2871..3ea17b9810 100644 --- a/src/store/api.js +++ b/src/store/api.js @@ -93,11 +93,28 @@ export const getResponseCount = (responses) => { }; export const isPasswordExpired = (data) => { + return !!findMessageId(data, 'PasswordChangeRequired'); +}; + +/** + * Returns the first ExtendedInfo.Message to start with the + * Registry Name (Default: "Base") and end with the given key + * Ignore versions (..) --or-- (....), + * but adhere to Registry namespace + * @param {object} data - AxiosResponse.data + * @param { {MessageKey: string}} key - key into the message registry + * @param { {MessageRegistryPrefix: string}} [registry=Base] - the name of the + * message registry, undefined param defaults to "Base" + * @returns {ExtendedInfo.Message} ExtendedInfo.Message | undefined + */ +export const findMessageId = (data, key, registry = 'Base') => { let extInfoMsgs = data?.['@Message.ExtendedInfo']; + return ( extInfoMsgs && - extInfoMsgs.find( - (i) => i.MessageId.split('.')[4] === 'PasswordChangeRequired', - ) + extInfoMsgs.find((i) => { + const words = i.MessageId.split('.'); + return words[words.length - 1] === key && words[0] === registry; + }) ); };