fetchScopeLimitCredentials method

  1. @override
Future<SessionQCloudCredentials> fetchScopeLimitCredentials(
  1. List<STSCredentialScope?> stsCredentialScopes
)
override

Implementation

@override
Future<SessionQCloudCredentials> fetchScopeLimitCredentials(List<STSCredentialScope?> stsCredentialScopes) async {
  // 先从缓存中获取,当scope一样的时候并且没有过期则使用缓存,否则调研业务回调方法获取最新的临时秘钥
  // 用于解决类似分块上传这种频繁但是秘钥大概率一样的情况
  String stsCredentialScopesJson = jsonifyScopes(stsCredentialScopes);
  if (kDebugMode) {
    print(stsCredentialScopesJson);
  }
  int scopeId = stsCredentialScopesJson.hashCode;
  SessionQCloudCredentials? credentials = lookupValidCredentials(scopeId);
  if (credentials == null) {
    credentials = await Cos().getFetchScopeLimitCredentials().fetchScopeLimitCredentials(stsCredentialScopes.map((e) => STSCredentialScope(
        action: e == null ? '' : (e.action),
        region: e == null ? '' : (e.region),
        bucket: e == null ? '' : (e.bucket ?? ''),
        prefix: e == null ? '' : (e.prefix ?? '')
    )).toList());
    cacheCredentialsAndCleanUp(scopeId, credentials);
  }
  return credentials;
}