public virtual async Task <TenantRoute> GetRouteAsync(Microsoft.Owin.IOwinRequest owinRequest) { var parts = owinRequest.Path.Value.Trim('/').Split('/'); var route = new TenantRoute(); if (parts.Any()) { route.TenantId = parts[0]; } if (parts.Length > 1) { route.Resource = parts[1]; } route.Purpose = GetPurpose(owinRequest); route.ContainerName = await ContainerNameService.GetContainerNameAsync(route.TenantId, route.Purpose, route.Resource); route.Host = await StorageAccountResolverService.GetBlobEndpointAsync(route); var resourceId = string.Format("{0}/{1}", route.TenantId, route.Resource); var idx = owinRequest.Uri.AbsoluteUri.IndexOf(resourceId) + resourceId.Length; var pathAndQuery = owinRequest.Uri.AbsoluteUri.Substring(idx); var qIdx = pathAndQuery.IndexOf('?'); route.Path = Uri.UnescapeDataString((qIdx > -1 ? pathAndQuery.Substring(0, qIdx) : pathAndQuery).TrimStart('/')); return(route); }
public virtual async Task SignRequestAsync(HttpWebRequest request, TenantRoute route) { var account = await GetStorageAccountAsync(route.TenantId, route.Purpose); var a = new SharedKeyAuthenticationHandler(SharedKeyCanonicalizer.Instance, account.Credentials, account.Credentials.AccountName); a.SignRequest(request, null); }
public virtual async Task <string> GetBlobEndpointAsync(TenantRoute route) { var account = await GetStorageAccountAsync(route.TenantId, route.Purpose); return(account.BlobEndpoint.AbsoluteUri); }