public class AuViewerClient
{
HttpClient Client { get; set; }
private static string acessToken = string.Empty;
private static DateTime expireTime = DateTime.MinValue;
private readonly FormUrlEncodedContent _form;
public AuViewerClient(string key, string password, Uri baseAddressUri)
{
Client
= new HttpClient
() {
BaseAddress = baseAddressUri
};
_form
= new FormUrlEncodedContent
(new Dictionary
<string,
string> { { "client_id", key
},
{ "client_secret", password }, { "grant_type", "client_credentials" } });
}
public async Task<string> GetAccessTokenAsync()
{
if (expireTime > DateTime.Now)
{
return acessToken;
}
var response = await GetToken();
if (!response.IsSuccessStatusCode)
{
return String.Empty;
}
expireTime = DateTime.Now.AddMinutes(18);
var tokenResponse = await response.Content.ReadAsAsync<AccessTokenResponse>();
acessToken = tokenResponse.AccessToken;
return acessToken;
}
private async Task<HttpResponseMessage> GetToken()
{
return await Client.PostAsync("authentication/v1/authenticate", _form);
}
public async Task<HttpResponseMessage> Upload(HttpPostedFileBase file, string bucketKey)
{
var token = await GetAccessTokenAsync();
Client
.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue
("Bearer", token
); var objectKey = Uri.EscapeDataString(file.FileName);
var requestMessage
= new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri
= new Uri
(Client
.BaseAddress,
"oss/v1/buckets/" + bucketKey
+ "/objects/" + objectKey
),
Content
= new StreamContent
(file
.InputStream) };
requestMessage
.Content.Headers.ContentType = new MediaTypeHeaderValue
(file
.ContentType); requestMessage.Content.Headers.ContentLength = file.ContentLength;
Client.Timeout = TimeSpan.FromSeconds(3600);
return await Client.SendAsync(requestMessage);
}
public async Task<HttpResponseMessage> Register(string fileId)
{
var token = await GetAccessTokenAsync();
Client
.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue
("Bearer", token
); var requestMessage
= new HttpRequestMessage
() {
Method = HttpMethod.Post,
RequestUri
= new Uri
(Client
.BaseAddress,
"viewingservice/v1/register") };
requestMessage.Headers.Add("x-ads-force", "true");
requestMessage
.Content = new StringContent
("{\"urn\":\"" + fileId
+ "\"}", Encoding
.UTF8,
"application/json"); requestMessage
.Content.Headers.ContentType = new MediaTypeHeaderValue
("application/json");
return await Client.SendAsync(requestMessage);
}
public async Task<HttpResponseMessage> GetViewable(string urn)
{
var token = await GetAccessTokenAsync();
Client
.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue
("Bearer", token
); return await Client.GetAsync("viewingservice/v1/" + urn + "/status");
}
}