/*
// Copyright (c) 2018 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#include "utils/json_utils.hpp"

#include "error_messages.hpp"
#include "http/http_request.hpp"
#include "http/http_response.hpp"
#include "http/parsing.hpp"

#include <nlohmann/json.hpp>

namespace redfish
{

namespace json_util
{

bool processJsonFromRequest(crow::Response& res, const crow::Request& req,
                            nlohmann::json& reqJson)
{
    JsonParseResult ret = parseRequestAsJson(req, reqJson);
    if (ret == JsonParseResult::BadContentType)
    {
        messages::unrecognizedRequestBody(res);
        return false;
    }
    reqJson = nlohmann::json::parse(req.body(), nullptr, false);

    if (reqJson.is_discarded())
    {
        messages::malformedJSON(res);
        return false;
    }

    return true;
}

} // namespace json_util
} // namespace redfish
