/*
* Copyright 2009-2017 Alibaba Cloud All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "EcsMetadataFetcher.h"
#include <sstream>
#include <memory>
#include <alibabacloud/core/Url.h>
#include "CurlHttpClient.h"

using namespace AlibabaCloud;

namespace
{
	const int DEFAULT_TIMEOUT_IN_MILLISECONDS = 5000;
	const char* const METADATA_SERVICE_HOST = "100.100.100.200";
	const char* const URL_IN_ECS_METADATA = "/latest/meta-data/ram/security-credentials/";
}

EcsMetadataFetcher::EcsMetadataFetcher()
{
}

EcsMetadataFetcher::~EcsMetadataFetcher()
{
}

std::string EcsMetadataFetcher::roleName()const
{
	return roleName_;
}

void EcsMetadataFetcher::setRoleName(const std::string & roleName)
{
	roleName_ = roleName;
}

std::string EcsMetadataFetcher::getMetadata()
{
	std::stringstream path;
	path << URL_IN_ECS_METADATA << roleName_;

	Url credentialUrl;
	credentialUrl.setHost(METADATA_SERVICE_HOST);
	credentialUrl.setPath(path.str());

	auto client = std::make_shared<CurlHttpClient>();

	HttpRequest request;
	request.setUrl(credentialUrl);
	auto outcome = client->makeRequest(request);

	if (outcome.isSuccess())
		return std::string(outcome.result().body(), outcome.result().bodySize());
	else
		return outcome.error().errorCode();
}