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.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;
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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" />
|
||||
|
|
|
@ -59,6 +59,8 @@ namespace WebsitePanel.WebDavPortal.Controllers
|
|||
{
|
||||
_authenticationService.LogOut();
|
||||
|
||||
Session.Clear();
|
||||
|
||||
return RedirectToRoute(AccountRouteNames.Login);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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>();
|
||||
|
|
|
@ -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&" />
|
||||
<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&" />
|
||||
</officeOnline>
|
||||
</webDavExplorerConfigurationSettings>
|
||||
|
|
|
@ -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" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue