11const middlewareRepository = require ( "./middlewareRepository" ) ;
22const MiddlewareUtil = require ( "./MiddlewareUtil" ) ;
3+ const proxyConfiguration = require ( "../proxyConfiguration" ) ;
34
45/**
56 *
@@ -8,7 +9,8 @@ const MiddlewareUtil = require("./MiddlewareUtil");
89 */
910class MiddlewareManager {
1011 constructor ( { tree, resources, options = {
11- sendSAPTargetCSP : false
12+ sendSAPTargetCSP : false ,
13+ useProxy : false
1214 } } ) {
1315 if ( ! tree || ! resources || ! resources . all || ! resources . rootProject || ! resources . dependencies ) {
1416 throw new Error ( "[MiddlewareManager]: One or more mandatory parameters not provided" ) ;
@@ -84,6 +86,13 @@ class MiddlewareManager {
8486 }
8587
8688 async addStandardMiddleware ( ) {
89+ const useProxy = this . options . useProxy ;
90+
91+ let proxyConfig ;
92+ if ( useProxy ) {
93+ proxyConfig = await proxyConfiguration . getConfigurationForProject ( this . tree ) ;
94+ }
95+
8796 await this . addMiddleware ( "csp" , {
8897 wrapperCallback : ( { middleware : cspModule } ) => {
8998 const oCspConfig = {
@@ -125,6 +134,21 @@ class MiddlewareManager {
125134 } ) ;
126135 await this . addMiddleware ( "compression" ) ;
127136 await this . addMiddleware ( "cors" ) ;
137+
138+ if ( useProxy ) {
139+ await this . addMiddleware ( "proxyRewrite" , {
140+ wrapperCallback : ( proxyRewriteModule ) => {
141+ return ( { resources} ) => {
142+ return proxyRewriteModule ( {
143+ resources,
144+ configuration : proxyConfig ,
145+ cdnUrl : this . options . cdnUrl
146+ } ) ;
147+ } ;
148+ }
149+ } ) ;
150+ }
151+
128152 await this . addMiddleware ( "discovery" , {
129153 mountPath : "/discovery"
130154 } ) ;
@@ -143,21 +167,52 @@ class MiddlewareManager {
143167 } ;
144168 }
145169 } ) ;
146- await this . addMiddleware ( "connectUi5Proxy" , {
147- mountPath : "/proxy"
148- } ) ;
170+
171+ if ( this . options . cdnUrl ) {
172+ await this . addMiddleware ( "cdn" , {
173+ wrapperCallback : ( cdn ) => {
174+ return ( { resources} ) => {
175+ return cdn ( {
176+ resources,
177+ cdnUrl : this . options . cdnUrl
178+ } ) ;
179+ } ;
180+ }
181+ } ) ;
182+ }
183+
184+ if ( useProxy ) {
185+ await this . addMiddleware ( "proxy" , {
186+ wrapperCallback : ( proxyModule ) => {
187+ return ( { resources} ) => {
188+ return proxyModule ( {
189+ resources,
190+ configuration : proxyConfig
191+ } ) ;
192+ } ;
193+ }
194+ } ) ;
195+ } else {
196+ await this . addMiddleware ( "connectUi5Proxy" , {
197+ mountPath : "/proxy"
198+ } ) ;
199+ }
200+
149201 // Handle anything but read operations *before* the serveIndex middleware
150202 // as it will reject them with a 405 (Method not allowed) instead of 404 like our old tooling
151203 await this . addMiddleware ( "nonReadRequests" ) ;
152- await this . addMiddleware ( "serveIndex" , {
153- wrapperCallback : ( { middleware : middleware } ) => {
154- return ( { resources, middlewareUtil} ) => middleware ( {
155- resources,
156- middlewareUtil,
157- simpleIndex : this . options . simpleIndex
158- } ) ;
159- }
160- } ) ;
204+ if ( ! useProxy ) {
205+ // Don't do directory listing when using a proxy. High potential for confusion
206+ await this . addMiddleware ( "serveIndex" , {
207+ wrapperCallback : ( { middleware : middleware } ) => {
208+ return ( { resources, middlewareUtil} ) => middleware ( {
209+ resources,
210+ middlewareUtil,
211+ simpleIndex : this . options . simpleIndex
212+ } ) ;
213+ }
214+ } ) ;
215+ }
161216 }
162217
163218 async addCustomMiddleware ( ) {
0 commit comments