sign method
dateString
Date
in HttpDate or Expires
in DateTime.secondsSinceEpoch
Implementation
SignedInfo sign({
required String httpMethod,
required String resourcePath,
Map<String, String>? parameters,
Map<String, String>? headers,
String? contentMd5,
String? dateString,
}) {
final securityHeaders = {
if (headers != null) ...headers,
if (credentials.securityToken != null) ...{
'x-oss-security-token': credentials.securityToken!,
}
};
final sortedHeaders = _sortByLowerKey(securityHeaders);
final contentType = sortedHeaders
.firstWhere(
(e) => e.key == 'content-type',
orElse: () => MapEntry('', ''),
)
.value;
final canonicalizedOSSHeaders = sortedHeaders
.where((e) => e.key.startsWith('x-oss-'))
.map((e) => '${e.key}:${e.value}')
.join('\n');
final securityParameters = {
if (parameters != null) ...parameters,
};
final canonicalizedResource =
_buildCanonicalizedResource(resourcePath, securityParameters);
final date = dateString ?? _requestTime();
final canonicalString = [
httpMethod,
contentMd5 ?? '',
contentType,
date,
if (canonicalizedOSSHeaders.isNotEmpty) canonicalizedOSSHeaders,
canonicalizedResource,
].join('\n');
final signature = _computeHmacSha1(canonicalString);
return SignedInfo(
dateString: date,
accessKeyId: credentials.accessKeyId,
signature: signature,
securityToken: credentials.securityToken);
}