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;
}