Ejemplo n.º 1
0
        private async Task <WopiResponse> ProcessLockRequestAsync(LockRequest wopiRequest,
                                                                  CancellationToken cancellationToken)
        {
            if (!int.TryParse(wopiRequest.FileId, out var contentId))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;
            if (!(await Node.LoadNodeAsync(contentId, cancellationToken).ConfigureAwait(false) is File file))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;

            var existingLock = SharedLock.GetLock(file.Id, CancellationToken.None);

            if (existingLock == null)
            {
                if (!file.Locked)
                {
                    SharedLock.Lock(file.Id, wopiRequest.Lock, CancellationToken.None);
                    return(new WopiResponse {
                        StatusCode = HttpStatusCode.OK
                    });
                }
                return(new WopiResponse
                {
                    StatusCode = HttpStatusCode.Conflict,
                    Headers = new Dictionary <string, string>
                    {
                        { WopiHeader.Lock, "" },
                        { WopiHeader.LockFailureReason, "CheckedOut" }
                    }
                });
            }
            if (existingLock != wopiRequest.Lock)
            {
                return(new WopiResponse
                {
                    StatusCode = HttpStatusCode.Conflict,
                    Headers = new Dictionary <string, string>
                    {
                        { WopiHeader.Lock, existingLock },
                        { WopiHeader.LockFailureReason, "LockedByAnother" }
                    }
                });
            }
            SharedLock.RefreshLock(contentId, existingLock, CancellationToken.None);
            return(new WopiResponse {
                StatusCode = HttpStatusCode.OK
            });
        }
Ejemplo n.º 2
0
        private WopiResponse ProcessLockRequest(LockRequest wopiReq)
        {
            if (!int.TryParse(wopiReq.FileId, out var contentId))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;
            if (!(Node.LoadNode(contentId) is File file))
            {
                return new WopiResponse {
                           StatusCode = HttpStatusCode.NotFound
                }
            }
            ;

            var existingLock = SharedLock.GetLock(file.Id);

            if (existingLock == null)
            {
                if (!file.Locked)
                {
                    SharedLock.Lock(file.Id, wopiReq.Lock);
                    return(new WopiResponse {
                        StatusCode = HttpStatusCode.OK
                    });
                }
                return(new WopiResponse
                {
                    StatusCode = HttpStatusCode.Conflict,
                    Headers = new Dictionary <string, string>
                    {
                        { WopiHeader.Lock, "" },
                        { WopiHeader.LockFailureReason, "CheckedOut" }
                    }
                });
            }
            if (existingLock != wopiReq.Lock)
            {
                return(new WopiResponse
                {
                    StatusCode = HttpStatusCode.Conflict,
                    Headers = new Dictionary <string, string>
                    {
                        { WopiHeader.Lock, existingLock },
                        { WopiHeader.LockFailureReason, "LockedByAnother" }
                    }
                });
            }
            SharedLock.RefreshLock(contentId, existingLock);
            return(new WopiResponse {
                StatusCode = HttpStatusCode.OK
            });
        }
Ejemplo n.º 3
0
        public void SharedLock_Delete_Locked_Folder()
        {
            var node      = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, lockValue);

            // ACTION
            node.ForceDelete();
        }
Ejemplo n.º 4
0
        public void SharedLock_Lock_CheckedOut()
        {
            var node = CreaeTestContent();
            node.CheckOut();
            var nodeId = node.Id;
            var expectedLockValue = Guid.NewGuid().ToString();
            Assert.IsNull(SharedLock.GetLock(nodeId));

            // ACTION
            SharedLock.Lock(nodeId, expectedLockValue);
        }
Ejemplo n.º 5
0
        public void SharedLock_Lock_Different()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var oldLockValue = Guid.NewGuid().ToString();
            var newLockValue = Guid.NewGuid().ToString();
            SharedLock.Lock(nodeId, oldLockValue);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddMinutes(-10.0d));

            // ACTION
            SharedLock.Lock(nodeId, newLockValue);
        }
Ejemplo n.º 6
0
        public void SharedLock_Checkout()
        {
            //UNDONE: remove this line when SharedLock assert is implemented in the repo
            Assert.Inconclusive();

            var node = CreaeTestContent();
            var nodeId = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();
            SharedLock.Lock(nodeId, lockValue);

            node.CheckOut();
        }
Ejemplo n.º 7
0
        public void SharedLock_Unlock_Different()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var existingLock = "LCK_" + Guid.NewGuid();
            SharedLock.Lock(nodeId, existingLock);

            // ACTION
            var actualLock = SharedLock.Unlock(nodeId, "DifferentLock");

            Assert.AreEqual(existingLock, actualLock);
        }
Ejemplo n.º 8
0
        public void SharedLock_Unlock()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var existingLock = "LCK_" + Guid.NewGuid();
            SharedLock.Lock(nodeId, existingLock);

            // ACTION
            SharedLock.Unlock(nodeId, existingLock);

            Assert.IsNull(SharedLock.GetLock(nodeId));
        }
Ejemplo n.º 9
0
        public void SharedLock_RefreshLock_TimedOut()
        {
            var node      = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = Guid.NewGuid().ToString();

            SharedLock.Lock(nodeId, lockValue);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddHours(-1.0d));

            // ACTION
            SharedLock.RefreshLock(nodeId, lockValue);
        }
Ejemplo n.º 10
0
        public void SharedLock_Rename_Locked_Folder()
        {
            var node      = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, lockValue);

            // ACTION
            node.Name = Guid.NewGuid().ToString();
            node.Save();
        }
Ejemplo n.º 11
0
        public void SharedLock_RefreshLock_Different()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();
            SharedLock.Lock(nodeId, lockValue);

            // ACTION
            var actualLock = SharedLock.RefreshLock(nodeId, "DifferentLock");

            Assert.AreEqual(lockValue, actualLock);
        }
Ejemplo n.º 12
0
        public void SharedLock_Move_Locked_Folder()
        {
            var node      = CreateTestFolder();
            var target    = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, lockValue);

            // ACTION
            node.MoveTo(target);
        }
Ejemplo n.º 13
0
        public void SharedLock_Unlock_TimedOut()
        {
            var node         = CreateTestFolder();
            var nodeId       = node.Id;
            var existingLock = Guid.NewGuid().ToString();

            SharedLock.Lock(nodeId, existingLock);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddHours(-1.0d));

            // ACTION
            SharedLock.Unlock(nodeId, existingLock);
        }
Ejemplo n.º 14
0
        public void SharedLock_Lock_CheckedOut()
        {
            var node = CreateTestFolder();

            node.CheckOut();
            var nodeId            = node.Id;
            var expectedLockValue = Guid.NewGuid().ToString();

            Assert.IsNull(SharedLock.GetLock(nodeId, CancellationToken.None));

            // ACTION
            SharedLock.Lock(nodeId, expectedLockValue, CancellationToken.None);
        }
Ejemplo n.º 15
0
        public void SharedLock_Unlock_Different()
        {
            var node         = CreateTestFolder();
            var nodeId       = node.Id;
            var existingLock = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, existingLock, CancellationToken.None);

            // ACTION
            var actualLock = SharedLock.Unlock(nodeId, "DifferentLock", CancellationToken.None);

            Assert.AreEqual(existingLock, actualLock);
        }
Ejemplo n.º 16
0
        public void SharedLock_Unlock()
        {
            var node         = CreateTestFolder();
            var nodeId       = node.Id;
            var existingLock = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, existingLock, CancellationToken.None);

            // ACTION
            SharedLock.Unlock(nodeId, existingLock, CancellationToken.None);

            Assert.IsNull(SharedLock.GetLock(nodeId, CancellationToken.None));
        }
Ejemplo n.º 17
0
        public void SharedLock_RefreshLock_Different()
        {
            var node      = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, lockValue, CancellationToken.None);

            // ACTION
            var actualLock = SharedLock.RefreshLock(nodeId, "DifferentLock", CancellationToken.None);

            Assert.AreEqual(lockValue, actualLock);
        }
Ejemplo n.º 18
0
        public void SharedLock_LockAndGetLock()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var expectedLockValue = Guid.NewGuid().ToString();
            Assert.IsNull(SharedLock.GetLock(nodeId));

            // ACTION
            SharedLock.Lock(nodeId, expectedLockValue);

            var actualLockValue = SharedLock.GetLock(nodeId);
            Assert.AreEqual(expectedLockValue, actualLockValue);
        }
Ejemplo n.º 19
0
        public void SharedLock_Lock_Same()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var expectedLockValue = Guid.NewGuid().ToString();
            SharedLock.Lock(nodeId, expectedLockValue);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddMinutes(-10.0d));

            // ACTION
            SharedLock.Lock(nodeId, expectedLockValue);

            Assert.IsTrue((DateTime.UtcNow - GetSharedLockCreationDate(nodeId)).TotalSeconds < 1);
        }
Ejemplo n.º 20
0
        public void SharedLock_RefreshLock()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();
            SharedLock.Lock(nodeId, lockValue);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddMinutes(-10.0d));

            // ACTION
            SharedLock.RefreshLock(nodeId, lockValue);

            Assert.IsTrue((DateTime.UtcNow - GetSharedLockCreationDate(nodeId)).TotalSeconds < 1);
        }
Ejemplo n.º 21
0
        public void SharedLock_Checkout_Locked_Folder()
        {
            var node      = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = "LCK_" + Guid.NewGuid();

            SharedLock.Lock(nodeId, lockValue);

            node.CheckOut();

            Assert.IsTrue(node.Locked);
            Assert.AreEqual(lockValue, SharedLock.GetLock(nodeId));
        }
Ejemplo n.º 22
0
        public void SharedLock_LockAndGetLock()
        {
            var node              = CreateTestFolder();
            var nodeId            = node.Id;
            var expectedLockValue = Guid.NewGuid().ToString();

            Assert.IsNull(SharedLock.GetLock(nodeId, CancellationToken.None));

            // ACTION
            SharedLock.Lock(nodeId, expectedLockValue, CancellationToken.None);

            var actualLockValue = SharedLock.GetLock(nodeId, CancellationToken.None);

            Assert.AreEqual(expectedLockValue, actualLockValue);
        }
Ejemplo n.º 23
0
        public void SharedLock_Lock_DifferentTimedOut()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var oldLockValue = Guid.NewGuid().ToString();
            var newLockValue = Guid.NewGuid().ToString();
            SharedLock.Lock(nodeId, oldLockValue);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddHours(-1.0d));

            // ACTION
            SharedLock.Lock(nodeId, newLockValue);

            var actualLockValue = SharedLock.GetLock(nodeId);
            Assert.AreEqual(newLockValue, actualLockValue);
        }
Ejemplo n.º 24
0
        public void SharedLock_ModifyLock()
        {
            var node = CreaeTestContent();
            var nodeId = node.Id;
            var oldLockValue = Guid.NewGuid().ToString();
            var newLockValue = Guid.NewGuid().ToString();
            Assert.IsNull(SharedLock.GetLock(nodeId));
            SharedLock.Lock(nodeId, oldLockValue);
            Assert.AreEqual(oldLockValue, SharedLock.GetLock(nodeId));

            // ACTION
            SharedLock.ModifyLock(nodeId, oldLockValue, newLockValue);

            Assert.AreEqual(newLockValue, SharedLock.GetLock(nodeId));
        }
Ejemplo n.º 25
0
        public void SharedLock_ModifyLock_TimedOut()
        {
            var node   = CreateTestFolder();
            var nodeId = node.Id;

            Assert.IsNull(SharedLock.GetLock(nodeId));
            var oldLockValue = Guid.NewGuid().ToString();
            var newLockValue = Guid.NewGuid().ToString();

            SharedLock.Lock(nodeId, oldLockValue);
            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddHours(-1.0d));

            // ACTION
            SharedLock.ModifyLock(nodeId, oldLockValue, newLockValue);
        }
Ejemplo n.º 26
0
        public void SharedLock_GetTimedOut()
        {
            var node      = CreateTestFolder();
            var nodeId    = node.Id;
            var lockValue = Guid.NewGuid().ToString();

            Assert.IsNull(SharedLock.GetLock(nodeId));
            SharedLock.Lock(nodeId, lockValue);

            // ACTION
            var timeout = DataProvider.GetExtension <ISharedLockDataProviderExtension>().SharedLockTimeout;

            SetSharedLockCreationDate(nodeId, DateTime.UtcNow.AddMinutes(-timeout.TotalMinutes - 1));

            Assert.IsNull(SharedLock.GetLock(nodeId));
        }
Ejemplo n.º 27
0
        public void SharedLock_ModifyLock()
        {
            var node         = CreateTestFolder();
            var nodeId       = node.Id;
            var oldLockValue = Guid.NewGuid().ToString();
            var newLockValue = Guid.NewGuid().ToString();

            Assert.IsNull(SharedLock.GetLock(nodeId, CancellationToken.None));
            SharedLock.Lock(nodeId, oldLockValue, CancellationToken.None);
            Assert.AreEqual(oldLockValue, SharedLock.GetLock(nodeId, CancellationToken.None));

            // ACTION
            SharedLock.ModifyLock(nodeId, oldLockValue, newLockValue, CancellationToken.None);

            Assert.AreEqual(newLockValue, SharedLock.GetLock(nodeId, CancellationToken.None));
        }
Ejemplo n.º 28
0
        public void SharedLock_ModifyLockDifferent()
        {
            var node         = CreateTestFolder();
            var nodeId       = node.Id;
            var oldLockValue = Guid.NewGuid().ToString();
            var newLockValue = Guid.NewGuid().ToString();

            Assert.IsNull(SharedLock.GetLock(nodeId));
            SharedLock.Lock(nodeId, oldLockValue);
            Assert.AreEqual(oldLockValue, SharedLock.GetLock(nodeId));

            // ACTION
            var actualLock = SharedLock.ModifyLock(nodeId, "DifferentLock", newLockValue);

            Assert.AreEqual(oldLockValue, actualLock);
        }
Ejemplo n.º 29
0
 public OperationContext Lock(string lockValue)
 {
     SharedLock.Lock(LoadTestFile().Id, lockValue);
     return(this);
 }
Ejemplo n.º 30
0
 public void SharedLock_Lock_MissingContent()
 {
     SharedLock.Lock(0, "LCK_0");
 }