Exemplo n.º 1
0
        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);
        }