Exemplo n.º 1
0
        public void FindDestinationDir()
        {
            var mapping = new DirectoryMapping("test", "C:\\Foo", "E:\\FooBackup");
            var result  = mapping.FindDestinationDirectoryFromSource("C:\\Foo\\a\\b");

            Assert.AreEqual("E:\\FooBackup\\a\\b", result);
        }
Exemplo n.º 2
0
        public bool HasDefaultDirectoryId([NotNull] DirectoryMapping directoryMapping)
        {
            Contract.Requires(directoryMapping != null);
            var directory = directoryMapping.Directory;

            var id        = GetDirectoryId(directory);
            var defaultId = GetDefaultId(directory);

            return(id == defaultId);
        }
Exemplo n.º 3
0
        public virtual void RemoveFromDirectoryListing(string fullPath)
        {
            if (DirectoryMapping == null)
            {
                return;
            }

            DirectoryMapping.Where(x => x.Value == fullPath)
            .ToList()
            .ForEach(pair => DirectoryMapping.TryRemove(pair.Key, out string key));
        }
Exemplo n.º 4
0
        public void CaseInsensitiveEquals()
        {
            var lower = new DirectoryMapping("a", "b");
            var upper = new DirectoryMapping("A", "B");

            Ensure(lower == upper);
            Ensure(lower.Equals(upper));
            Ensure(Equals(lower, upper));
            Assert.AreEqual(lower, upper);
            Ensure(ReferenceEquals(lower, upper), False);
            Ensure(lower != upper, False);
        }
Exemplo n.º 5
0
        public async override Task SendFileAsync(IHttpContext context, string filename)
        {
            PopulateDirectoryListing();

            if (DirectoryMapping.ContainsKey(context.Request.Endpoint))
            {
                var filepath = DirectoryMapping[context.Request.Endpoint];
                context.Response.StatusCode = HttpStatusCode.Ok;

                var lastModified = File.GetLastWriteTimeUtc(filepath).ToString("R");
                context.Response.AddHeader("Last-Modified", lastModified);

                if (context.Request.Headers.AllKeys.Contains("If-Modified-Since"))
                {
                    if (context.Request.Headers["If-Modified-Since"].Equals(lastModified))
                    {
                        await context.Response.SendResponseAsync(HttpStatusCode.NotModified).ConfigureAwait(false);

                        return;
                    }
                }

                if (!string.IsNullOrWhiteSpace(filename))
                {
                    context.Response.AddHeader("Content-Disposition", $"attachment; filename=\"{filename}\"");
                }

                context.Response.ContentType = ContentType.FindKey(Path.GetExtension(filepath).TrimStart('.').ToLower());

                using (var stream = new FileStream(filepath, FileMode.Open))
                {
                    await context.Response.SendResponseAsync(stream);
                }
            }

            // File not found, but should have been based on the path info
            else if (!string.IsNullOrEmpty(Prefix) && context.Request.Endpoint.StartsWith(Prefix, StringComparison.CurrentCultureIgnoreCase))
            {
                context.Response.StatusCode = HttpStatusCode.NotFound;
            }
        }