/// <summary> /// Gets a <see cref="LockToken"/> from a <see cref="WebDavResponseMessage"/>. /// </summary> /// <param name="responseMessage">The <see cref="WebDavResponseMessage"/> whose <see cref="LockToken"/> should be retrieved.</param> /// <returns>The <see cref="LockToken"/> of the <see cref="WebDavResponseMessage"/> or null if the WebDavResponseMessage does not contain a lock token.</returns> public static async Task <LockToken> GetLockTokenFromWebDavResponseMessage(WebDavResponseMessage responseMessage) { // Try to get lock token from response header. if (responseMessage.Headers.TryGetValues(WebDavRequestHeader.LockToken, out IEnumerable <string> lockTokenHeaderValues)) { // We assume only one Lock-Token header is sent, based on the spec: https://tools.ietf.org/html/rfc4918#section-9.10.1 var lockTokenHeaderValue = lockTokenHeaderValues.FirstOrDefault(); // Make sure the lockTokenHeaderValue is valid according to spec (https://tools.ietf.org/html/rfc4918#section-10.5). if (lockTokenHeaderValue != null && CodedUrl.TryParse(lockTokenHeaderValue, out var codedUrl)) { return(new LockToken(codedUrl.AbsoluteUri)); } } // If lock token was not submitted by response header, it should be found in the response content. try { var prop = await WebDavResponseContentParser.ParsePropResponseContentAsync(responseMessage.Content); var href = prop.LockDiscovery.ActiveLock[0].LockToken.Href; if (AbsoluteUri.TryParse(href, out var absoluteUri)) { return(new LockToken(absoluteUri)); } } catch (Exception) { return(null); } return(null); }
public async Task AddLockToRootAndTryRefreshTest() { var lockResponse = await Client.LockAsync( "/", WebDavTimeoutHeaderValue.CreateInfiniteWebDavTimeout(), WebDavDepthHeaderValue.Infinity, new LockInfo() { LockScope = LockScope.CreateExclusiveLockScope(), LockType = LockType.CreateWriteLockType(), }) ; lockResponse.EnsureSuccessStatusCode(); var prop = await WebDavResponseContentParser.ParsePropResponseContentAsync(lockResponse.Content); var lockToken = prop.LockDiscovery.ActiveLock.Single().LockToken; Assert.True(AbsoluteUri.TryParse(lockToken.Href, out var lockTokenUri)); var refreshResponse = await Client.RefreshLockAsync( "/", WebDavTimeoutHeaderValue.CreateInfiniteWebDavTimeout(), new LockToken(lockTokenUri)); refreshResponse.EnsureSuccessStatusCode(); var refreshProp = await WebDavResponseContentParser.ParsePropResponseContentAsync(refreshResponse.Content); Assert.NotNull(refreshProp.LockDiscovery); }
public void UT_AbsoluteUri_TryParse_FromAbsoluteUrl() { var url = "http://127.0.0.1/"; var isParsed = AbsoluteUri.TryParse(url, out var absoluteUri); Assert.IsTrue(isParsed); Assert.AreEqual(url, absoluteUri.ToString()); }
public void UT_AbsoluteUri_TryParse_FromRelativeUrl() { var url = "/test"; var isParsed = AbsoluteUri.TryParse(url, out var absoluteUri); Assert.IsFalse(isParsed); Assert.IsNull(absoluteUri); }
public void UT_AbsoluteUri_ToString_WithDecodedSegment() { var input = "opaquelocktoken:dccce564-412e-11e1-b969-00059a3c7a00:%2fFolder Test%2fFile.xml"; var isParsed = AbsoluteUri.TryParse(input, out AbsoluteUri uri); var actual = uri.ToString(); Assert.IsTrue(isParsed); Assert.AreEqual(input, actual); }
public void UT_LockToken_LockTokenHeaderFormat_LockTokenHeaderWithoutBrackets() { var parseResult = AbsoluteUri.TryParse("urn:uuid:my-lock-token", out var parsedUri); var lockToken = new LockToken(parsedUri); var absoluteUri = lockToken.AbsoluteUri; var lockTokenHeaderFormat = lockToken.LockTokenHeaderFormat; var noTagList = lockToken.IfHeaderNoTagListFormat; Assert.AreEqual("urn:uuid:my-lock-token", absoluteUri.ToString()); Assert.AreEqual("<urn:uuid:my-lock-token>", lockTokenHeaderFormat.ToString()); Assert.AreEqual("(<urn:uuid:my-lock-token>)", noTagList.ToString()); Assert.IsTrue(parseResult); }
public async Task AddLockToRootAndTryRefreshWrongLockTest() { var lockResponse = await Client.LockAsync( "/", WebDavTimeoutHeaderValue.CreateInfiniteWebDavTimeout(), WebDavDepthHeaderValue.Infinity, new LockInfo() { LockScope = LockScope.CreateExclusiveLockScope(), LockType = LockType.CreateWriteLockType(), }) ; lockResponse.EnsureSuccessStatusCode(); Assert.True(AbsoluteUri.TryParse("urn:asasdasd", out var lockTokenUri)); var refreshResult = await Client.RefreshLockAsync( "/", WebDavTimeoutHeaderValue.CreateInfiniteWebDavTimeout(), new LockToken(lockTokenUri)); Assert.Equal(WebDavStatusCode.PreconditionFailed, refreshResult.StatusCode); }