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)); } }