-
Notifications
You must be signed in to change notification settings - Fork 0
/
EPiServerBlobReaderPlugin.cs
103 lines (83 loc) · 3.33 KB
/
EPiServerBlobReaderPlugin.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System.Collections.Specialized;
using System.Text.RegularExpressions;
using System.Web;
using EPiServer;
using EPiServer.Core;
using EPiServer.ServiceLocation;
using EPiServer.Web;
using EPiServer.Web.Routing;
using EPiServer.Web.Routing.Segments;
using ImageResizer.Configuration;
namespace ImageResizer.Plugins.EPiServerBlobReader
{
/// <summary>
/// Copyright: https://raw.githubusercontent.com/Igelkottegrodan/ImageResizer.Plugins.EPiServerBlobPlugin/master/ImageResizer.Plugins.EPiServerBlobPlugin/EPiServerBlobPlugin.cs
/// </summary>
public class EPiServerBlobReaderPlugin : IVirtualImageProvider, IPlugin
{
private readonly UrlResolver __urlResolver = ServiceLocator.Current.GetInstance<UrlResolver>();
public IPlugin Install(Config config)
{
config.Plugins.add_plugin(this);
config.Pipeline.PostAuthorizeRequestStart += OnPostAuthorizeRequestStart;
return this;
}
public bool Uninstall(Config config)
{
config.Plugins.remove_plugin(this);
config.Pipeline.PostAuthorizeRequestStart -= OnPostAuthorizeRequestStart;
return true;
}
public bool FileExists(string virtualPath, NameValueCollection queryString)
{
var blobImage = GetBlobFile(virtualPath, queryString);
return (blobImage != null && blobImage.BlobExists);
}
public IVirtualFile GetFile(string virtualPath, NameValueCollection queryString)
{
return GetBlobFile(virtualPath, queryString);
}
private EPiServerBlobFile GetBlobFile(string virtualPath, NameValueCollection queryString)
{
var blobFile = new EPiServerBlobFile(virtualPath, queryString);
return blobFile;
}
private void OnPostAuthorizeRequestStart(IHttpModule sender, HttpContext context)
{
if (context.Request.Url.ToString().Contains("Thumbnail?epieditmode"))
return;
var absolutePath = CleanEditModePath(context.Request.Url.AbsolutePath);
var resolvedContent = __urlResolver.Route(new UrlBuilder(absolutePath));
if (resolvedContent == null)
{
return;
}
var isMediaContent = resolvedContent is MediaData;
if (!isMediaContent)
{
return;
}
var previewOrEditMode = RequestSegmentContext.CurrentContextMode == ContextMode.Edit || RequestSegmentContext.CurrentContextMode == ContextMode.Preview;
// Disable cache if editing or previewing
if (!previewOrEditMode)
{
return;
}
Config.Current.Pipeline.PreRewritePath = absolutePath;
var modifiedQueryString = new NameValueCollection(Config.Current.Pipeline.ModifiedQueryString)
{
{
"process", ProcessWhen.Always.ToString()
},
{
"cache", ServerCacheMode.No.ToString()
}
};
Config.Current.Pipeline.ModifiedQueryString = modifiedQueryString;
}
private string CleanEditModePath(string path)
{
return Regex.Replace(path, @",.*$", string.Empty);
}
}
}