public string GetUrl(string extension, string fileIdentifier, WopiActionEnum action) { // TODO: Consider generating WOPISrc based on routes: // WebAPI2: https://msdn.microsoft.com/en-us/library/system.web.http.routing.urlhelper.link.aspx // MVC: https://msdn.microsoft.com/en-us/library/cc668201.aspx ////Microsoft.AspNet.Mvc.UrlHelper u = new Microsoft.AspNet.Mvc.UrlHelper();u.Link() var template = WopiDiscoverer.GetUrlTemplate(extension, action); if (template != null) { int i = 0; // Resolve optional parameters var url = Regex.Replace(template, @"<(\w*)=\w*&*>", m => ResolveOptionalParameter(m.Groups[1].Value, i++)); url = url.TrimEnd('&'); //TODO: setup preferred ui/data culture (rs,ui) // Append mandatory parameters var fileUrl = WopiHostUrl + "/wopi/files/" + fileIdentifier; url += "&WOPISrc=" + Uri.EscapeDataString(fileUrl); url += "&access_token=" + Uri.EscapeDataString(SecurityHandler.GenerateAccessToken(fileIdentifier)); return url; } return null; }
public async Task <string> GetUrlTemplateAsync(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLowerInvariant(); var query = (await GetAppsAsync()).Elements().Where(e => (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && e.Attribute(ATTR_ACTION_NAME).Value.ToLowerInvariant() == actionString).Select(e => e.Attribute(ATTR_ACTION_URL).Value); return(query.FirstOrDefault()); }
public string GetUrl(string extension, string fileIdentifier, WopiActionEnum action) { // TODO: Consider generating WOPISrc based on routes: // WebAPI2: https://msdn.microsoft.com/en-us/library/system.web.http.routing.urlhelper.link.aspx // MVC: https://msdn.microsoft.com/en-us/library/cc668201.aspx ////Microsoft.AspNet.Mvc.UrlHelper u = new Microsoft.AspNet.Mvc.UrlHelper();u.Link() var template = WopiDiscoverer.GetUrlTemplate(extension, action); if (template != null) { int i = 0; // Resolve optional parameters var url = Regex.Replace(template, @"<(\w*)=\w*&*>", m => ResolveOptionalParameter(m.Groups[1].Value, i++)); url = url.TrimEnd('&'); //TODO: setup preferred ui/data culture (rs,ui) // Append mandatory parameters var fileUrl = WopiHostUrl + "/wopi/files/" + fileIdentifier; url += "&WOPISrc=" + Uri.EscapeDataString(fileUrl); url += "&access_token=" + Uri.EscapeDataString(SecurityHandler.GenerateAccessToken(fileIdentifier)); return(url); } return(null); }
///<inheritdoc /> public async Task <string> GetUrlTemplateAsync(string extension, WopiActionEnum action) { var actionString = action.ToString().ToLowerInvariant(); var query = (await GetAppsAsync()).Elements().Where(e => (string)e.Attribute(AttrActionExtension) == extension && e.Attribute(AttrActionName).Value.ToLowerInvariant() == actionString).Select(e => e.Attribute(AttrActionUrl).Value); return(query.FirstOrDefault()); }
///<inheritdoc /> public async Task <bool> SupportsActionAsync(string extension, WopiActionEnum action) { var actionString = action.ToString().ToLowerInvariant(); var query = (await GetAppsAsync()).Elements().Where(e => (string)e.Attribute(AttrActionExtension) == extension && e.Attribute(AttrActionName).Value.ToLowerInvariant() == actionString); return(query.Any()); }
public async Task <bool> SupportsActionAsync(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = (await GetAppsAsync()).Elements().Where(e => (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString); return(query.Any()); }
public string GetUrlTemplate(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = from e in DiscoveryXml.Elements(ELEMENT_NET_ZONE).Elements(ELEMENT_APP).Elements() where (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString select e.Attribute(ATTR_ACTION_URL).Value; return(query.SingleOrDefault()); }
public bool SupportsAction(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = from e in DiscoveryXml.Elements(ELEMENT_NET_ZONE).Elements(ELEMENT_APP).Elements() where (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString select e; return(query.Any()); }
public async Task<IEnumerable<string>> GetActionRequirementsAsync(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = from e in (await GetDiscoveryXmlAsync()).Elements(ELEMENT_NET_ZONE).Elements(ELEMENT_APP).Elements() where (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString select e.Attribute(ATTR_ACTION_REQUIRES).Value.Split(','); return query.SingleOrDefault(); }
public IEnumerable <string> GetActionRequirements(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = from e in DiscoveryXml.Elements(ELEMENT_NET_ZONE).Elements(ELEMENT_APP).Elements() where (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString select e.Attribute(ATTR_ACTION_REQUIRES).Value.Split(','); return(query.SingleOrDefault()); }
public async Task<string> GetUrlTemplateAsync(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = from e in (await GetDiscoveryXmlAsync()).Elements(ELEMENT_NET_ZONE).Elements(ELEMENT_APP).Elements() where (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString select e.Attribute(ATTR_ACTION_URL).Value; return query.SingleOrDefault(); }
public async Task<bool> SupportsActionAsync(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = from e in (await GetDiscoveryXmlAsync()).Elements(ELEMENT_NET_ZONE).Elements(ELEMENT_APP).Elements() where (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString select e; return query.Any(); }
public async void NonExistentTemplate(string extension, string wopiFileUrl, WopiActionEnum action, string expectedValue) { // Arrange var urlGenerator = new WopiUrlBuilder(_discoverer); // Act var result = await urlGenerator.GetFileUrlAsync(extension, wopiFileUrl, action); // Assert Assert.Equal(expectedValue, result); }
public async void ActionRequirementsNegativeTests(string extension, WopiActionEnum action, string expectedValue, string fileName) { // Arrange InitDiscoverer(fileName); // Act var result = await _wopiDiscoverer.GetActionRequirementsAsync(extension, action); // Assert Assert.DoesNotContain(expectedValue, result); }
public async void UrlTemplateTests(string extension, WopiActionEnum action, string expectedValue, string fileName) { // Arrange InitDiscoverer(fileName); // Act var result = await _wopiDiscoverer.GetUrlTemplateAsync(extension, action); // Assert Assert.Equal(expectedValue, result); }
public async void ActionRequirementsTests(string extension, WopiActionEnum action, string expectedValue, string fileName) { // Arrange InitDiscoverer(fileName); // Act IEnumerable <string> result = await _wopiDiscoverer.GetActionRequirementsAsync(extension, action); // Assert Assert.Contains(expectedValue, result); }
/// <summary> /// Generates an URL for a given file and action. /// </summary> /// <param name="extension">File extension used to identify a correct URL template.</param> /// <param name="fileIdentifier">Identifier of a file which an object of interest.</param> /// <param name="accessToken">Access token that will be added to the URL.</param> /// <param name="action">Action used to identify a correct URL template.</param> /// <param name="urlSettings">Additional URL settings (if not specified, defaults passed to the class constructor will be used).</param> /// <returns></returns> public async Task<string> GetFileUrlAsync(string extension, string fileIdentifier, string accessToken, WopiActionEnum action, WopiUrlSettings urlSettings = null) { var combinedUrlSettings = new WopiUrlSettings(urlSettings.Merge(UrlSettings)); var template = await WopiDiscoverer.GetUrlTemplateAsync(extension, action); if (template != null) { // Resolve optional parameters var url = Regex.Replace(template, @"<(?<name>\w*)=(?<value>\w*)&*>", m => ResolveOptionalParameter(m.Groups["name"].Value, m.Groups["value"].Value, combinedUrlSettings)); url = url.TrimEnd('&'); // Append mandatory parameters var fileUrl = WopiHostUrl + "/wopi/files/" + fileIdentifier; url += "&WOPISrc=" + Uri.EscapeDataString(fileUrl); url += "&access_token=" + Uri.EscapeDataString(accessToken); return url; } return null; }
public async Task <bool> RequiresCobaltAsync(string extension, WopiActionEnum action) { var requirements = await GetActionRequirementsAsync(extension, action); return(requirements != null && requirements.Contains(ATTR_VAL_COBALT)); }
/// <summary> /// Generates an URL for a given file and action. /// </summary> /// <param name="extension">File extension used to identify a correct URL template.</param> /// <param name="wopiFileUrl">URL of a file.</param> /// <param name="action">Action used to identify a correct URL template.</param> /// <param name="urlSettings">Additional URL settings (if not specified, defaults passed to the class constructor will be used).</param> /// <returns></returns> public async Task <string> GetFileUrlAsync(string extension, string wopiFileUrl, WopiActionEnum action, WopiUrlSettings urlSettings = null) { var combinedUrlSettings = new WopiUrlSettings(urlSettings.Merge(UrlSettings)); var template = await _wopiDiscoverer.GetUrlTemplateAsync(extension, action); if (!string.IsNullOrEmpty(template)) { // Resolve optional parameters var url = Regex.Replace(template, @"<(?<name>\w*)=(?<value>\w*)&*>", m => ResolveOptionalParameter(m.Groups["name"].Value, m.Groups["value"].Value, combinedUrlSettings)); url = url.TrimEnd('&'); // Append mandatory parameters url += "&WOPISrc=" + Uri.EscapeDataString(wopiFileUrl); return(url); } return(null); }
public async void UrlWithAdditionalSettings(string extension, string wopiFileUrl, WopiActionEnum action, string expectedValue) { // Arrange var settings = new WopiUrlSettings { UI_LLCC = new CultureInfo("en-US") }; var urlGenerator = new WopiUrlBuilder(_discoverer, settings); // Act var result = await urlGenerator.GetFileUrlAsync(extension, wopiFileUrl, action); // Assert Assert.Equal(expectedValue, result); }
public bool RequiresCobalt(string extension, WopiActionEnum action) { return GetActionRequirements(extension, action).Contains(ATTR_VAL_COBALT); }
public bool RequiresCobalt(string extension, WopiActionEnum action) { return(GetActionRequirements(extension, action).Contains(ATTR_VAL_COBALT)); }
public async Task<bool> RequiresCobaltAsync(string extension, WopiActionEnum action) { return (await GetActionRequirementsAsync(extension, action)).Contains(ATTR_VAL_COBALT); }
///<inheritdoc /> public async Task <IEnumerable <string> > GetActionRequirementsAsync(string extension, WopiActionEnum action) { var actionString = action.ToString().ToLowerInvariant(); var query = (await GetAppsAsync()).Elements().Where(e => (string)e.Attribute(AttrActionExtension) == extension && e.Attribute(AttrActionName).Value.ToLowerInvariant() == actionString).Select(e => e.Attribute(AttrActionRequires).Value.Split(',')); return(query.FirstOrDefault()); }
///<inheritdoc /> public async Task <bool> RequiresCobaltAsync(string extension, WopiActionEnum action) { var requirements = await GetActionRequirementsAsync(extension, action); return(requirements is not null && requirements.Contains(AttrValCobalt)); }
public async Task <IEnumerable <string> > GetActionRequirementsAsync(string extension, WopiActionEnum action) { string actionString = action.ToString().ToLower(); var query = (await GetAppsAsync()).Elements().Where(e => (string)e.Attribute(ATTR_ACTION_EXTENSION) == extension && (string)e.Attribute(ATTR_ACTION_NAME) == actionString).Select(e => e.Attribute(ATTR_ACTION_REQUIRES).Value.Split(',')); return(query.FirstOrDefault()); }