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 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 GetResourceReadOnly(EngineRequest request, Data.ResourceId resourceId) : base(request) { _resourceId = resourceId; }
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; }
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 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) { }
public CheckoutCurrentVersion(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) { }
public static Uri Build(IDatabase db, Data.ResourceId resourceId) { // http://<host>:<port>/<db>/<resource> return(new Uri(db.Uri.ToString() + resourceId.ToString())); }
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); }