diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IFolder.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IFolder.cs
index 1f45f389..6d587fc9 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IFolder.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IFolder.cs
@@ -301,6 +301,36 @@ namespace WebsitePanel.WebDav.Core
XmlCurrentPropNode.NamespaceURI),
XmlCurrentPropNode.InnerXml));
break;
+ //case "lockdiscovery":
+ //{
+ // if (XmlCurrentPropNode.HasChildNodes == false)
+ // {
+ // break;
+ // }
+
+ // foreach (XmlNode activeLockNode in XmlCurrentPropNode.FirstChild)
+ // {
+ // switch (activeLockNode.LocalName)
+ // {
+ // case "owner":
+ // item.SetProperty(
+ // new Property(
+ // new PropertyName("owner",
+ // activeLockNode.NamespaceURI),
+ // activeLockNode.InnerXml));
+ // break;
+ // case "locktoken":
+ // var lockTokenNode = activeLockNode.FirstChild;
+ // item.SetProperty(
+ // new Property(
+ // new PropertyName("locktoken",
+ // lockTokenNode.NamespaceURI),
+ // lockTokenNode.InnerXml));
+ // break;
+ // }
+ // }
+ // break;
+ //}
}
}
break;
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs
index 4470ac67..a4c2fc08 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/IResource.cs
@@ -337,6 +337,69 @@ namespace WebsitePanel.WebDav.Core
}
}
+
+ ///
+ /// Lock this item.
+ ///
+ public string Lock()
+ {
+ var credentials = (NetworkCredential)_credentials;
+ string lockToken = string.Empty;
+
+
+ string lockXml =string.Format( "" +
+ "" +
+ "" +
+ "" +
+ "{0}" +
+ "", WspContext.User.Login);
+
+ string auth = "Basic " +
+ Convert.ToBase64String(
+ Encoding.Default.GetBytes(credentials.UserName + ":" + credentials.Password));
+
+ WebRequest webRequest = WebRequest.Create(Href);
+
+ webRequest.Method = "LOCK";
+ webRequest.Credentials = credentials;
+ webRequest.Headers.Add("Authorization", auth);
+ webRequest.PreAuthenticate = true;
+ webRequest.ContentType = "application/xml";
+
+ // Retrieve the request stream.
+ using (Stream requestStream = webRequest.GetRequestStream())
+ {
+ // Write the lock XML to the destination.
+ requestStream.Write(Encoding.UTF8.GetBytes(lockXml), 0, lockXml.Length);
+ }
+
+ using (WebResponse webResponse = webRequest.GetResponse())
+ {
+ lockToken = webResponse.Headers["Lock-Token"];
+ }
+
+ return lockToken;
+ }
+
+ ///
+ /// Lock this item.
+ ///
+ public void UnLock()
+ {
+ WebRequest webRequest = WebRequest.Create(Href);
+
+ webRequest.Method = "UNLOCK";
+ webRequest.Credentials = _credentials;
+ webRequest.PreAuthenticate = true;
+
+ webRequest.Headers.Add(@"Lock-Token", Properties.First(x => x.Name.Name == "locktoken").StringValue);
+
+ using (WebResponse webResponse = webRequest.GetResponse())
+ {
+ //TODO unlock
+ }
+ }
+
public bool AllowWriteStreamBuffering { get; set; }
public bool SendChunked { get; set; }
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Managers/IWebDavManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Managers/IWebDavManager.cs
index cfa6a8b5..12f99b70 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Managers/IWebDavManager.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Managers/IWebDavManager.cs
@@ -16,5 +16,6 @@ namespace WebsitePanel.WebDav.Core.Interfaces.Managers
IResource GetResource(string path);
string GetFileUrl(string path);
void DeleteResource(string path);
+ void LockFile(string path);
}
}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Owa/IWopiFileManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Owa/IWopiFileManager.cs
index 4dd65f51..54ba88da 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Owa/IWopiFileManager.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Interfaces/Owa/IWopiFileManager.cs
@@ -5,8 +5,8 @@ namespace WebsitePanel.WebDav.Core.Interfaces.Owa
public interface IWopiFileManager
{
CobaltFile Create(int accessTokenId);
- CobaltFile Get(int accessTokenId);
- bool Add(int accessTokenId, CobaltFile file);
- bool Delete(int accessTokenId);
+ CobaltFile Get(string filePath);
+ bool Add(string filePath, CobaltFile file);
+ bool Delete(string filePath);
}
}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs
index 4dca416b..a6699870 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Managers/WebDavManager.cs
@@ -173,6 +173,20 @@ namespace WebsitePanel.WebDav.Core.Managers
resource.Upload(bytes);
}
+ public void LockFile(string path)
+ {
+ var resource = new WebDavResource();
+
+ var fileUrl = new Uri(WebDavAppConfigManager.Instance.WebdavRoot)
+ .Append(WspContext.User.OrganizationId)
+ .Append(path);
+
+ resource.SetHref(fileUrl);
+ resource.SetCredentials(new NetworkCredential(WspContext.User.Login, _cryptography.Decrypt(WspContext.User.EncryptedPassword)));
+
+ resource.Lock();
+ }
+
public void DeleteResource(string path)
{
path = RemoveLeadingFromPath(path, "office365");
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltManager.cs
index 986bb5f0..b33ae340 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltManager.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltManager.cs
@@ -27,7 +27,7 @@ namespace WebsitePanel.WebDav.Core.Owa
var requestBatch = new RequestBatch();
- var cobaltFile = _fileManager.Get(accessTokenId) ?? _fileManager.Create(accessTokenId);
+ var cobaltFile = _fileManager.Get(token.FilePath) ?? _fileManager.Create(accessTokenId);
Object ctx;
ProtocolVersion protocolVersion;
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltFileManager.cs b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltSessionManager.cs
similarity index 80%
rename from WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltFileManager.cs
rename to WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltSessionManager.cs
index e8627682..2684bf83 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltFileManager.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/Owa/CobaltSessionManager.cs
@@ -13,13 +13,13 @@ using WebsitePanel.WebDav.Core.Interfaces.Storages;
namespace WebsitePanel.WebDav.Core.Owa
{
- public class CobaltFileManager : IWopiFileManager
+ public class CobaltSessionManager : IWopiFileManager
{
private readonly IWebDavManager _webDavManager;
private readonly IAccessTokenManager _tokenManager;
private readonly ITtlStorage _storage;
- public CobaltFileManager(IWebDavManager webDavManager, IAccessTokenManager tokenManager, ITtlStorage storage)
+ public CobaltSessionManager(IWebDavManager webDavManager, IAccessTokenManager tokenManager, ITtlStorage storage)
{
_webDavManager = webDavManager;
@@ -80,29 +80,29 @@ namespace WebsitePanel.WebDav.Core.Owa
cobaltFile.GetCobaltFilePartition(FilePartitionId.Content).SetStream(RootId.Default.Value, atom, out o1);
cobaltFile.GetCobaltFilePartition(FilePartitionId.Content).GetStream(RootId.Default.Value).Flush();
- Add(accessTokenId, cobaltFile);
+ Add(token.FilePath, cobaltFile);
return cobaltFile;
}
- public CobaltFile Get(int accessTokenId)
+ public CobaltFile Get(string filePath)
{
- return _storage.Get(GetFileKey(accessTokenId));
+ return _storage.Get(GetSessionKey(filePath));
}
- public bool Add(int accessTokenId, CobaltFile file)
+ public bool Add(string filePath, CobaltFile file)
{
- return _storage.Add(GetFileKey(accessTokenId), file);
+ return _storage.Add(GetSessionKey(filePath), file);
}
- public bool Delete(int accessTokenId)
+ public bool Delete(string filePath)
{
- return _storage.Delete(GetFileKey(accessTokenId));
+ return _storage.Delete(GetSessionKey(filePath));
}
- private string GetFileKey(int accessTokenId)
+ private string GetSessionKey(string filePath)
{
- return string.Format("{0}", accessTokenId);
+ return string.Format("{0}/{1}", WspContext.User.AccountId, filePath);
}
}
}
\ No newline at end of file
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/WebsitePanel.WebDav.Core.csproj b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/WebsitePanel.WebDav.Core.csproj
index 81a0c36c..bf910311 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDav.Core/WebsitePanel.WebDav.Core.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.WebDav.Core/WebsitePanel.WebDav.Core.csproj
@@ -148,7 +148,7 @@
-
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs
index 2642f2f5..6af67e4b 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/AccountController.cs
@@ -59,6 +59,8 @@ namespace WebsitePanel.WebDavPortal.Controllers
{
_authenticationService.LogOut();
+ Session.Clear();
+
return RedirectToRoute(AccountRouteNames.Login);
}
}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/Api/OwaController.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/Api/OwaController.cs
index 79bf0713..a43e95c0 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/Api/OwaController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Controllers/Api/OwaController.cs
@@ -34,7 +34,6 @@ namespace WebsitePanel.WebDavPortal.Controllers.Api
private readonly IAuthenticationService _authenticationService;
private readonly IAccessTokenManager _tokenManager;
private readonly ICryptography _cryptography;
- //private static WopiSession _session;
private readonly ICobaltManager _cobaltManager;
public OwaController(IWopiServer wopiServer, IWebDavManager webDavManager, IAuthenticationService authenticationService, IAccessTokenManager tokenManager, ICryptography cryptography, ICobaltManager cobaltManager)
@@ -105,6 +104,10 @@ namespace WebsitePanel.WebDavPortal.Controllers.Api
[HttpPost]
public HttpResponseMessage Lock(int accessTokenId)
{
+ // var token = _tokenManager.GetToken(accessTokenId);
+
+ //_webDavManager.LockFile(token.FilePath);
+
return new HttpResponseMessage(HttpStatusCode.OK);
}
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/DependencyInjection/PortalDependencies.cs b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/DependencyInjection/PortalDependencies.cs
index 704e5ee2..1e3c37e4 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/DependencyInjection/PortalDependencies.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/DependencyInjection/PortalDependencies.cs
@@ -24,7 +24,7 @@ namespace WebsitePanel.WebDavPortal.DependencyInjection
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
- kernel.Bind().To();
+ kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config
index 4028afc3..ad65ed86 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config
+++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/Web.config
@@ -62,11 +62,11 @@
-
+
-
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj
index 59aa1925..86479359 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj
+++ b/WebsitePanel/Sources/WebsitePanel.WebDavPortal/WebsitePanel.WebDavPortal.csproj
@@ -163,7 +163,6 @@
-