string LOGAdapter::GetUrlSignature()

in adapter.cpp [400:459]


string LOGAdapter::GetUrlSignature(const string& httpMethod, const string& operationType, map<string, string>& httpHeader, const map<string, string>& parameterList, const string& content, const string& signKey, const LOGSigType sigType)
{
    string contentMd5;
    string signature;
    string osstream;
    if(! content.empty())
    {
        contentMd5=CodecTool::CalcMD5(content);
    }
    string contentType;
    map<string, string>::iterator iter = httpHeader.find(CONTENT_TYPE);
    if (iter != httpHeader.end())
    {
        contentType = iter->second;
    }
    std::map<string,string> endingMap;
    switch(sigType)
    {
    case BASE64_SHA1_MD5:
        osstream.append(httpMethod);
        osstream.append("\n");
        osstream.append(contentMd5);
        osstream.append("\n");
        osstream.append(contentType);
        osstream.append("\n");
        osstream.append(httpHeader[DATE]);
        osstream.append("\n");
        for(map<string,string>::const_iterator iter=httpHeader.begin(); iter!=httpHeader.end(); ++iter)
        {
            if(CodecTool::StartWith(iter->first, LOG_HEADER_PREFIX) || CodecTool::StartWith(iter->first, ACS_HEADER_PREFIX))
            {
                endingMap.insert(std::make_pair(iter->first, iter->second));
            }
        }
        for(map<string,string>::const_iterator it=endingMap.begin(); it!=endingMap.end(); ++it)
        {
                osstream.append(it->first);
                osstream.append(":");
                osstream.append(it->second);
                osstream.append("\n");
        }
        osstream.append(operationType);
        if (parameterList.size() > 0) osstream.append("?");
        for(map<string,string>::const_iterator iter=parameterList.begin(); iter!=parameterList.end(); ++iter)
        {
            if(iter != parameterList.begin())
            {
                osstream.append("&");
            }
            osstream.append(iter->first);
            osstream.append("=");
            osstream.append(iter->second);
        }
        signature=CodecTool::Base64Enconde(CodecTool::CalcSHA1(osstream, signKey));
        break;
    default:
        throw LOGException(LOGE_NOT_IMPLEMENTED, "Signature Version does not support.");
    }
    return signature;
}