Example #1
0
        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;
        }
Example #2
0
        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());
        }
Example #3
0
        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);
        }
Example #4
0
        ///<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());
        }
Example #5
0
        ///<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());
        }
Example #6
0
        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());
        }
Example #7
0
        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());
        }
Example #8
0
        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());
        }
Example #9
0
		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();
		}
Example #10
0
        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());
        }
Example #11
0
		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();
		}
Example #12
0
		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();
		}
Example #13
0
        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);
        }
Example #15
0
        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);
        }
Example #16
0
        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);
        }
Example #17
0
		/// <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;
		}
Example #18
0
        public async Task <bool> RequiresCobaltAsync(string extension, WopiActionEnum action)
        {
            var requirements = await GetActionRequirementsAsync(extension, action);

            return(requirements != null && requirements.Contains(ATTR_VAL_COBALT));
        }
Example #19
0
        /// <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);
        }
Example #20
0
        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);
        }
Example #21
0
 public bool RequiresCobalt(string extension, WopiActionEnum action)
 {
     return GetActionRequirements(extension, action).Contains(ATTR_VAL_COBALT);
 }
Example #22
0
 public bool RequiresCobalt(string extension, WopiActionEnum action)
 {
     return(GetActionRequirements(extension, action).Contains(ATTR_VAL_COBALT));
 }
Example #23
0
		public async Task<bool> RequiresCobaltAsync(string extension, WopiActionEnum action)
		{
			return (await GetActionRequirementsAsync(extension, action)).Contains(ATTR_VAL_COBALT);
		}
Example #24
0
        ///<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());
        }
Example #25
0
        ///<inheritdoc />
        public async Task <bool> RequiresCobaltAsync(string extension, WopiActionEnum action)
        {
            var requirements = await GetActionRequirementsAsync(extension, action);

            return(requirements is not null && requirements.Contains(AttrValCobalt));
        }
Example #26
0
        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());
        }