public ImageJobInfo(HttpContext context, ImageflowMiddlewareOptions options, BlobProvider blobProvider) { this.options = options; Authorized = ProcessRewritesAndAuthorization(context, options); if (!Authorized) { return; } HasParams = PathHelpers.SupportedQuerystringKeys.Any(FinalQuery.ContainsKey); var extension = Path.GetExtension(FinalVirtualPath); if (FinalQuery.TryGetValue("format", out var newExtension)) { extension = newExtension; } EstimatedFileExtension = PathHelpers.SanitizeImageExtension(extension); primaryBlob = new BlobFetchCache(FinalVirtualPath, blobProvider); allBlobs = new List <BlobFetchCache>(1) { primaryBlob }; if (HasParams) { CommandString = PathHelpers.SerializeCommandString(FinalQuery); // Look up watermark names if (FinalQuery.TryGetValue("watermark", out var watermarkValues)) { var watermarkNames = watermarkValues.Split(",").Select(s => s.Trim(' ')); appliedWatermarks = new List <NamedWatermark>(); foreach (var name in watermarkNames) { var watermark = options.NamedWatermarks.FirstOrDefault(w => w.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (watermark == null) { throw new InvalidOperationException($"watermark {name} was referenced from the querystring but no watermark by that name is registered with the middleware"); } appliedWatermarks.Add(watermark); allBlobs.Add(new BlobFetchCache(watermark.VirtualPath, blobProvider)); } } } provider = blobProvider; }
public void Add(IInfoAccumulator query) { var q = query.WithPrefix("proc_"); if (iisVersion != null) { q.Add("iis", iisVersion); } q.Add("default_commands", PathHelpers.SerializeCommandString(options.CommandDefaults)); var a = Assembly.GetAssembly(this.GetType()).GetInformationalVersion(); if (a.LastIndexOf('+') >= 0) { q.Add("git_commit", a.Substring(a.LastIndexOf('+') + 1)); } q.Add("info_version", Assembly.GetAssembly(this.GetType()).GetInformationalVersion()); q.Add("file_version", Assembly.GetAssembly(this.GetType()).GetFileVersion()); if (env.ContentRootPath != null) { // ReSharper disable once StringLiteralTypo q.Add("apppath_hash", Utilities.Sha256TruncatedBase64(env.ContentRootPath, 6)); } query.Add("imageflow", 1); query.AddString("enabled_cache", options.ActiveCacheBackend.ToString()); if (streamCache != null) { query.AddString("stream_cache", streamCache.GetType().Name); } query.Add("map_web_root", options.MapWebRoot); query.Add("use_presets_exclusively", options.UsePresetsExclusively); query.Add("request_signing_default", options.RequestSignatureOptions?.DefaultRequirement.ToString() ?? "never"); query.Add("default_cache_control", options.DefaultCacheControlString); foreach (var s in pluginNames) { query.Add("p", s); } foreach (var p in infoProviders) { p?.Add(query); } }
public ImageJobInfo(HttpContext context, ImageflowMiddlewareOptions options, BlobProvider blobProvider) { this.options = options; Authorized = ProcessRewritesAndAuthorization(context, options); if (!Authorized) { return; } HasParams = PathHelpers.SupportedQuerystringKeys.Any(FinalQuery.ContainsKey); var extension = Path.GetExtension(FinalVirtualPath); if (FinalQuery.TryGetValue("format", out var newExtension)) { extension = newExtension; } EstimatedFileExtension = PathHelpers.SanitizeImageExtension(extension) ?? "jpg"; primaryBlob = new BlobFetchCache(FinalVirtualPath, blobProvider); allBlobs = new List <BlobFetchCache>(1) { primaryBlob }; appliedWatermarks = new List <NamedWatermark>(); if (HasParams) { CommandString = PathHelpers.SerializeCommandString(FinalQuery); // Look up watermark names if (FinalQuery.TryGetValue("watermark", out var watermarkValues)) { var watermarkNames = watermarkValues.Split(",").Select(s => s.Trim(' ')); foreach (var name in watermarkNames) { var watermark = options.NamedWatermarks.FirstOrDefault(w => w.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (watermark == null) { throw new InvalidOperationException( $"watermark {name} was referenced from the querystring but no watermark by that name is registered with the middleware"); } appliedWatermarks.Add(watermark); } } } // After we've populated the defaults, run the event handlers for custom watermarking logic var args = new WatermarkingEventArgs(context, FinalVirtualPath, FinalQuery, appliedWatermarks); foreach (var handler in options.Watermarking) { var matches = string.IsNullOrEmpty(handler.PathPrefix) || FinalVirtualPath.StartsWith(handler.PathPrefix, StringComparison.OrdinalIgnoreCase); if (matches) { handler.Handler(args); } } appliedWatermarks = args.AppliedWatermarks; // Add the watermark source files foreach (var w in appliedWatermarks) { allBlobs.Add(new BlobFetchCache(w.VirtualPath, blobProvider)); } provider = blobProvider; }
public ImageJobInfo(HttpContext context, ImageflowMiddlewareOptions options, BlobProvider blobProvider) { this.options = options; Authorized = ProcessRewritesAndAuthorization(context, options); if (!Authorized) { return; } HasParams = PathHelpers.SupportedQuerystringKeys.Any(FinalQuery.ContainsKey); // Get the image and page domains ImageDomain = context.Request.Host.Host; var referer = context.Request.Headers["Referer"].ToString(); if (!string.IsNullOrEmpty(referer) && Uri.TryCreate(referer, UriKind.Absolute, out var result)) { PageDomain = result.DnsSafeHost; } var extension = Path.GetExtension(FinalVirtualPath); if (FinalQuery.TryGetValue("format", out var newExtension)) { extension = newExtension; } EstimatedFileExtension = PathHelpers.SanitizeImageExtension(extension) ?? "jpg"; primaryBlob = new BlobFetchCache(FinalVirtualPath, blobProvider); allBlobs = new List <BlobFetchCache>(1) { primaryBlob }; appliedWatermarks = new List <NamedWatermark>(); if (HasParams) { if (options.Licensing.RequestNeedsEnforcementAction(context.Request)) { if (options.EnforcementMethod == EnforceLicenseWith.RedDotWatermark) { FinalQuery["watermark_red_dot"] = "true"; } LicenseError = true; } CommandString = PathHelpers.SerializeCommandString(FinalQuery); // Look up watermark names if (FinalQuery.TryGetValue("watermark", out var watermarkValues)) { var watermarkNames = watermarkValues.Split(",").Select(s => s.Trim(' ')); foreach (var name in watermarkNames) { var watermark = options.NamedWatermarks.FirstOrDefault(w => w.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); if (watermark == null) { throw new InvalidOperationException( $"watermark {name} was referenced from the querystring but no watermark by that name is registered with the middleware"); } appliedWatermarks.Add(watermark); } } } // After we've populated the defaults, run the event handlers for custom watermarking logic var args = new WatermarkingEventArgs(context, FinalVirtualPath, FinalQuery, appliedWatermarks); foreach (var handler in options.Watermarking) { var matches = string.IsNullOrEmpty(handler.PathPrefix) || (FinalVirtualPath != null && FinalVirtualPath.StartsWith(handler.PathPrefix, StringComparison.OrdinalIgnoreCase)); if (matches) { handler.Handler(args); } } appliedWatermarks = args.AppliedWatermarks; if (appliedWatermarks.Count > 0) { HasParams = true; } // Add the watermark source files foreach (var w in appliedWatermarks) { allBlobs.Add(new BlobFetchCache(w.VirtualPath, blobProvider)); } }