getSign function

String getSign(
  1. String method,
  2. String key, {
  3. required String secretId,
  4. required String secretKey,
  5. Map<String, String?> headers = const {},
  6. Map<String, String?> params = const {},
  7. DateTime? signTime,
  8. bool anonymous = false,
})

η”Ÿζˆη­Ύε

Implementation

String getSign(
  String method,
  String key, {
  required String secretId,
  required String secretKey,
  Map<String, String?> headers = const {},
  Map<String, String?> params = const {},
  DateTime? signTime,
  bool anonymous = false,
}) {
  if (anonymous) {
    return "";
  } else {
    signTime = signTime ?? DateTime.now();
    int startSignTime = signTime.millisecondsSinceEpoch ~/ 1000 - 60;
    int stopSignTime = signTime.millisecondsSinceEpoch ~/ 1000 + 120;
    String keyTime = "$startSignTime;$stopSignTime";
    cosLog("keyTime=$keyTime");
    String signKey = hmacSha1(keyTime, secretKey);
    cosLog("signKey=$signKey");

    var lap = getListAndParameters(params);
    String urlParamList = lap[0];
    String httpParameters = lap[1];
    cosLog("urlParamList=$urlParamList");
    cosLog("httpParameters=$httpParameters");

    lap = getListAndParameters(filterHeaders(headers));
    String headerList = lap[0];
    String httpHeaders = lap[1];
    cosLog("headerList=$headerList");
    cosLog("httpHeaders=$httpHeaders");

    String httpString =
        "${method.toLowerCase()}\n$key\n$httpParameters\n$httpHeaders\n";
    cosLog("httpString=$httpString");
    String stringToSign =
        "sha1\n$keyTime\n${hex.encode(sha1.convert(httpString.codeUnits).bytes)}\n";
    cosLog("stringToSign=$stringToSign");
    String signature = hmacSha1(stringToSign, signKey);
    cosLog("signature=$signature");
    String res =
        "q-sign-algorithm=sha1&q-ak=$secretId&q-sign-time=$keyTime&q-key-time=$keyTime&q-header-list=$headerList&q-url-param-list=$urlParamList&q-signature=$signature";
    cosLog("Authorization=$res");
    return res;
  }
}