示例#1
0
        public async Task <AlibabaCloudCredentials> GetCredentialFileAlibabaCloudCredentialAsync(CancellationToken cancellationToken)
        {
            if (null == credentialFileLocation)
            {
                credentialFileLocation = GetHomePath();
                var slash        = EnvironmentUtil.GetOSSlash();
                var fileLocation = EnvironmentUtil.GetComposedPath(credentialFileLocation, slash);

                if (File.Exists(fileLocation))
                {
                    credentialFileLocation = fileLocation;
                }
                else
                {
                    return(null);
                }
            }

            if (credentialFileLocation.Equals(""))
            {
                throw new ClientException(
                          "Credentials file environment variable 'ALIBABA_CLOUD_CREDENTIALS_FILE' cannot be empty");
            }

            var iniReader       = new IniReader(credentialFileLocation);
            var sectionNameList = iniReader.GetSections();

            if (null != defaultProfile.DefaultClientName)
            {
                var userDefineSectionNode = defaultProfile.DefaultClientName;

                var iniKeyTypeValue = iniReader.GetValue("type", userDefineSectionNode);

                if (iniKeyTypeValue.Equals("access_key"))
                {
                    accessKeyId     = iniReader.GetValue("access_key_id", userDefineSectionNode);
                    accessKeySecret = iniReader.GetValue("access_key_secret", userDefineSectionNode);
                    regionId        = iniReader.GetValue("region_id", userDefineSectionNode);

                    return(await GetAccessKeyCredentialAsync(cancellationToken).ConfigureAwait(false));
                }

                if (iniKeyTypeValue.Equals("ecs_ram_role"))
                {
                    roleName = iniReader.GetValue("role_name", userDefineSectionNode);
                    regionId = iniReader.GetValue("region_id", userDefineSectionNode);

                    return(await GetInstanceRamRoleAlibabaCloudCredentialAsync(cancellationToken).ConfigureAwait(false));
                }

                if (iniKeyTypeValue.Equals("ram_role_arn"))
                {
                    accessKeyId     = iniReader.GetValue("access_key_id", userDefineSectionNode);
                    accessKeySecret = iniReader.GetValue("access_key_secret", userDefineSectionNode);
                    roleArn         = iniReader.GetValue("role_arn", userDefineSectionNode);

                    return(await GetRamRoleArnAlibabaCloudCredentialAsync(cancellationToken).ConfigureAwait(false));
                }

                if (iniKeyTypeValue.Equals("rsa_key_pair"))
                {
                    publicKeyId    = iniReader.GetValue("public_key_id", userDefineSectionNode);
                    privateKeyFile = iniReader.GetValue("private_key_file", userDefineSectionNode);

                    return(await GetRsaKeyPairAlibabaCloudCredentialAsync(cancellationToken).ConfigureAwait(false));
                }
            }
            else
            {
                foreach (var sectionItem in sectionNameList)
                {
                    if (!sectionItem.Equals("default"))
                    {
                        continue;
                    }

                    accessKeyId     = iniReader.GetValue("access_key_id", "default");
                    accessKeySecret = iniReader.GetValue("access_key_secret", "default");
                    regionId        = iniReader.GetValue("region_id", "default");

                    return(await GetAccessKeyCredentialAsync(cancellationToken).ConfigureAwait(false));
                }
            }

            return(null);
        }