///// <summary>
        ///// Fetches the data from Blob Storage and returns a Stream.
        ///// </summary>
        ///// <param name="segments"></param>
        ///// <returns></returns>
        //[HttpGet]
        //public Task<HttpResponseMessage> GetAsync(string segments)
        //{
        //    return GetDataAsync(segments);
        //}

        #region Implementation

        private IHttpActionResult GetRedirect(string segments)
        {
            string[] pathSegments  = segments.Split(new[] { "/" }, StringSplitOptions.None);
            string   alias         = pathSegments[0];
            string   containerName = pathSegments[1];
            string   path          = string.Join("/", pathSegments.Skip(2));

            // var userId = this.User.Identity.Name; // Akamai

            var nonce = ((ClaimsIdentity)this.User.Identity).Claims.First(claim => claim.Type == G2OClaimTypes.Nonce);

            Trace.TraceInformation(string.Format("Logged in via nonce {0}", nonce));

            var storage = this.G2OConfiguration.Storage.FirstOrDefault(_ => _.Alias == alias);

            if (storage == null)
            {
                return(NotFound());
            }
            if (!storage.Containers.Any(_ => _ == containerName))
            {
                return(NotFound());
            }

            var blobClient = storage.CloudStorageAccount.CreateCloudBlobClient();
            var container  = blobClient.GetContainerReference(containerName);

            // var sasAdHocUri = ContainerUtils.GetSASAdHoc(container, path, validity: TimeSpan.FromMinutes(55));
            var sasPolicyUri = ContainerUtils.GetSASUsingPolicy(container, path, validity: TimeSpan.FromDays(31));


            bool enforceProtocolEquality = storage.CloudStorageAccount != CloudStorageAccount.DevelopmentStorageAccount;
            var  redirectUri             = enforceProtocolEquality
                 ? new UriBuilder(sasPolicyUri)
            {
                Scheme = this.Request.RequestUri.Scheme, Port = -1
            }.Uri                                                                                          // redirect scheme must be equal to inbound protocol
                 : sasPolicyUri;

            Trace.TraceInformation(string.Format("Redirecting to {0}", redirectUri.AbsoluteUri));

            return(Redirect(redirectUri));
        }
Exemple #2
0
        public void Configuration(IAppBuilder app, CompositionContainer compositionContainer)
        {
            // app.UseWelcomePage();
            // app.UseErrorPage();
            // app.UseErrorPage(new ErrorPageOptions
            // {
            //     ShowEnvironment = true,
            //     ShowCookies = true,
            //     ShowExceptionDetails = true,
            //     ShowHeaders = true,
            //     ShowQuery = true,
            //     ShowSourceCode = true
            // });
            // app.Use<AzureStorageProxyOwinMiddleware>();

            var proxyConfig = compositionContainer.GetExportedValue <G2OProxyConfiguration>();

            ContainerUtils.SetSASPolicies(proxyConfig);
            app.EnforeG2OAuthentication(keyResolver: proxyConfig.GetKey);
            this.ConfigureWebApi(app, compositionContainer);
        }