void SignUtils::build()

in sdk/src/utils/SignUtils.cc [57:112]


void SignUtils::build(const std::string &method, 
                      const std::string &resource, 
                      const std::string &date,
                      const HeaderCollection &headers,
                      const ParameterCollection &parameters)
{
    std::stringstream ss;

    /*Version 1*/
    // VERB + "\n" +
    // Content-MD5 + "\n"  +
    // Content-Type + "\n" 
    // Date + "\n"  +
    // CanonicalizedOSSHeaders +
    // CanonicalizedResource) +

    //common headers
    ss << method << "\n";
    if (headers.find(Http::CONTENT_MD5) != headers.end()) {
        ss << headers.at(Http::CONTENT_MD5);
    }
    ss << "\n";
    if (headers.find(Http::CONTENT_TYPE) != headers.end()) {
        ss << headers.at(Http::CONTENT_TYPE);
    }
    ss << "\n";
    //Date or EXPIRES
    ss << date << "\n";

    //CanonicalizedOSSHeaders, start with x-oss-
    for (const auto &header : headers) {
        std::string lower = Trim(ToLower(header.first.c_str()).c_str());
        if (lower.compare(0, 6, "x-oss-", 6) == 0) {
            std::string value = Trim(header.second.c_str());
            ss << lower << ":" << value << "\n";
        }
    }

    //CanonicalizedResource, the sub resouce in
    ss << resource;
    char separator = '?';
    for (auto const& param : parameters) {
        if (ParamtersToSign.find(param.first) == ParamtersToSign.end()) {
            continue;
        }

        ss << separator;
        ss << param.first;
        if (!param.second.empty()) {
            ss << "=" << param.second;
        }
        separator = '&';
    }

    canonicalString_ = ss.str();
}