public DownloadResource(IDatabase db, Data.ResourceId id,
                         int sendTimeout, int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _db = db;
     _id = id;
 }
 public override void DeleteResource(EngineRequest request, Data.ResourceId resource)
 {
     CheckInitialization();
     Logger.Storage.Debug("Deleting resource '" + resource.ToString() + "'...");
     EngineMethods.DeleteResource act = new EngineMethods.DeleteResource(request, resource);
     act.Execute();
 }
 public DownloadResource(IDatabase db, Data.ResourceId id,
     int sendTimeout, int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _db = db;
     _id = id;
 }
 public CheckoutCurrentVersion(IDatabase db, Data.ResourceId id,
     Security.RequestingPartyType requestingPartyType, Security.Session session, int sendTimeout,
     int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(db, sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _id = id;
     _requestingPartyType = requestingPartyType;
     _session = session;
 }
 public CheckoutResource(IDatabase db, Data.ResourceId id,
                         Security.RequestingPartyType requestingPartyType, Security.Session session, int sendTimeout,
                         int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(db, sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _id = id;
     _requestingPartyType = requestingPartyType;
     _session             = session;
 }
 public RollbackResource(IDatabase db, Data.ResourceId resourceId, int rollbackDepth,
                         Security.RequestingPartyType requestingPartyType, Security.Session session, int sendTimeout,
                         int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(db, sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _resourceId          = resourceId;
     _rollbackDepth       = rollbackDepth;
     _requestingPartyType = requestingPartyType;
     _session             = session;
     _receivedCount       = 0;
 }
 public DeleteResource(IDatabase db, Data.ResourceId id,
                       Security.RequestingPartyType requestingPartyType, Security.Session session, int sendTimeout,
                       int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(db, sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _id = id;
     _requestingPartyType = requestingPartyType;
     _session             = session;
     _versions            = new Dictionary <Data.VersionId, Data.Version>();
     _receivedCount       = 0;
 }
 public DeleteResource(IDatabase db, Data.ResourceId id,
     Security.RequestingPartyType requestingPartyType, Security.Session session, int sendTimeout,
     int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(db, sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _id = id;
     _requestingPartyType = requestingPartyType;
     _session = session;
     _versions = new Dictionary<Data.VersionId, Data.Version>();
     _receivedCount = 0;
 }
 public RollbackResource(IDatabase db, Data.ResourceId resourceId, int rollbackDepth,
     Security.RequestingPartyType requestingPartyType, Security.Session session, int sendTimeout,
     int receiveTimeout, int sendBufferSize, int receiveBufferSize)
     : base(db, sendTimeout, receiveTimeout, sendBufferSize, receiveBufferSize)
 {
     _resourceId = resourceId;
     _rollbackDepth = rollbackDepth;
     _requestingPartyType = requestingPartyType;
     _session = session;
     _receivedCount = 0;
 }
 public GetResourceReadOnly(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
Example #11
0
        public Data.Resource Transition(Model.Document document, out JObject remainder)
        {
            Data.Resource resource;
            Data.ResourceId id;
            string rev = null;
            Data.VersionId currentVersionId;
            List<Data.VersionId> versionIds = null;
            List<Security.UsageRight> usageRights = null;
            Security.UsageRight usageRight = null;
            JObject jobj = null;
            JProperty prop = null;
            IEnumerator<JToken> en;
            string verifyString;
            JArray jarray = new JArray();

            if (!VerifyDocumentIntegrity(document, out verifyString))
            {
                Logger.Storage.Error("The document is not properly formatted.  It is missing the property '" + verifyString + "'.");
                throw new FormattingException("The argument document does not have the necessary property '" + verifyString + "'.");
            }

            // I ran into a problem here where I was removing the properties from the document and what was left was the remainder.
            // However, this causes an issue when using the transition to make a resource for permissions checking as the
            // object returned to implementing software is the document.  Thus, the implementing software only received those properties
            // not removed... which obviously excludes the most important properties.  To remedy this issue, I created a constructor for
            // Model.Document(Document).  This constructor will format the argument document to a string and then create a JObject from 
            // that string.  C# will deep copy the string (not byref) so as to guarantee an independent object.
            remainder = new Model.Document(document);

            try
            {
                id = new Data.ResourceId(document.Id);
                if (document["_rev"] != null)
                {
                    rev = document.Rev;
                    remainder.Remove("_rev");
                }
                
                remainder.Remove("_id");
                remainder.Remove("$type");

                currentVersionId = new Data.VersionId(document["$currentversionid"].Value<string>());
                remainder.Remove("$currentversionid");

                versionIds = new List<Data.VersionId>();
                jarray = (JArray)document["$versionids"];

                for (int i = 0; i < jarray.Count; i++)
                    versionIds.Add(new Data.VersionId(jarray[i].Value<string>()));

                remainder.Remove("$versionids");


                usageRights = new List<Security.UsageRight>();
                jarray = (JArray)document["$usagerights"];

                for (int i = 0; i < jarray.Count; i++)
                {
                    jobj = (JObject)jarray[i];
                    en = jobj.Children().GetEnumerator();
                    while (en.MoveNext())
                    {
                        prop = (JProperty)en.Current;

                        // Json.Net is giving me some weird errors here when I try to call prop.value<int>();
                        // I cannot figure out why so this code is a temporary work-around, it needs figured out.
                        string a = prop.ToString();
                        a = a.Substring(a.LastIndexOf("\"") + 1); // we know the value is an int, so we can look for the last "
                        a = a.Replace(":", "").Trim();

                        usageRight = new Security.UsageRight(prop.Name, (Security.Authorization.ResourcePermissionType)int.Parse(a));
                        usageRights.Add(usageRight);
                    }
                }

                remainder.Remove("$usagerights");

                resource = new Data.Resource(id, rev, versionIds, currentVersionId, new Data.Metadata(), usageRights);

                // Tags
                resource.Tags = new List<string>();
                jarray = (JArray)document["$tags"];
                for (int i = 0; i < jarray.Count; i++)
                    resource.Tags.Add(jarray[i].Value<string>());
                remainder.Remove("$tags");

                resource.Created = document["$created"].Value<DateTime>();
                resource.Creator = document["$creator"].Value<string>();
                resource.Modified = document["$modified"].Value<DateTime>();
                resource.Modifier = document["$modifier"].Value<string>();
                resource.CheckedOutAt = document["$checkedoutat"].Value<DateTime>();
                resource.CheckedOutTo = document["$checkedoutto"].Value<string>();
                resource.LastCommit = document["$lastcommit"].Value<DateTime>();
                resource.LastCommitter = document["$lastcommitter"].Value<string>();
                resource.Title = document["$title"].Value<string>();

                remainder.Remove("$created");
                remainder.Remove("$creator");
                remainder.Remove("$modified");
                remainder.Remove("$modifier");
                remainder.Remove("$checkedoutat");
                remainder.Remove("$checkedoutto");
                remainder.Remove("$lastcommit");
                remainder.Remove("$lastcommitter");
                remainder.Remove("$title");
            }
            catch (Exception e)
            {
                Logger.Storage.Error("An exception occurred while attempting to parse the document.", e);
                throw;
            }

            return resource;
        }
 public virtual void GetResourceReadOnly(EngineRequest request, Data.ResourceId resource)
 {
     throw new NotImplementedException();
 }
 public RollbackResource(EngineRequest request, Data.ResourceId resourceId, int rollbackDepth)
     : base(request)
 {
     _resourceId    = resourceId;
     _rollbackDepth = rollbackDepth;
 }
Example #14
0
 public CheckoutResource(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
 public DeleteResource(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
        public override void TaskComplete(Tasks.Base sender, ICommandReply reply)
        {
            Type t = sender.GetType();

            if (t == typeof(Tasks.DownloadGlobalPermissions))
            {
                Tasks.DownloadGlobalPermissions task = (Tasks.DownloadGlobalPermissions)sender;
                _gur = task.GlobalUsageRights;
                RunTaskProcess(new Tasks.CheckGlobalPermissions(_db, _gur, _requestingPartyType,
                                                                _session, Security.Authorization.GlobalPermissionType.CreateResource, _sendTimeout, _receiveTimeout,
                                                                _sendBufferSize, _receiveBufferSize));
            }
            else if (t == typeof(Tasks.CheckGlobalPermissions))
            {
                Tasks.CheckGlobalPermissions task = (Tasks.CheckGlobalPermissions)sender;
                if (!task.IsAuthorized)
                {
                    TriggerOnAuthorizationDenied(task);
                    return;
                }
                RunTaskProcess(new Tasks.DownloadResourceUsageRightsTemplate(_db, _sendTimeout, _receiveTimeout,
                                                                             _sendBufferSize, _receiveBufferSize));
            }
            else if (t == typeof(Tasks.DownloadResourceUsageRightsTemplate))
            {
                string                username = _session.User.Username;
                DateTime              creation = DateTime.Now;
                List <Exception>      errors;
                List <Model.Document> docs = new List <Model.Document>();

                Tasks.DownloadResourceUsageRightsTemplate task = (Tasks.DownloadResourceUsageRightsTemplate)sender;

                // Create the Resource and Version objects
                List <Data.VersionId> versions = new List <Data.VersionId>();

                Data.ResourceId resourceId = Data.ResourceId.Create();

                _version = new Data.Version(new Data.VersionId(resourceId), _args.VersionArgs.Metadata, _args.VersionArgs.Content)
                {
                    Md5       = _args.VersionArgs.Md5,
                    Extension = _args.VersionArgs.Extension,
                    Created   = creation,
                    Creator   = username,
                    Modified  = creation,
                    Modifier  = username
                };

                versions.Add(_version.VersionId);

                _resource = new Data.Resource(resourceId, null, versions, _version.VersionId,
                                              _args.Metadata, task.Value.UsageRights)
                {
                    Tags          = _args.Tags,
                    Created       = creation,
                    Creator       = username,
                    Modified      = creation,
                    Modifier      = username,
                    CheckedOutAt  = creation,
                    CheckedOutTo  = username,
                    LastCommit    = creation,
                    LastCommitter = username,
                    Title         = _args.Title
                };

                // Transition to json objects

                Transitions.Resource txResource = new Transitions.Resource();
                docs.Add(txResource.Transition(_resource, out errors));
                if (errors != null)
                {
                    TriggerOnError(null, errors[0].Message, errors[0]);
                    return;
                }
                Transitions.Version txVersion = new Transitions.Version();
                docs.Add(txVersion.Transition(_version, out errors));
                if (errors != null)
                {
                    TriggerOnError(null, errors[0].Message, errors[0]);
                    return;
                }

                RunTaskProcess(new Tasks.MakeBulkDocument(docs, _sendTimeout, _receiveTimeout,
                                                          _sendBufferSize, _receiveBufferSize));
            }
            else if (t == typeof(Tasks.MakeBulkDocument))
            {
                Tasks.MakeBulkDocument task = (Tasks.MakeBulkDocument)sender;
                RunTaskProcess(new Tasks.UploadBulkDocuments(_db, task.BulkDocument, _sendTimeout, _receiveTimeout,
                                                             _sendBufferSize, _receiveBufferSize));
            }
            else if (t == typeof(Tasks.UploadBulkDocuments))
            {
                Tasks.UploadBulkDocuments task = (Tasks.UploadBulkDocuments)sender;

                Commands.PostBulkDocumentsReply.Entry entry = task.FindEntryById(_version.VersionId.ToString());

                if (entry == null)
                {
                    TriggerOnError(task, "Failed to locate " + _version.VersionId.ToString() + " in the " +
                                   "bulk document post results.", null);
                    return;
                }

                // This is needed so that couchdb can apply the content to the correct revision.
                _version.UpdateRevision(entry.Rev);

                // Upload Data.Content from Data.Version
                RunTaskProcess(new Tasks.UploadContent(_db, _version, _sendTimeout, _receiveTimeout,
                                                       _sendBufferSize, _receiveBufferSize));
            }
            else if (t == typeof(Tasks.UploadContent))
            {
                TriggerOnComplete(reply, new Tuple <Data.Resource, Data.Version>(_resource, _version));
            }
            else
            {
                TriggerOnError(sender, reply.ToString(), null);
            }
        }
 public RollbackResource(EngineRequest request, Data.ResourceId resourceId, int rollbackDepth)
     : base(request)
 {
     _resourceId = resourceId;
     _rollbackDepth = rollbackDepth;
 }
 public ResourceRequest(string user, Data.ResourceId id, GlobalPermission globalPermissions, ResourcePermission resourcePermissions)
     : base(user, id.ToString(), globalPermissions, resourcePermissions)
 {
 }
 public ResourceRequest(string user, Data.ResourceId id, GlobalPermissionType global, ResourcePermissionType resource)
     : base(user, id.ToString(), global, resource)
 {
 }
Example #20
0
 public CheckoutCurrentVersion(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
 public CheckoutResource(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
 public virtual void CheckoutResource(EngineRequest request, Data.ResourceId resource)
 {
     throw new NotImplementedException();
 }
 public virtual void RollbackResource(EngineRequest request, Data.ResourceId resource, int rollbackDepth)
 {
     throw new NotImplementedException();
 }
 public ResourceRequest(string user, Data.ResourceId id, Permissions permissions)
     : base(user, id.ToString(), permissions)
 {
 }
Example #25
0
 public DeleteResource(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
 public GetResourceReadOnly(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
Example #27
0
 public static Uri Build(IDatabase db, Data.ResourceId resourceId)
 {
     // http://<host>:<port>/<db>/<resource>
     return(new Uri(db.Uri.ToString() + resourceId.ToString()));
 }
 public CheckoutCurrentVersion(EngineRequest request, Data.ResourceId resourceId)
     : base(request)
 {
     _resourceId = resourceId;
 }
Example #29
0
        public Data.Resource Transition(Model.Document document, out JObject remainder)
        {
            Data.Resource   resource;
            Data.ResourceId id;
            string          rev = null;

            Data.VersionId             currentVersionId;
            List <Data.VersionId>      versionIds  = null;
            List <Security.UsageRight> usageRights = null;

            Security.UsageRight  usageRight = null;
            JObject              jobj       = null;
            JProperty            prop       = null;
            IEnumerator <JToken> en;
            string verifyString;
            JArray jarray = new JArray();

            if (!VerifyDocumentIntegrity(document, out verifyString))
            {
                Logger.Storage.Error("The document is not properly formatted.  It is missing the property '" + verifyString + "'.");
                throw new FormattingException("The argument document does not have the necessary property '" + verifyString + "'.");
            }

            // I ran into a problem here where I was removing the properties from the document and what was left was the remainder.
            // However, this causes an issue when using the transition to make a resource for permissions checking as the
            // object returned to implementing software is the document.  Thus, the implementing software only received those properties
            // not removed... which obviously excludes the most important properties.  To remedy this issue, I created a constructor for
            // Model.Document(Document).  This constructor will format the argument document to a string and then create a JObject from
            // that string.  C# will deep copy the string (not byref) so as to guarantee an independent object.
            remainder = new Model.Document(document);

            try
            {
                id = new Data.ResourceId(document.Id);
                if (document["_rev"] != null)
                {
                    rev = document.Rev;
                    remainder.Remove("_rev");
                }

                remainder.Remove("_id");
                remainder.Remove("$type");

                currentVersionId = new Data.VersionId(document["$currentversionid"].Value <string>());
                remainder.Remove("$currentversionid");

                versionIds = new List <Data.VersionId>();
                jarray     = (JArray)document["$versionids"];

                for (int i = 0; i < jarray.Count; i++)
                {
                    versionIds.Add(new Data.VersionId(jarray[i].Value <string>()));
                }

                remainder.Remove("$versionids");


                usageRights = new List <Security.UsageRight>();
                jarray      = (JArray)document["$usagerights"];

                for (int i = 0; i < jarray.Count; i++)
                {
                    jobj = (JObject)jarray[i];
                    en   = jobj.Children().GetEnumerator();
                    while (en.MoveNext())
                    {
                        prop = (JProperty)en.Current;

                        // Json.Net is giving me some weird errors here when I try to call prop.value<int>();
                        // I cannot figure out why so this code is a temporary work-around, it needs figured out.
                        string a = prop.ToString();
                        a = a.Substring(a.LastIndexOf("\"") + 1); // we know the value is an int, so we can look for the last "
                        a = a.Replace(":", "").Trim();

                        usageRight = new Security.UsageRight(prop.Name, (Security.Authorization.ResourcePermissionType) int.Parse(a));
                        usageRights.Add(usageRight);
                    }
                }

                remainder.Remove("$usagerights");

                resource = new Data.Resource(id, rev, versionIds, currentVersionId, new Data.Metadata(), usageRights);

                // Tags
                resource.Tags = new List <string>();
                jarray        = (JArray)document["$tags"];
                for (int i = 0; i < jarray.Count; i++)
                {
                    resource.Tags.Add(jarray[i].Value <string>());
                }
                remainder.Remove("$tags");

                resource.Created       = document["$created"].Value <DateTime>();
                resource.Creator       = document["$creator"].Value <string>();
                resource.Modified      = document["$modified"].Value <DateTime>();
                resource.Modifier      = document["$modifier"].Value <string>();
                resource.CheckedOutAt  = document["$checkedoutat"].Value <DateTime>();
                resource.CheckedOutTo  = document["$checkedoutto"].Value <string>();
                resource.LastCommit    = document["$lastcommit"].Value <DateTime>();
                resource.LastCommitter = document["$lastcommitter"].Value <string>();
                resource.Title         = document["$title"].Value <string>();

                remainder.Remove("$created");
                remainder.Remove("$creator");
                remainder.Remove("$modified");
                remainder.Remove("$modifier");
                remainder.Remove("$checkedoutat");
                remainder.Remove("$checkedoutto");
                remainder.Remove("$lastcommit");
                remainder.Remove("$lastcommitter");
                remainder.Remove("$title");
            }
            catch (Exception e)
            {
                Logger.Storage.Error("An exception occurred while attempting to parse the document.", e);
                throw;
            }

            return(resource);
        }