1 /** 2 * Copyright © DiamondMVC 2019 3 * License: MIT (https://github.com/DiamondMVC/Diamond/blob/master/LICENSE) 4 * Author: Jacob Jensen (bausshf) 5 */ 6 module diamond.app.files; 7 8 import diamond.core.apptype; 9 10 static if (isWeb) 11 { 12 import vibe.d : HTTPServerRequestDelegateS; 13 14 import diamond.http; 15 16 /** 17 * The handler for static file requests. 18 * Params: 19 * client = The client. 20 * staticFile = The static file handler. 21 */ 22 package(diamond.app) void handleStaticFiles 23 ( 24 HttpClient client, 25 HTTPServerRequestDelegateS staticFile 26 ) 27 { 28 import diamond.authentication; 29 30 if (hasRoles && !hasAccess(client.role, client.method, client.route.toString())) 31 { 32 client.error(HttpStatus.unauthorized); 33 } 34 35 import diamond.extensions; 36 mixin ExtensionEmit!(ExtensionType.staticFileExtension, q{ 37 if (!{{extensionEntry}}.handleStaticFile(client)) 38 { 39 return; 40 } 41 }); 42 emitExtension(); 43 44 import diamond.core.webconfig; 45 46 foreach (headerKey,headerValue; webConfig.defaultHeaders.staticFiles) 47 { 48 client.rawResponse.headers[headerKey] = headerValue; 49 } 50 51 import std.array : split, join; 52 53 version (VIBE_D_OLD) 54 { 55 client.path = "/" ~ client.path.split("/")[2 .. $].join("/"); 56 } 57 else 58 { 59 client.path = "/" ~ client.path.split("/")[1 .. $].join("/"); 60 } 61 62 import diamond.core.websettings; 63 64 if (webSettings) 65 { 66 webSettings.onStaticFile(client); 67 } 68 69 staticFile(client.rawRequest, client.rawResponse); 70 } 71 }