public bool SaveResource(IWebDAVResource resource) { try { IList<WebDAVProperty> properties = resource.CustomProperties; // Check first if properties exist and do update instead of making dozens of copies of the same thing.. IWebDAVResource r = GetResource(resource.Path); if (r != null) { if (Manager.Update(resource)) { return UpdateProperties(resource.Id, properties); } return false; } else { Manager.Insert(resource); if (properties != null && properties.Count > 0) { foreach (WebDAVProperty prop in properties) // if resource did not exist, certainly its properties dont exist, // so just insert them { prop.ResourceId = resource.Id; Manager.Insert(prop); } } } return true; } catch (Exception) { return false; } }
public bool Remove(IWebDAVResource resProp) { if (resProp != null) { return Manager.Delete(resProp); } else { return false; } }
public static void WriteProperty(XmlTextWriter xmlWriter, IWebDAVResource resource, string property) { switch (property) { case "ishidden": xmlWriter.WriteStartElement(property, "DAV:"); xmlWriter.WriteAttributeString("b:dt", "boolean"); xmlWriter.WriteString(resource.IsHidden ? "1" : "0"); xmlWriter.WriteEndElement(); break; case "isreadonly": xmlWriter.WriteStartElement(property, "DAV:"); xmlWriter.WriteAttributeString("b:dt", "boolean"); xmlWriter.WriteString(resource.IsReadOnly ? "1" : "0"); xmlWriter.WriteEndElement(); break; case "iscollection": xmlWriter.WriteStartElement(property, "DAV:"); xmlWriter.WriteAttributeString("b:dt", "boolean"); xmlWriter.WriteString(resource.IsFolder ? "1" : "0"); xmlWriter.WriteEndElement(); break; case "getcontenttype": xmlWriter.WriteElementString(property, "DAV:", resource.ContentType); break; case "getcontentlanguage": xmlWriter.WriteElementString(property, "DAV:", "en-us"); break; case "creationdate": xmlWriter.WriteStartElement(property, "DAV:"); xmlWriter.WriteAttributeString("b:dt", "dateTime.tz"); //fun, fun MS stuff xmlWriter.WriteString(resource.CreationDate.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture)+"Z"); xmlWriter.WriteEndElement(); break; case "lastaccessed": xmlWriter.WriteStartElement(property, "DAV:"); xmlWriter.WriteAttributeString("b:dt", "dateTime.tz"); // Microsoft cruft (joy) xmlWriter.WriteString(resource.LastAccessedDate.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture) + "Z"); //xmlWriter.WriteString(resource.LastAccessedDate.ToUniversalTime().ToString("dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture)); xmlWriter.WriteEndElement(); break; case "getlastmodified": xmlWriter.WriteStartElement(property, "DAV:"); //Only 'rfc1123-date' productions are legal as values //see: http://tools.ietf.org/html/rfc4918#section-15.7 xmlWriter.WriteAttributeString("b:dt", "dateTime.rfc1123"); xmlWriter.WriteString(resource.LastModifiedDate.ToUniversalTime().ToString("r", CultureInfo.InvariantCulture)); xmlWriter.WriteEndElement(); break; case "getcontentlength": xmlWriter.WriteElementString(property, "DAV:", resource.ContentLength.ToString()); break; case "displayname": xmlWriter.WriteElementString(property, "DAV:", GetDisplayName(resource.Path)); break; case "filepath": xmlWriter.WriteElementString(property, "DAV:", resource.Path); break; case "resourcetype": if (resource.IsFolder) { xmlWriter.WriteStartElement(property, "DAV:"); xmlWriter.WriteElementString("collection", "DAV:", String.Empty); xmlWriter.WriteEndElement(); } else { xmlWriter.WriteElementString(property, "DAV:", String.Empty); } break; case "name": case "parentname": case "isstructureddocument": case "defaultdocument": case "isroot": case "contentclass": default: xmlWriter.WriteElementString(property, "DAV:", String.Empty); break; } }
public bool Remove(IWebDAVResource resource) { storageModule.Remove(resource); return false; }
public bool Save(IWebDAVResource resource) { return storageModule.SaveResource(resource); }
public static void WriteResponse(XmlTextWriter xmlWriter, List<string> davProperties, IWebDAVResource resource) { List<string> validProperties = new List<string>(); List<string> invalidProperties = new List<string>(); xmlWriter.WriteStartElement("response", "DAV:"); xmlWriter.WriteElementString("href", "DAV:", resource.Path); xmlWriter.WriteStartElement("propstat", "DAV:"); xmlWriter.WriteElementString("status", "DAV:", WebDAVUtils.GetHttpStatusString(HttpStatusCode.OK)); xmlWriter.WriteStartElement("prop", "DAV:"); // Is asking explicitly allprops bool allPropRequest=false; if (davProperties.Count == 1 && davProperties.Contains("allprop")) { allPropRequest = true; } // Not specifying any properties is a request for all properties if (davProperties.Count == 0 || allPropRequest) { if (resource.IsFolder) validProperties = new List<string>(FOLDER_ALLOWED_PROPERTIES); else validProperties = new List<string>(FILE_ALLOWED_PROPERTIES); } else { Dictionary<string, string> allowedProperties = resource.IsFolder ? folderAllowedProperties : fileAllowedProperties; for (int i = 0; i < davProperties.Count; i++) { if (allowedProperties.ContainsKey(davProperties[i])) validProperties.Add(davProperties[i]); else invalidProperties.Add(davProperties[i]); } } for (int i = 0; i < validProperties.Count; i++) WebDAVUtils.WriteProperty(xmlWriter, resource, validProperties[i]); // Do we support custom properties? if (davProperties.Count == 0 || allPropRequest) { foreach (WebDAVProperty davprop in resource.CustomProperties) { WebDAVUtils.WriteCustomProperty(xmlWriter, davprop, davprop.Name); } } else { for (int i = 0; i < davProperties.Count; i++){ foreach (WebDAVProperty davprop in resource.CustomProperties) { if (davprop.Name == davProperties[i]) { WebDAVUtils.WriteCustomProperty(xmlWriter, davprop, davprop.Name); } } } } xmlWriter.WriteEndElement(); // prop xmlWriter.WriteEndElement(); // propstat if (invalidProperties.Count > 0) { xmlWriter.WriteStartElement("propstat", "DAV:"); xmlWriter.WriteElementString("status", "DAV:", WebDAVUtils.GetHttpStatusString(HttpStatusCode.NotFound)); xmlWriter.WriteStartElement("prop", "DAV:"); foreach (string invalidProp in invalidProperties) xmlWriter.WriteElementString(invalidProp, "DAV:", String.Empty); xmlWriter.WriteEndElement(); // prop xmlWriter.WriteEndElement(); // propstat } xmlWriter.WriteEndElement(); // response }
private void RemoveCustomProperty(string nspace, string name, ref Dictionary<string, HttpStatusCode> multiStatus, ref IWebDAVResource resource) { WebDAVProperty foundProp = null; foreach (WebDAVProperty prop in resource.CustomProperties) { if (prop.Namespace == nspace && prop.Name == name) { foundProp = prop; break; } } if (foundProp != null) { // it's not enough we just remove it here we need to do it db too resource.CustomProperties.Remove(foundProp); } multiStatus.Add(name, HttpStatusCode.OK); }
private HttpStatusCode SetStandardProperty(ref IWebDAVResource resource, string name, string value) { HttpStatusCode ret = HttpStatusCode.OK; switch (name) { case "creationdate": DateTime c_date = resource.CreationDate; if (!DateTime.TryParse(value, out c_date)) ret = HttpStatusCode.Conflict; else resource.CreationDate = c_date; break; case "displayname": case "getcontentlanguage": return HttpStatusCode.InternalServerError; //TODO: implement case "getcontentlength": int c_length = 0; if (!Int32.TryParse(value, out c_length)) ret = HttpStatusCode.Conflict; else resource.ContentLength = c_length; break; case "getcontenttype": resource.ContentType = value; break; case "getlastmodified": DateTime lm_date = resource.LastModifiedDate; if (!DateTime.TryParse(value, out lm_date)) ret = HttpStatusCode.Conflict; else resource.LastModifiedDate = lm_date; break; case "resourcetype": return HttpStatusCode.InternalServerError; //TODO: implement default: return HttpStatusCode.InternalServerError; } return ret; }
private void SetCustomProperty(string nspace, string name, string value, ref Dictionary<string, HttpStatusCode> multiStatus, ref IWebDAVResource resource) { WebDAVProperty foundProp = null; foreach (WebDAVProperty prop in resource.CustomProperties) { if (prop.Namespace == nspace && prop.Name == name) { foundProp = prop; break; } } if (foundProp != null) foundProp.Value = value; else { resource.CustomProperties.Add(new WebDAVProperty(name, nspace, value)); } multiStatus.Add(name, HttpStatusCode.OK); }
public static void WriteResponse(XmlTextWriter xmlWriter, List<string> davProperties, IWebDAVResource resource) { List<string> validProperties = new List<string>(); List<string> invalidProperties = new List<string>(); xmlWriter.WriteStartElement("response", "DAV:"); xmlWriter.WriteElementString("href", "DAV:", resource.Path); xmlWriter.WriteStartElement("propstat", "DAV:"); xmlWriter.WriteElementString("status", "DAV:", Utils.GetHttpStatusString(HttpStatusCode.OK)); xmlWriter.WriteStartElement("prop", "DAV:"); // Not specifying any properties is a request for all properties if (davProperties.Count == 0) { if (resource.IsFolder) validProperties = new List<string>(FOLDER_ALLOWED_PROPERTIES); else validProperties = new List<string>(FILE_ALLOWED_PROPERTIES); } else { Dictionary<string, string> allowedProperties = resource.IsFolder ? folderAllowedProperties : fileAllowedProperties; for (int i = 0; i < davProperties.Count; i++) { if (allowedProperties.ContainsKey(davProperties[i])) validProperties.Add(davProperties[i]); else invalidProperties.Add(davProperties[i]); } } for (int i = 0; i < validProperties.Count; i++) Utils.WriteProperty(xmlWriter, resource, validProperties[i]); xmlWriter.WriteEndElement(); // prop xmlWriter.WriteEndElement(); // propstat if (invalidProperties.Count > 0) { xmlWriter.WriteStartElement("propstat", "DAV:"); xmlWriter.WriteElementString("status", "DAV:", Utils.GetHttpStatusString(HttpStatusCode.NotFound)); xmlWriter.WriteStartElement("prop", "DAV:"); foreach (string invalidProp in invalidProperties) xmlWriter.WriteElementString(invalidProp, "DAV:", String.Empty); xmlWriter.WriteEndElement(); // prop xmlWriter.WriteEndElement(); // propstat } xmlWriter.WriteEndElement(); // response }
private void DeleteResourcesCustomProperties(IWebDAVResource resProp) { ICriteria cr = Manager.GetSession().CreateCriteria(typeof(WebDAVProperty)); cr.Add(Expression.Eq("ResourceId", resProp.Id)); foreach (WebDAVProperty p in cr.List()) { Manager.Delete(p); } }
public bool Remove(IWebDAVResource resProp) { if (resProp != null) { // need to also delete possible custom propertis DeleteResourcesCustomProperties(resProp); return Manager.Delete(resProp); } else { return false; } }
public bool SaveResource(IWebDAVResource resource) { try { IList<WebDAVProperty> properties = resource.CustomProperties; Manager.Insert(resource); if (properties != null && properties.Count > 0) { foreach (WebDAVProperty prop in properties) { prop.ResourceId = resource.Id; Manager.Insert(prop); } } return true; } catch (Exception) { return false; } }