public bool DeleteUserFavorite(string favoriteGUID) { Guid g; if (!Guid.TryParse(favoriteGUID, out g)) { return(false); } return(ApiOperation <bool>(delegate(User user, Storage storage) { #if RELEASE if (user == null) { return false; } #endif Guid userId = user == null || user.Id == null ? Guid.Empty : user.Id; var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId); if (Cache.Contains(cacheKey)) { Cache.Remove(cacheKey); } return storage.DeleteTriplet( TripleName.Parse(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty)), TripleName.Parse("czpred:favorite"), TripleName.Parse(String.Format("cztimeline:{0}", favoriteGUID))); })); }
public bool PutUserFeatured(string featuredGUID) { Guid g; if (!Guid.TryParse(featuredGUID, out g)) { return(false); } return(ApiOperation <bool>(delegate(User user, Storage storage) { if (user == null) { return false; } var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFeatured - {0}", user.Id); if (Cache.Contains(cacheKey)) { Cache.Remove(cacheKey); } return storage.PutTriplet( TripleName.Parse(String.Format("czusr:{0}", user.Id)), TripleName.Parse("czpred:featured"), TripleName.Parse(String.Format("cztimeline:{0}", featuredGUID))); })); }
public void GetSubjectOwnerForUserTest() { var user = Storage.Users.First(); Assert.AreEqual( user.Id.ToString(), Storage.GetSubjectOwner(TripleName.Parse(String.Format("czusr:{0}", user.Id)))); }
public Collection <TimelineShortcut> GetUserFeatured(string guid) { return(ApiOperation <Collection <TimelineShortcut> >(delegate(User user, Storage storage) { Guid userGuid; // If GUID is not given then get supervisor's GUID. Otherwise parse the given GUID. if (guid.Equals("default")) { string aps = ConfigurationManager.AppSettings["FeaturedTimelinesSupervisorGuid"]; userGuid = String.IsNullOrEmpty(aps) ? Guid.Empty : Guid.Parse(aps); } else if (!Guid.TryParse(guid, out userGuid)) { return null; } var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFeatured - {0}", userGuid); if (Cache.Contains(cacheKey)) { return (Collection <TimelineShortcut>)Cache.Get(cacheKey); } var triple = storage.GetTriplet(String.Format("czusr:{0}", userGuid), "czpred:featured").FirstOrDefault(); if (triple == null) { return null; } var elements = new Collection <TimelineShortcut>(); foreach (var t in triple.Objects) { var objName = TripleName.Parse(t.Object); if (objName.Prefix == "cztimeline") { var g = new Guid(objName.Name); var timeline = storage.Timelines.Where(x => x.Id == g) .Include("Collection") .Include("Collection.User") .Include("Collection.SuperCollection") .Include("Exhibits") .Include("Exhibits.ContentItems") .FirstOrDefault(); if (timeline != null) { elements.Add(storage.GetTimelineShortcut(timeline)); } } } Cache.Add(cacheKey, elements); return elements; })); }
public Collection <TimelineShortcut> GetUserFavorites() { return(ApiOperation <Collection <TimelineShortcut> >(delegate(User user, Storage storage) { #if RELEASE if (user == null) { return null; } #endif Guid userId = user == null || user.Id == null ? Guid.Empty : user.Id; var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId); if (Cache.Contains(cacheKey)) { return (Collection <TimelineShortcut>)Cache.Get(cacheKey); } var triple = storage.GetTriplet(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty), "czpred:favorite").FirstOrDefault(); if (triple == null) { return null; } var elements = new Collection <TimelineShortcut>(); foreach (var t in triple.Objects) { var objName = TripleName.Parse(t.Object); if (objName.Prefix == "cztimeline") { var g = new Guid(objName.Name); var timeline = storage.Timelines.Where(x => x.Id == g) .Include("Collection") .Include("Collection.User") .Include("Collection.SuperCollection") .Include("Exhibits") .Include("Exhibits.ContentItems") .FirstOrDefault(); if (timeline != null) { elements.Add(storage.GetTimelineShortcut(timeline)); } } } Cache.Add(cacheKey, elements); return elements; })); }
public void GetSubjectOwnerForTourTest() { var tour = Storage.Tours.First(); Storage.Entry(tour).Reference(t => t.Collection).Load(); var collection = tour.Collection; Storage.Entry(collection).Reference(c => c.User).Load(); var user = collection.User; Assert.AreEqual( user.Id.ToString(), Storage.GetSubjectOwner(TripleName.Parse(String.Format("cztour:{0}", tour.Id)))); }
public void GetSubjectOwnerForExhibitTest() { var exhibit = Storage.Exhibits.First(); Storage.Entry(exhibit).Reference(e => e.Collection).Load(); var collection = exhibit.Collection; Storage.Entry(collection).Reference(c => c.User).Load(); var user = collection.User; Assert.AreEqual( user.Id.ToString(), Storage.GetSubjectOwner(TripleName.Parse(String.Format("czexhibit:{0}", exhibit.Id)))); }
public void GetSubjectOwnerForArtifactTest() { var artifact = Storage.ContentItems.First(); Storage.Entry(artifact).Reference(a => a.Collection).Load(); var collection = artifact.Collection; Storage.Entry(collection).Reference(c => c.User).Load(); var user = collection.User; Assert.AreEqual( user.Id.ToString(), Storage.GetSubjectOwner(TripleName.Parse(String.Format("czartifact:{0}", artifact.Id)))); }
public void PutTriplet(SingleTriple triple) { try { var subjectName = TripleName.Parse(triple.Subject); var predicateName = TripleName.Parse(triple.Predicate); var objectName = TripleName.Parse(triple.Object); #if RELEASE ApiOperation(delegate(User user, Storage storage) { if (user == null) { SetStatusCode(HttpStatusCode.Unauthorized, "Anonymous users cannot modify triple"); } else { objectName = storage.EnsurePrefix(objectName); if (objectName.Prefix == "_") { var tripleOwner = storage.GetSubjectOwner(objectName); if (tripleOwner != null && tripleOwner != user.Id.ToString()) SetStatusCode(HttpStatusCode.BadRequest, "Object bNode belongs to another user"); } if (storage.GetSubjectOwner(subjectName) == user.Id.ToString()) { #else using(var storage = new Storage()) #endif { SetStatusCode(storage.PutTriplet(subjectName, predicateName, objectName) ? HttpStatusCode.OK : HttpStatusCode.NotModified, ""); } #if RELEASE } else { SetStatusCode(HttpStatusCode.Unauthorized, "Only subject owners can modify triple"); } } }); #endif } catch (ArgumentException exc) { SetStatusCode(HttpStatusCode.BadRequest, exc.Message); } }
public void GetSubjectOwnerForBNodeTest() { var timeline = Storage.Timelines.First(); Storage.Entry(timeline).Reference(t => t.Collection).Load(); var collection = timeline.Collection; Storage.Entry(collection).Reference(c => c.User).Load(); var user = collection.User; var bNodeId = Guid.NewGuid(); var bNodeName = TripleName.Parse(String.Format("_:{0}", bNodeId)); Storage.PutTriplet( TripleName.Parse(String.Format("cztimeline:{0}", timeline.Id)), TripleName.Parse("czpred:connect"), bNodeName); Assert.AreEqual( user.Id.ToString(), Storage.GetSubjectOwner(bNodeName)); }
public void TripletShouldBeCreatedIfDataPositive() { var timelineId = new Guid("2b6cd8e0-5833-ceaf-117e-cf74db7fed1f"); const string userId = "ff5214e1-1bf4-4af5-8835-96cff2ce2cfd"; string subjectStr = String.Format("czusr:{0}", userId); string objectStr = String.Format("cztimeline:{0}", timelineId); const string predicateStr = "czpred:favorite"; bool result = Storage.PutTriplet(TripleName.Parse(subjectStr), TripleName.Parse(predicateStr), TripleName.Parse(objectStr)); Assert.IsTrue(result, "Triplet has not created"); List <Triple> triples = Storage.GetTriplet(subjectStr, predicateStr); bool tr = false; foreach (Triple triple in triples) { tr = triple.Objects.Any(t => t.Object == objectStr); } Assert.IsTrue(tr); }
public void TripletShouldBeAddedTwoObject() { var timelineId = Guid.NewGuid(); var secondTimelineId = Guid.NewGuid(); const string userId = "ff5214e1-1bf4-4af5-8835-96cff2ce2cfd"; string subjectStr = String.Format("czusr:{0}", userId); string objectStr = String.Format("cztimeline:{0}", timelineId); string objectStr2 = String.Format("cztimeline:{0}", secondTimelineId); const string predicateStr = "czpred:favorite"; bool result = Storage.PutTriplet(TripleName.Parse(subjectStr), TripleName.Parse(predicateStr), TripleName.Parse(objectStr)); Assert.IsTrue(result, "Triplet has not created"); List <Triple> triples = Storage.GetTriplet(subjectStr, predicateStr); bool tr = false; foreach (Triple triple in triples) { tr = triple.Objects.Any(t => t.Object == objectStr); } Assert.IsTrue(tr); bool result2 = Storage.PutTriplet(TripleName.Parse(subjectStr), TripleName.Parse(predicateStr), TripleName.Parse(objectStr2)); Assert.IsTrue(result2, "Triplet has not created"); List <Triple> triples2 = Storage.GetTriplet(subjectStr, predicateStr); bool tr2 = false; foreach (Triple triple in triples2) { tr2 = triple.Objects.Any(t => t.Object == objectStr); } Assert.IsTrue(tr2); }
public void DeleteTriplet(SingleTriple triple) { try { var subjectName = TripleName.Parse(triple.Subject); var predicateName = TripleName.Parse(triple.Predicate); var objectName = TripleName.Parse(triple.Object); #if RELEASE // Authenticate only in RELEASE mode ApiOperation(delegate(User user, Storage storage) { if (user == null) { SetStatusCode(HttpStatusCode.Unauthorized, "Anonymous users cannot delete triple"); } else { if(storage.GetSubjectOwner(TripleName.Parse(triple.Subject)) == user.Id.ToString()) { #else using(var storage = new Storage()) #endif SetStatusCode(storage.DeleteTriplet(subjectName, predicateName, objectName) ? HttpStatusCode.OK : HttpStatusCode.NotModified, ""); #if RELEASE } else { SetStatusCode(HttpStatusCode.Unauthorized, "Only subject owners can delete triple"); } } }); #endif } catch (ArgumentException exc) { SetStatusCode(HttpStatusCode.BadRequest, exc.Message); } }
public void TripletNameShouldNotBeParsedIfTimelineIdIsNotGuid() { TripleName.Parse("cztimeline:not-guid"); }
public void TripletNameShouldNotBeParsedIfUserIdIsNotGuid() { TripleName.Parse("czusr:not-guid"); }
public IEnumerable <Tile> GetUserFavorites(string currentSuperCollection = "", string currentCollection = "") { currentCollection = currentCollection == null ? "" : currentCollection.ToLower(); currentSuperCollection = currentSuperCollection == null ? "" : currentSuperCollection.ToLower(); string defaultSuperCollection = (ConfigurationManager.AppSettings["DefaultSuperCollection"]).ToLower(); List <Tile> tiles = new List <Tile>(); return(ApiOperation(delegate(User user, Storage storage) { // TODO: Ensure following line is commented out prior to check-in. Overrides user so can test other people's favorites. // user = storage.Users.Where(u => u.DisplayName == "putnamehere").FirstOrDefault(); #if RELEASE if (user == null) { return tiles; } #endif Guid userId = (user == null || user.Id == null) ? Guid.Empty : user.Id; var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId); if (Cache.Contains(cacheKey)) { return (List <Tile>)Cache.Get(cacheKey); } var triple = storage.GetTriplet(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty), "czpred:favorite").FirstOrDefault(); if (triple == null) { return tiles; } foreach (var t in triple.Objects) { var objName = TripleName.Parse(t.Object); if (objName.Prefix == "cztimeline") { Timeline timeline = storage.Timelines .Where(item => item.Id == new Guid(objName.Name)) .Include("Collection.User") .Include("Collection.SuperCollection") .FirstOrDefault(); if (timeline != null) { List <Guid> ancestorTimelines = TimelineExtensions.Ancestors(timeline); ancestorTimelines.Reverse(); tiles.Add(new Tile { CollectionName = timeline.Collection.Title, CuratorName = timeline.Collection.User.DisplayName, Link = GetURLPath(timeline.Collection, defaultSuperCollection) + "#" + "/t" + string.Join("/t", ancestorTimelines.ToArray()), Type = "t", Title = timeline.Title, CustomBackground = GetTileBackgroundImage(timeline.Collection.Theme), IsCosmosCollection = (timeline.Collection.SuperCollection.Title.ToLower() == "chronozoom" && timeline.Collection.Path == "cosmos"), IsCurrentCollection = ( ( timeline.Collection.SuperCollection.Title == currentSuperCollection || ((currentSuperCollection == "") && (timeline.Collection.SuperCollection.Title == defaultSuperCollection)) ) && ( timeline.Collection.Path == currentCollection || ((currentCollection == "") && timeline.Collection.Default) ) ) }); } } } tiles = tiles.OrderBy(t => t.CollectionName).ThenBy(t => t.Title).ToList(); Cache.Add(cacheKey, tiles); return tiles; })); }