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;
     }
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 6
0
        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
        }
Exemplo n.º 7
0
 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);
 }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
 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);
 }
Exemplo n.º 10
0
        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
        }
Exemplo n.º 11
0
 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);
     }
 }
Exemplo n.º 12
0
 public bool Remove(IWebDAVResource resProp)
 {
     if (resProp != null)
     {
         // need to also delete possible custom propertis
         DeleteResourcesCustomProperties(resProp);
         return Manager.Delete(resProp);
     }
     else
     {
         return false;
     }
 }
Exemplo n.º 13
0
 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;
     }
 }