Example #1
0
        public override Uri GetUri(string domain, string path, TimeSpan expire, IEnumerable<string> headers)
        {
            if (expire == TimeSpan.Zero || expire == TimeSpan.MinValue || expire == TimeSpan.MaxValue)
            {
                expire = GetExpire(domain);
            }
            if (expire == TimeSpan.Zero || expire == TimeSpan.MinValue || expire == TimeSpan.MaxValue)
            {
                return GetUriShared(domain, path);
            }

            var pUrlRequest = new GetPreSignedUrlRequest()
                .WithBucketName(_bucket)
                .WithExpires(DateTime.UtcNow.Add(expire))
                .WithKey(MakePath(domain, path))
                .WithProtocol(SecureHelper.IsSecure() ? Protocol.HTTPS : Protocol.HTTP)
                .WithVerb(HttpVerb.GET);

            if (headers != null && headers.Any())
            {
                var headersOverrides = new ResponseHeaderOverrides();
                foreach (var h in headers)
                {
                    if (h.StartsWith("Content-Disposition")) headersOverrides.WithContentDisposition(h.Substring("Content-Disposition".Length + 1));
                    else if (h.StartsWith("Cache-Control")) headersOverrides.WithCacheControl(h.Substring("Cache-Control".Length + 1));
                    else if (h.StartsWith("Content-Encoding")) headersOverrides.WithContentEncoding(h.Substring("Content-Encoding".Length + 1));
                    else if (h.StartsWith("Content-Language")) headersOverrides.WithContentLanguage(h.Substring("Content-Language".Length + 1));
                    else if (h.StartsWith("Content-Type")) headersOverrides.WithContentType(h.Substring("Content-Type".Length + 1));
                    else if (h.StartsWith("Expires")) headersOverrides.WithExpires(h.Substring("Expires".Length + 1));
                    else throw new FormatException(string.Format("Invalid header: {0}", h));
                }
                pUrlRequest.WithResponseHeaderOverrides(headersOverrides);
            }

            return MakeUri(GetClient().GetPreSignedURL(pUrlRequest));
        }