webdav portal owa edit fixes
This commit is contained in:
parent
aedc7ec08e
commit
9edf1f8d93
13 changed files with 133 additions and 21 deletions
|
@ -301,6 +301,36 @@ namespace WebsitePanel.WebDav.Core
|
||||||
XmlCurrentPropNode.NamespaceURI),
|
XmlCurrentPropNode.NamespaceURI),
|
||||||
XmlCurrentPropNode.InnerXml));
|
XmlCurrentPropNode.InnerXml));
|
||||||
break;
|
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;
|
break;
|
||||||
|
|
|
@ -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 AllowWriteStreamBuffering { get; set; }
|
||||||
public bool SendChunked { get; set; }
|
public bool SendChunked { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -16,5 +16,6 @@ namespace WebsitePanel.WebDav.Core.Interfaces.Managers
|
||||||
IResource GetResource(string path);
|
IResource GetResource(string path);
|
||||||
string GetFileUrl(string path);
|
string GetFileUrl(string path);
|
||||||
void DeleteResource(string path);
|
void DeleteResource(string path);
|
||||||
|
void LockFile(string path);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -5,8 +5,8 @@ namespace WebsitePanel.WebDav.Core.Interfaces.Owa
|
||||||
public interface IWopiFileManager
|
public interface IWopiFileManager
|
||||||
{
|
{
|
||||||
CobaltFile Create(int accessTokenId);
|
CobaltFile Create(int accessTokenId);
|
||||||
CobaltFile Get(int accessTokenId);
|
CobaltFile Get(string filePath);
|
||||||
bool Add(int accessTokenId, CobaltFile file);
|
bool Add(string filePath, CobaltFile file);
|
||||||
bool Delete(int accessTokenId);
|
bool Delete(string filePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -173,6 +173,20 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
resource.Upload(bytes);
|
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)
|
public void DeleteResource(string path)
|
||||||
{
|
{
|
||||||
path = RemoveLeadingFromPath(path, "office365");
|
path = RemoveLeadingFromPath(path, "office365");
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace WebsitePanel.WebDav.Core.Owa
|
||||||
|
|
||||||
var requestBatch = new RequestBatch();
|
var requestBatch = new RequestBatch();
|
||||||
|
|
||||||
var cobaltFile = _fileManager.Get(accessTokenId) ?? _fileManager.Create(accessTokenId);
|
var cobaltFile = _fileManager.Get(token.FilePath) ?? _fileManager.Create(accessTokenId);
|
||||||
|
|
||||||
Object ctx;
|
Object ctx;
|
||||||
ProtocolVersion protocolVersion;
|
ProtocolVersion protocolVersion;
|
||||||
|
|
|
@ -13,13 +13,13 @@ using WebsitePanel.WebDav.Core.Interfaces.Storages;
|
||||||
|
|
||||||
namespace WebsitePanel.WebDav.Core.Owa
|
namespace WebsitePanel.WebDav.Core.Owa
|
||||||
{
|
{
|
||||||
public class CobaltFileManager : IWopiFileManager
|
public class CobaltSessionManager : IWopiFileManager
|
||||||
{
|
{
|
||||||
private readonly IWebDavManager _webDavManager;
|
private readonly IWebDavManager _webDavManager;
|
||||||
private readonly IAccessTokenManager _tokenManager;
|
private readonly IAccessTokenManager _tokenManager;
|
||||||
private readonly ITtlStorage _storage;
|
private readonly ITtlStorage _storage;
|
||||||
|
|
||||||
public CobaltFileManager(IWebDavManager webDavManager, IAccessTokenManager tokenManager, ITtlStorage storage)
|
public CobaltSessionManager(IWebDavManager webDavManager, IAccessTokenManager tokenManager, ITtlStorage storage)
|
||||||
{
|
{
|
||||||
_webDavManager = webDavManager;
|
_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).SetStream(RootId.Default.Value, atom, out o1);
|
||||||
cobaltFile.GetCobaltFilePartition(FilePartitionId.Content).GetStream(RootId.Default.Value).Flush();
|
cobaltFile.GetCobaltFilePartition(FilePartitionId.Content).GetStream(RootId.Default.Value).Flush();
|
||||||
|
|
||||||
Add(accessTokenId, cobaltFile);
|
Add(token.FilePath, cobaltFile);
|
||||||
|
|
||||||
return 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -148,7 +148,7 @@
|
||||||
<Compile Include="ItemType.cs" />
|
<Compile Include="ItemType.cs" />
|
||||||
<Compile Include="LockUriTokenPair.cs" />
|
<Compile Include="LockUriTokenPair.cs" />
|
||||||
<Compile Include="Managers\WebDavManager.cs" />
|
<Compile Include="Managers\WebDavManager.cs" />
|
||||||
<Compile Include="Owa\CobaltFileManager.cs" />
|
<Compile Include="Owa\CobaltSessionManager.cs" />
|
||||||
<Compile Include="Owa\CobaltHostLockingStore.cs" />
|
<Compile Include="Owa\CobaltHostLockingStore.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Property.cs" />
|
<Compile Include="Property.cs" />
|
||||||
|
|
|
@ -59,6 +59,8 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
||||||
{
|
{
|
||||||
_authenticationService.LogOut();
|
_authenticationService.LogOut();
|
||||||
|
|
||||||
|
Session.Clear();
|
||||||
|
|
||||||
return RedirectToRoute(AccountRouteNames.Login);
|
return RedirectToRoute(AccountRouteNames.Login);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,6 @@ namespace WebsitePanel.WebDavPortal.Controllers.Api
|
||||||
private readonly IAuthenticationService _authenticationService;
|
private readonly IAuthenticationService _authenticationService;
|
||||||
private readonly IAccessTokenManager _tokenManager;
|
private readonly IAccessTokenManager _tokenManager;
|
||||||
private readonly ICryptography _cryptography;
|
private readonly ICryptography _cryptography;
|
||||||
//private static WopiSession _session;
|
|
||||||
private readonly ICobaltManager _cobaltManager;
|
private readonly ICobaltManager _cobaltManager;
|
||||||
|
|
||||||
public OwaController(IWopiServer wopiServer, IWebDavManager webDavManager, IAuthenticationService authenticationService, IAccessTokenManager tokenManager, ICryptography cryptography, 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]
|
[HttpPost]
|
||||||
public HttpResponseMessage Lock(int accessTokenId)
|
public HttpResponseMessage Lock(int accessTokenId)
|
||||||
{
|
{
|
||||||
|
// var token = _tokenManager.GetToken(accessTokenId);
|
||||||
|
|
||||||
|
//_webDavManager.LockFile(token.FilePath);
|
||||||
|
|
||||||
return new HttpResponseMessage(HttpStatusCode.OK);
|
return new HttpResponseMessage(HttpStatusCode.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace WebsitePanel.WebDavPortal.DependencyInjection
|
||||||
kernel.Bind<IWebDavManager>().To<WebDavManager>();
|
kernel.Bind<IWebDavManager>().To<WebDavManager>();
|
||||||
kernel.Bind<IAccessTokenManager>().To<AccessTokenManager>();
|
kernel.Bind<IAccessTokenManager>().To<AccessTokenManager>();
|
||||||
kernel.Bind<IWopiServer>().To<WopiServer>();
|
kernel.Bind<IWopiServer>().To<WopiServer>();
|
||||||
kernel.Bind<IWopiFileManager>().To<CobaltFileManager>();
|
kernel.Bind<IWopiFileManager>().To<CobaltSessionManager>();
|
||||||
kernel.Bind<IWebDavAuthorizationService>().To<WebDavAuthorizationService>();
|
kernel.Bind<IWebDavAuthorizationService>().To<WebDavAuthorizationService>();
|
||||||
kernel.Bind<ICobaltManager>().To<CobaltManager>();
|
kernel.Bind<ICobaltManager>().To<CobaltManager>();
|
||||||
kernel.Bind<ITtlStorage>().To<CacheTtlStorage>();
|
kernel.Bind<ITtlStorage>().To<CacheTtlStorage>();
|
||||||
|
|
|
@ -62,11 +62,11 @@
|
||||||
<add extension=".png" path="~/Content/Images/png-icon.png" />
|
<add extension=".png" path="~/Content/Images/png-icon.png" />
|
||||||
</fileIcons>
|
</fileIcons>
|
||||||
<officeOnline isEnabled="True" url="https://vir-owa.virtuworks.net" cobaltFileTtl="30">
|
<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=".docx" OwaView="wv/wordviewerframe.aspx?" OwaEditor="we/wordeditorframe.aspx?" />
|
||||||
<add extension=".xls" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&" />
|
<add extension=".xls" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&" />
|
||||||
<add extension=".xlsx" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&" />
|
<add extension=".xlsx" OwaView="x/_layouts/xlviewerinternal.aspx?" OwaEditor="x/_layouts/xlviewerinternal.aspx?edit=1&" />
|
||||||
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&" />
|
<add extension=".ppt" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?" />
|
||||||
<add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&" />
|
<add extension=".pptx" OwaView="p/PowerPointFrame.aspx?" OwaEditor="p/PowerPointFrame.aspx?PowerPointView=EditView&" />
|
||||||
</officeOnline>
|
</officeOnline>
|
||||||
</webDavExplorerConfigurationSettings>
|
</webDavExplorerConfigurationSettings>
|
||||||
|
|
|
@ -163,7 +163,6 @@
|
||||||
<Compile Include="Controllers\ErrorController.cs" />
|
<Compile Include="Controllers\ErrorController.cs" />
|
||||||
<Compile Include="Controllers\FileSystemController.cs" />
|
<Compile Include="Controllers\FileSystemController.cs" />
|
||||||
<Compile Include="Controllers\Api\OwaController.cs" />
|
<Compile Include="Controllers\Api\OwaController.cs" />
|
||||||
<Compile Include="Controllers\WopiSession.cs" />
|
|
||||||
<Compile Include="CustomAttributes\FormValueRequiredAttribute.cs" />
|
<Compile Include="CustomAttributes\FormValueRequiredAttribute.cs" />
|
||||||
<Compile Include="CustomAttributes\LdapAuthorizationAttribute.cs" />
|
<Compile Include="CustomAttributes\LdapAuthorizationAttribute.cs" />
|
||||||
<Compile Include="DependencyInjection\NinjectDependecyResolver.cs" />
|
<Compile Include="DependencyInjection\NinjectDependecyResolver.cs" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue