webdav portal owa edit fixes

This commit is contained in:
vfedosevich 2015-02-02 03:41:44 -08:00
parent aedc7ec08e
commit 9edf1f8d93
13 changed files with 133 additions and 21 deletions

View file

@ -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;

View file

@ -337,6 +337,69 @@ namespace WebsitePanel.WebDav.Core
}
}
/// <summary>
/// Lock this item.
/// </summary>
public string Lock()
{
var credentials = (NetworkCredential)_credentials;
string lockToken = string.Empty;
string lockXml =string.Format( "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
"<D:lockinfo xmlns:D='DAV:'>" +
"<D:lockscope><D:exclusive/></D:lockscope>" +
"<D:locktype><D:write/></D:locktype>" +
"<D:owner>{0}</D:owner>" +
"</D:lockinfo>", 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;
}
/// <summary>
/// Lock this item.
/// </summary>
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; }

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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");

View file

@ -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;

View file

@ -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<CobaltFile>(GetFileKey(accessTokenId));
return _storage.Get<CobaltFile>(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);
}
}
}

View file

@ -148,7 +148,7 @@
<Compile Include="ItemType.cs" />
<Compile Include="LockUriTokenPair.cs" />
<Compile Include="Managers\WebDavManager.cs" />
<Compile Include="Owa\CobaltFileManager.cs" />
<Compile Include="Owa\CobaltSessionManager.cs" />
<Compile Include="Owa\CobaltHostLockingStore.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Property.cs" />

View file

@ -59,6 +59,8 @@ namespace WebsitePanel.WebDavPortal.Controllers
{
_authenticationService.LogOut();
Session.Clear();
return RedirectToRoute(AccountRouteNames.Login);
}
}

View file

@ -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);
}

View file

@ -24,7 +24,7 @@ namespace WebsitePanel.WebDavPortal.DependencyInjection
kernel.Bind<IWebDavManager>().To<WebDavManager>();
kernel.Bind<IAccessTokenManager>().To<AccessTokenManager>();
kernel.Bind<IWopiServer>().To<WopiServer>();
kernel.Bind<IWopiFileManager>().To<CobaltFileManager>();
kernel.Bind<IWopiFileManager>().To<CobaltSessionManager>();
kernel.Bind<IWebDavAuthorizationService>().To<WebDavAuthorizationService>();
kernel.Bind<ICobaltManager>().To<CobaltManager>();
kernel.Bind<ITtlStorage>().To<CacheTtlStorage>();

View file

@ -62,11 +62,11 @@
<add extension=".png" path="~/Content/Images/png-icon.png" />
</fileIcons>
<officeOnline isEnabled="True" url="https://vir-owa.virtuworks.net" cobaltFileTtl="30">
<add extension=".doc" OwaView="wv/wordviewerframe.aspx?" OwaEditor="we/wordeditorframe.aspx?" />
<add extension=".doc" OwaView="wv/wordviewerframe.aspx?" OwaEditor="wv/wordviewerframe.aspx?" />
<add extension=".docx" OwaView="wv/wordviewerframe.aspx?" OwaEditor="we/wordeditorframe.aspx?" />
<add extension=".xls" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&amp;" />
<add extension=".xlsx" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&amp;" />
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&amp;" />
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?" />
<add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&amp;" />
</officeOnline>
</webDavExplorerConfigurationSettings>

View file

@ -163,7 +163,6 @@
<Compile Include="Controllers\ErrorController.cs" />
<Compile Include="Controllers\FileSystemController.cs" />
<Compile Include="Controllers\Api\OwaController.cs" />
<Compile Include="Controllers\WopiSession.cs" />
<Compile Include="CustomAttributes\FormValueRequiredAttribute.cs" />
<Compile Include="CustomAttributes\LdapAuthorizationAttribute.cs" />
<Compile Include="DependencyInjection\NinjectDependecyResolver.cs" />