Extract reusable logic into separate function
Moved post session creation logic to new function called
processAfterSessionCreation.
This refactor improves code reuse for MFA changes in commit
https://gerrit.openbmc.org/c/openbmc/bmcweb/+/74938
Tested by:
Created session with expired password.
Verified password change is forced.
Created session with valid password.
Change-Id: Id91c53661c2c875c229cee9b5a6575560031ad75
Signed-off-by: Jishnu CM <jishnunambiarcm@duck.com>
diff --git a/redfish-core/lib/redfish_sessions.hpp b/redfish-core/lib/redfish_sessions.hpp
index 62e655f..5b5234a 100644
--- a/redfish-core/lib/redfish_sessions.hpp
+++ b/redfish-core/lib/redfish_sessions.hpp
@@ -201,6 +201,39 @@
asyncResp->res.jsonValue = getSessionCollectionMembers();
}
+inline void processAfterSessionCreation(
+ const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+ const crow::Request& req, const std::string& username,
+ std::shared_ptr<persistent_data::UserSession>& session)
+{
+ // When session is created by webui-vue give it session cookies as a
+ // non-standard Redfish extension. This is needed for authentication for
+ // WebSockets-based functionality.
+ if (!req.getHeaderValue("X-Requested-With").empty())
+ {
+ bmcweb::setSessionCookies(asyncResp->res, *session);
+ }
+ else
+ {
+ asyncResp->res.addHeader("X-Auth-Token", session->sessionToken);
+ }
+
+ asyncResp->res.addHeader(
+ "Location", "/redfish/v1/SessionService/Sessions/" + session->uniqueId);
+ asyncResp->res.result(boost::beast::http::status::created);
+ if (session->isConfigureSelfOnly)
+ {
+ messages::passwordChangeRequired(
+ asyncResp->res,
+ boost::urls::format("/redfish/v1/AccountService/Accounts/{}",
+ session->username));
+ }
+
+ crow::getUserInfo(asyncResp, username, session, [asyncResp, session]() {
+ fillSessionObject(asyncResp->res, *session);
+ });
+}
+
inline void handleSessionCollectionPost(
crow::App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
@@ -258,34 +291,9 @@
messages::internalError(asyncResp->res);
return;
}
-
- // When session is created by webui-vue give it session cookies as a
- // non-standard Redfish extension. This is needed for authentication for
- // WebSockets-based functionality.
- if (!req.getHeaderValue("X-Requested-With").empty())
- {
- bmcweb::setSessionCookies(asyncResp->res, *session);
- }
- else
- {
- asyncResp->res.addHeader("X-Auth-Token", session->sessionToken);
- }
-
- asyncResp->res.addHeader(
- "Location", "/redfish/v1/SessionService/Sessions/" + session->uniqueId);
- asyncResp->res.result(boost::beast::http::status::created);
- if (session->isConfigureSelfOnly)
- {
- messages::passwordChangeRequired(
- asyncResp->res,
- boost::urls::format("/redfish/v1/AccountService/Accounts/{}",
- session->username));
- }
-
- crow::getUserInfo(asyncResp, username, session, [asyncResp, session]() {
- fillSessionObject(asyncResp->res, *session);
- });
+ processAfterSessionCreation(asyncResp, req, username, session);
}
+
inline void handleSessionServiceHead(
crow::App& app, const crow::Request& req,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)