private void DavMKCol_ProcessDavRequest(object sender, EventArgs e) { if (HttpContext.Current == null) { base.AbortRequest(ServerResponseCode.BadRequest); } else { FileItem item = Directory.GetItem(VirtualDirectory.PathInfo(SolutionName)); if (item == null) { base.AbortRequest(ServerResponseCode.BadRequest); return; } if (item.AccessRights.Equals("r")) { base.AbortRequest(DavMKColResponseCode.MethodNotAllowed); return; } //Check to see if the RequestPath is already a resource if (Directory._fileSystem.DirectoryExists(item.RelativePath)) { base.AbortRequest(DavMKColResponseCode.MethodNotAllowed); } else { //The parent folder does not exist if (!Directory._fileSystem.DirectoryExists(System.IO.Path.GetDirectoryName(item.RelativePath))) { base.AbortRequest(DavMKColResponseCode.Conflict); } else { try { //Create the subFolder Directory._fileSystem.CreateSubDirectory(System.IO.Path.GetDirectoryName(item.RelativePath), System.IO.Path.GetFileName(item.RelativePath)); } catch (Exception) { base.AbortRequest(DavMKColResponseCode.Forbidden); } } } } }
private void DavDelete_ProcessDavRequest(object sender, EventArgs e) { if (HttpContext.Current == null) { base.AbortRequest(ServerResponseCode.BadRequest); } else { //Check to see if the resource is a folder FileItem item = Directory.GetItem(VirtualDirectory.PathInfo(SolutionName)); if (item == null) { base.AbortRequest(ServerResponseCode.BadRequest); return; } if (item.AccessRights.Equals("r")) { base.AbortRequest(403); return; } if (Directory._fileSystem.DirectoryExists(item.RelativePath)) { try { Directory._fileSystem.DeleteDirectory(item.RelativePath); } catch (Exception) { base.AbortRequest(DavDeleteResponseCode.Locked); return; } } else { try { Directory._fileSystem.DeleteFile(item.RelativePath); } catch (Exception) { base.AbortRequest(DavDeleteResponseCode.Locked); return; } } } }
private void DavPropFind_ProcessDavRequest(object sender, EventArgs e) { if (HttpContext.Current == null) { base.AbortRequest(ServerResponseCode.BadRequest); } else { String _path = VirtualDirectory.PathInfo(SolutionName); String _basePath = HttpContext.Current.Request.Url.AbsoluteUri; if (!Path.HasExtension(_basePath) && !_basePath.EndsWith("/")) { _basePath += "/"; } FileItem item = Directory.GetItem(_path); if ((!string.IsNullOrEmpty(_path)) && (!_path.Equals("/")) && (item == null)) // no such item { base.AbortRequest(ServerResponseCode.NotFound); return; } if (item != null) { if ((item is VirtualFile) || (Directory._fileSystem.FileExists(item.RelativePath))) // file { if (item is VirtualFile) { DavFile _davFile = new DavFile(item.Name, _basePath); _davFile.CreationDate = DateTime.Now.ToUniversalTime(); _davFile.LastModified = DateTime.Now.ToUniversalTime(); _davFile.SupportsExclusiveLock = true; _davFile.SupportsSharedLock = true; _davFile.ContentLength = 0; base.FileResources.Add(_davFile); return; } FileSystem.ItemInfo _fileInfo = Directory._fileSystem.GetFileInfo(item.RelativePath); if (_fileInfo != null) { DavFile _davFile = new DavFile(_fileInfo.Name, _basePath); _davFile.CreationDate = _fileInfo.CreationTime; _davFile.LastModified = _fileInfo.LastWriteTime; _davFile.SupportsExclusiveLock = true; _davFile.SupportsSharedLock = true; _davFile.ContentLength = (int)_fileInfo.Length; base.FileResources.Add(_davFile); return; } } } //dir DavFolder _rootResource; FileSystem.ItemInfo _dirInfo; if (item == null) { _rootResource = new DavFolder("DavWWWRoot", _basePath); _dirInfo = Directory._fileSystem.GetDirectoryInfo(""); } else { _dirInfo = Directory._fileSystem.GetDirectoryInfo(item.RelativePath); _rootResource = new DavFolder(_dirInfo.Name, _basePath); } _rootResource.CreationDate = _dirInfo.CreationTime; _rootResource.LastModified = _dirInfo.LastWriteTime; _rootResource.ContentLength = (int)_dirInfo.Length; base.CollectionResources.Add(_rootResource); //TODO: Only populate the requested properties switch (base.RequestDepth) { case Sphorium.WebDAV.Server.Framework.DepthType.ResourceOnly: break; default: if (item == null) //root dir { foreach (FileItem subItem in Directory.items) { if (subItem is VirtualFile) { DavFile _davFile = new DavFile(subItem.Name, _basePath + subItem.Name); _davFile.CreationDate = DateTime.Now.ToUniversalTime(); _davFile.LastModified = DateTime.Now.ToUniversalTime(); _davFile.SupportsExclusiveLock = true; _davFile.SupportsSharedLock = true; _davFile.ContentLength = 0; base.FileResources.Add(_davFile); } else { DavFolder _davFolder = new DavFolder(subItem.Name, _basePath + subItem.Name); FileSystem.ItemInfo _subDir = Directory._fileSystem.GetDirectoryInfo(subItem.RelativePath); _davFolder.CreationDate = _subDir.CreationTime; _davFolder.LastModified = _subDir.LastWriteTime; _davFolder.ContentLength = (int)_subDir.Length; base.CollectionResources.Add(_davFolder); } } } else // non root dir { foreach (FileSystem.ItemInfo _subDir in Directory._fileSystem.EnumerateDirectories(item.RelativePath)) { //TODO: Only populate the requested properties DavFolder _davFolder = new DavFolder(_subDir.Name, _basePath + _subDir.Name); _davFolder.CreationDate = _subDir.CreationTime; _davFolder.LastModified = _subDir.LastWriteTime; _davFolder.ContentLength = (int)_subDir.Length; base.CollectionResources.Add(_davFolder); } foreach (FileSystem.ItemInfo _fileInfo in Directory._fileSystem.EnumerateFiles(item.RelativePath)) { //TODO: Only populate the requested properties DavFile _davFile = new DavFile(_fileInfo.Name, _basePath + _fileInfo.Name); _davFile.CreationDate = _fileInfo.CreationTime; _davFile.LastModified = _fileInfo.LastWriteTime; _davFile.SupportsExclusiveLock = true; _davFile.SupportsSharedLock = true; _davFile.ContentLength = (int)_fileInfo.Length; base.FileResources.Add(_davFile); } } break; } } }
private void DavPut_ProcessDavRequest(object sender, EventArgs e) { if (HttpContext.Current == null) { base.AbortRequest(ServerResponseCode.BadRequest); } else { FileItem item = Directory.GetItem(VirtualDirectory.PathInfo(SolutionName)); if (item == null) { base.AbortRequest(ServerResponseCode.BadRequest); return; } if (item.AccessRights.Equals("r")) { base.AbortRequest(ServerResponseCode.BadRequest); return; } if (item.RelativePath.EndsWith(@"\mkdir")) { String[] arr = item.RelativePath.Split(new String[] { "\\" }, StringSplitOptions.RemoveEmptyEntries); String folderToCreate = arr[arr.Length - 2].Trim(); if (!String.IsNullOrEmpty(folderToCreate)) { String rp = ""; for (int i = 0; i < arr.Length - 2; i++) { rp = rp + arr[i].Trim() + "\\"; } if (!Directory._fileSystem.DirectoryExists(rp + folderToCreate)) { Directory._fileSystem.CreateSubDirectory(rp, folderToCreate); } } return; } //The parent folder does not exist if (!Directory._fileSystem.DirectoryExists(System.IO.Path.GetDirectoryName(item.RelativePath))) { base.AbortRequest(ServerResponseCode.NotFound); } else { if (!base.OverwriteExistingResource) { //Check to see if the resource already exists if (System.IO.File.Exists(item.RelativePath)) { base.AbortRequest(DavPutResponseCode.Conflict); } else { SaveFile(item); } } else { SaveFile(item); } } } }
private void DavGet_ProcessDavRequest(object sender, EventArgs e) { if (HttpContext.Current == null) { base.AbortRequest(ServerResponseCode.BadRequest); } else { FileItem item = Directory.GetItem(VirtualDirectory.PathInfo(SolutionName)); if (item == null) { base.AbortRequest(ServerResponseCode.BadRequest); } else { if (item.RelativePath.EndsWith(@"\mkdir")) { String[] arr = item.RelativePath.Split(new String[] { "\\" }, StringSplitOptions.RemoveEmptyEntries); String folderToCreate = arr[arr.Length - 2].Trim(); if (!String.IsNullOrEmpty(folderToCreate)) { String rp = ""; for (int i = 0; i < arr.Length - 2; i++) { rp = rp + arr[i].Trim() + "\\"; } if (!Directory._fileSystem.DirectoryExists(rp + folderToCreate)) { Directory._fileSystem.CreateSubDirectory(rp, folderToCreate); } } base.ResponseOutput = System.Text.ASCIIEncoding.ASCII.GetBytes("ok"); return; } if (item is VirtualFile) { ((VirtualFile)item).GetData(HttpContext.Current.Response.OutputStream); base.ResponseOutput = new byte[0]; } else { if (!Directory._fileSystem.FileExists(item.RelativePath)) { base.AbortRequest(ServerResponseCode.NotFound); } else { using (Stream _fileStream = Directory._fileSystem.OpenRead(item.RelativePath)) { Stream output = ImageResizer.TryResize(Directory._fileSystem.GetFileInfo2(item.RelativePath).Name, _fileStream, HttpContext.Current.Request.QueryString); long _fileSize = output.Length; byte[] _responseBytes = new byte[_fileSize]; output.Read(_responseBytes, 0, (int)_fileSize); base.ResponseOutput = _responseBytes; output.Close(); } } } } } }