std::list read_meta_data_json()

in metadata/src/metadata.cpp [35:111]


std::list<krb_ticket_info_t *> read_meta_data_json( std::string file_path )
{
    std::list<krb_ticket_info_t *> krb_ticket_info_list;
    try
    {
        if ( file_path.empty() )
        {
            std::cout << Util::getCurrentTime() << '\t' << "ERROR: meta data file is empty"  << std::endl;
            return krb_ticket_info_list;
        }

        // deserialize json to krb_ticket_info object
        Json::Value root;
        std::ifstream json_file( file_path );

        if ( json_file.is_open() )
        {
            json_file >> root;
            json_file.close();

            // deserialize json to krb_ticket_info object
            const Json::Value& child_tree_krb_info = root["krb_ticket_info"];

            for ( const Json::Value& krb_info : child_tree_krb_info )
            {
                krb_ticket_info_t * krb_ticket_info =
                    new krb_ticket_info_t ;
                std::string krb_file_path = krb_info["krb_file_path"].asString();

                if ( contains_invalid_characters( krb_file_path ) )
                {
                    std::cout << Util::getCurrentTime() << '\t' << "ERROR: krb file path contains invalid characters"  <<
                        std::endl;
                    delete ( krb_ticket_info );
                    break;
                }

                // only add path if it exists
                if ( std::filesystem::exists( krb_file_path ) )
                {
                    krb_ticket_info->krb_file_path = krb_file_path;
                    
                    std::string service_account = krb_info["service_account_name"].asString();
                    if (Util::contains_invalid_characters_in_ad_account_name(service_account)) {
                        std::cout << Util::getCurrentTime() << '\t' << "ERROR: service account name contains invalid characters" << std::endl;
                        delete krb_ticket_info;
                        break;
                    }
                    krb_ticket_info->service_account_name = service_account;

                    krb_ticket_info->domain_name = krb_info["domain_name"].asString();
                    krb_ticket_info->domainless_user = krb_info["domainless_user"].asString();
                    if(krb_info.isMember("distinguished_name"))
                    {
                        krb_ticket_info->distinguished_name = krb_info["distinguished_name"].asString();
                    }

                    if(krb_info.isMember("credspec_info"))
                    {
                        krb_ticket_info->credspec_info = krb_info["credspec_info"].asString();
                    }

                    krb_ticket_info_list.push_back( krb_ticket_info );
                }
            }
        }
    }
    catch ( const std::exception& ex )
    {
        std::cout << Util::getCurrentTime() << '\t' << "ERROR: '" << ex.what() << "'!" << std::endl;
        std::cout << Util::getCurrentTime() << '\t' << "ERROR: meta data file is not properly formatted"  <<
            std::endl;
        return krb_ticket_info_list;
    }

    return krb_ticket_info_list;
}