public static string ValidateStaticAssetsForSnippetCreation(StaticAssets staticAssets)
        {
            if (staticAssets == null)
            {
                return(null);
            }

            foreach (var url in staticAssets.Scripts ?? Enumerable.Empty <string>())
            {
                if (!Uri.TryCreate(url, UriKind.Absolute, out _))
                {
                    return($"Invalid JS file URL: {url}");
                }
            }

            foreach (var url in staticAssets.Styles ?? Enumerable.Empty <string>())
            {
                if (!Uri.TryCreate(url, UriKind.Absolute, out _))
                {
                    return($"Invalid CSS file URL: {url}");
                }
            }

            return(null);
        }
示例#2
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            StaticAssets.Initialize(new StaticAssetResolver(Server.MapPath("~/assets.json"), HttpContext.Current.Cache));
        }
        public static string ValidateStaticAssetsForSnippetCreation(StaticAssets staticAssets)
        {
            if (staticAssets == null)
            {
                return(null);
            }

            if (staticAssets.Scripts != null)
            {
                var uniqueScripts = new HashSet <string>();
                foreach (var script in staticAssets.Scripts)
                {
                    var isValidUrl = script.Source == StaticAssetSource.Cdn
                        ? Uri.TryCreate(script.Url, UriKind.Absolute, out _)
                        : Uri.TryCreate(script.Url, UriKind.Relative, out _);

                    if (!isValidUrl)
                    {
                        return($"Invalid JS file URL: {script.Url}");
                    }

                    if (uniqueScripts.Contains(script.Url))
                    {
                        return($"Script '{script.Url}' is duplicated.");
                    }

                    uniqueScripts.Add(script.Url);
                }
            }

            if (staticAssets.Styles != null)
            {
                var uniqueStyles = new HashSet <string>();
                foreach (var style in staticAssets.Styles)
                {
                    var isValidUrl = style.Source == StaticAssetSource.Cdn
                        ? Uri.TryCreate(style.Url, UriKind.Absolute, out _)
                        : Uri.TryCreate(style.Url, UriKind.Relative, out _);

                    if (!isValidUrl)
                    {
                        return($"Invalid CSS file URL: {style.Url}");
                    }

                    if (uniqueStyles.Contains(style.Url))
                    {
                        return($"Style '{style.Url}' is duplicated.");
                    }

                    uniqueStyles.Add(style.Url);
                }
            }

            return(null);
        }
示例#4
0
 public RealDiceBot(
     IConfiguration configuration,
     IRollService rollService,
     StaticAssets staticAssets,
     ILoggerFactory logger)
 {
     _botId            = configuration["MicrosoftAppId"] ?? Guid.NewGuid().ToString();
     this.logger       = logger.CreateLogger <RealDiceBot>();
     this.rollService  = rollService;
     this.staticAssets = staticAssets;
 }
        public void ShouldProvideFullUrlForAnAssetUsingConfiguredRoot()
        {
            var config = new Mock <IApplicationConfiguration>();
            var assets = new StaticAssets(config.Object);

            config.Setup(o => o.GetStaticAssetsRootUrl()).Returns("http://assets.example.com/");

            var asset = assets.UrlFor("logo.png");

            asset.Should().Be("http://assets.example.com/logo.png");
        }
示例#6
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);


            var useLocal = bool.Parse(ConfigurationManager.AppSettings["UseLocal"]);

            StaticAssets.Initialize(new StaticAssetResolver(Server.MapPath(useLocal? "~/assetsLocal.json":"~/assetsProd.json"), HttpContext.Current.Cache));
        }
        public async Task <string> SaveSnippetAsync(
            IEnumerable <CodeFile> codeFiles,
            IEnumerable <Package> installedPackages,
            StaticAssets staticAssets)
        {
            if (codeFiles == null)
            {
                throw new ArgumentNullException(nameof(codeFiles));
            }

            var codeFilesValidationError = CodeFilesHelper.ValidateCodeFilesForSnippetCreation(codeFiles);

            if (!string.IsNullOrWhiteSpace(codeFilesValidationError))
            {
                throw new InvalidOperationException(codeFilesValidationError);
            }

            var packagesValidationError = PackagesHelper.ValidatePackagesForSnippetCreation(installedPackages);

            if (!string.IsNullOrWhiteSpace(packagesValidationError))
            {
                throw new InvalidOperationException(packagesValidationError);
            }

            var staticAssetsValidationError = StaticAssetsHelper.ValidateStaticAssetsForSnippetCreation(staticAssets);

            if (!string.IsNullOrWhiteSpace(staticAssetsValidationError))
            {
                throw new InvalidOperationException(staticAssetsValidationError);
            }

            var requestData = new CreateSnippetRequest
            {
                Files             = codeFiles,
                InstalledPackages = installedPackages,
                StaticAssets      = staticAssets,
            };

            var response = await this.httpClient.PostAsJsonAsync(this.snippetsOptions.CreateUrl, requestData);

            response.EnsureSuccessStatusCode();

            var id = await response.Content.ReadAsStringAsync();

            return(id);
        }