class IDRAC::Session
def create_session_with_basic_auth(url, payload)
def create_session_with_basic_auth(url, payload) begin debug "Creating session with Basic Auth", 1 # Try first with JSON format response = request_with_basic_auth(:post, url, payload.to_json, 'application/json') debug "Response status: #{response.status}", 1 debug "Response body size: #{response.body.to_s.size} bytes", 2 if @verbosity >= 2 || response.status >= 400 debug "Response body (first 500 chars): #{response.body.to_s[0..500]}", 2 end if process_session_response(response) debug "Redfish session created successfully with Basic Auth (JSON)", 1, :green return true end # If that fails, try with form-urlencoded if response.status == 415 || (response.body.to_s.include?("unsupported media type")) debug "415 Unsupported Media Type with JSON, trying form-urlencoded", 1, :yellow form_data = "UserName=#{URI.encode_www_form_component(username)}&Password=#{URI.encode_www_form_component(password)}" form_response = request_with_basic_auth(:post, url, form_data, 'application/x-www-form-urlencoded') if process_session_response(form_response) debug "Redfish session created successfully with Basic Auth (form-urlencoded)", 1, :green return true elsif form_response.status == 400 # Check for maximum sessions error if (form_response.body.include?("maximum number of user sessions") || form_response.body.include?("RAC0218") || form_response.body.include?("Internal Server Error")) debug "Maximum sessions reached detected during session creation", 1, :light_red @sessions_maxed = true return false end end elsif response.status == 400 # Check for maximum sessions error if (response.body.include?("maximum number of user sessions") || response.body.include?("RAC0218") || response.body.include?("Internal Server Error")) debug "Maximum sessions reached detected during session creation", 1, :light_red @sessions_maxed = true return false end end # Try one more approach with no Content-Type header debug "Trying Basic Auth with no Content-Type header", 1, :yellow no_content_type_response = connection.post(url) do |req| req.headers['Authorization'] = "Basic #{Base64.strict_encode64("#{username}:#{password}")}" req.headers['Accept'] = '*/*' req.body = payload.to_json end if process_session_response(no_content_type_response) debug "Redfish session created successfully with Basic Auth (no content type)", 1, :green return true end debug "Failed to create Redfish session: #{response.status} - #{response.body}", 1, :red return false rescue Faraday::SSLError => e debug "SSL Error in Basic Auth request: #{e.message}", 1, :red debug "OpenSSL version: #{OpenSSL::OPENSSL_VERSION}", 1 debug e.backtrace.join("\n"), 3 if e.backtrace && @verbosity >= 3 return false rescue => e debug "Error during Redfish session creation with Basic Auth: #{e.class.name}: #{e.message}", 1, :red debug e.backtrace.join("\n"), 2 if e.backtrace && @verbosity >= 2 return false end end