class TencentCloud::Common::OIDCCredential

def credential

def credential
  refresh
  [@secret_id, @secret_key, @token]
end

def initialize

def initialize
  @expire_t = 0
  initialize_args
end

def initialize_args

def initialize_args
  @region = ENV['TKE_REGION']
  @provider_id = ENV['TKE_PROVIDER_ID']
  token_file = ENV['TKE_WEB_IDENTITY_TOKEN_FILE']
  @role_arn = ENV['TKE_ROLE_ARN']
  @ses_name = SES_NAME + (Time.now.to_r * 1_000).to_i.to_s
  @ses_dur = SES_DUR
  if @region.nil? || @provider_id.nil? || token_file.nil? || @role_arn.nil? || @ses_name.nil? || @ses_dur.nil?
    raise TencentCloudSDKException.new('InvalidCredential', 'env TKE_REGION, TKE_PROVIDER_ID, TKE_WEB_IDENTITY_TOKEN_FILE, TKE_ROLE_ARN not exist')
  end
  @token = File.read(token_file).strip
end

def refresh

def refresh
  if @expire_t - Time.now.to_i > SES_DUR / 10
    return
  end
  initialize_args
  client = AbstractClient.new(nil, @region, API_VERSION, API_ENDPOINT, SDK_VERSION, nil)
  req = {
    'ProviderId': @provider_id,
    'WebIdentityToken': @token,
    'RoleArn': @role_arn,
    'RoleSessionName': @ses_name,
    'DurationSeconds': @ses_dur,
  }
  response = JSON.parse(client.send_request(API_ACTION, req))
  if response['Response'].key?('Error')
    code = response['Response']['Error']['Code']
    message = response['Response']['Error']['Message']
    reqid = response['Response']['RequestId']
    raise TencentCloud::Common::TencentCloudSDKException.new(code, message, reqid)
  end
  @secret_id = response['Response']['Credentials']['TmpSecretId']
  @secret_key = response['Response']['Credentials']['TmpSecretKey']
  @token = response['Response']['Credentials']['Token']
  @expire_t = response['Response']['ExpiredTime']
end