// // Copyright (c) 2008, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 27 Nov 08 Brian Frank Creation // using web ** ** FileMod is a web module which publishes a file or directory. ** ** See [pod doc]`pod-doc#file` ** const class FileMod : WebMod { ** ** Constructor with it-block, must set `file` ** new make(|This|? f) { f?.call(this) } ** ** File or directory to publish. This field must be ** configured in the constructor's it-block. ** const File file override Void onService() { // if servicing a single file, we handle specially if (!file.isDir) { // don't publish a single file with path longer than mod itself if (!req.modRel.path.isEmpty) { res.sendErr(404); return } // publish the file and we ar don FileWeblet(file).onService return } // get file under directory f := this.file.plus(req.modRel, false) // if we've resolved a directory if (f.isDir) { // if trailing slash wasn't used by req, redirect to use slash if (!req.uri.isDir) { res.redirect(req.uri.plusSlash); return } // map to "index.html" f = f + `index.html` } // if it doesn't exist then 404 if (!f.exists) { res.sendErr(404); return } // publish the file FileWeblet(f).checkUnderDir(file).onService } }