nanoev/tiny_httpd/Tiny_httpd_unix/Dir/index.html
2025-05-05 14:16:16 +00:00

19 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Dir (tiny_httpd.Tiny_httpd_unix.Dir)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.0.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../../index.html">Index</a> &#x00BB; <a href="../../index.html">tiny_httpd</a> &#x00BB; <a href="../index.html">Tiny_httpd_unix</a> &#x00BB; Dir</nav><header class="odoc-preamble"><h1>Module <code><span>Tiny_httpd_unix.Dir</span></code></h1><p>Serving static content from directories</p><p>This module provides the same functionality as the &quot;http_of_dir&quot; tool. It exposes a directory (and its subdirectories), with the optional ability to delete or upload files.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.11</li></ul></header><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-dir_behavior"><a href="#type-dir_behavior" class="anchor"></a><code><span><span class="keyword">type</span> dir_behavior</span><span> = </span></code><ol><li id="type-dir_behavior.Index" class="def variant constructor anchored"><a href="#type-dir_behavior.Index" class="anchor"></a><code><span>| </span><span><span class="constructor">Index</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Redirect to index.html if present, else fails.</p><span class="comment-delim">*)</span></div></li><li id="type-dir_behavior.Lists" class="def variant constructor anchored"><a href="#type-dir_behavior.Lists" class="anchor"></a><code><span>| </span><span><span class="constructor">Lists</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Lists content of directory. Be careful of security implications.</p><span class="comment-delim">*)</span></div></li><li id="type-dir_behavior.Index_or_lists" class="def variant constructor anchored"><a href="#type-dir_behavior.Index_or_lists" class="anchor"></a><code><span>| </span><span><span class="constructor">Index_or_lists</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Redirect to index.html if present and lists content otherwise. This is useful for tilde (&quot;~&quot;) directories and other per-user behavior, but be mindful of security implications</p><span class="comment-delim">*)</span></div></li><li id="type-dir_behavior.Forbidden" class="def variant constructor anchored"><a href="#type-dir_behavior.Forbidden" class="anchor"></a><code><span>| </span><span><span class="constructor">Forbidden</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Forbid access to directory. This is suited for serving assets, for example.</p><span class="comment-delim">*)</span></div></li></ol></div><div class="spec-doc"><p>behavior of static directory.</p><p>This controls what happens when the user requests the path to a directory rather than a file.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-hidden"><a href="#type-hidden" class="anchor"></a><code><span><span class="keyword">type</span> hidden</span></code></div><div class="spec-doc"><p>Type used to prevent users from building a config directly. Use <a href="#val-default_config"><code>default_config</code></a> or <a href="#val-config"><code>config</code></a> instead.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-config"><a href="#type-config" class="anchor"></a><code><span><span class="keyword">type</span> config</span><span> = </span><span>{</span></code><ol><li id="type-config.download" class="def record field anchored"><a href="#type-config.download" class="anchor"></a><code><span><span class="keyword">mutable</span> download : bool;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Is downloading files allowed?</p><span class="comment-delim">*)</span></div></li><li id="type-config.dir_behavior" class="def record field anchored"><a href="#type-config.dir_behavior" class="anchor"></a><code><span><span class="keyword">mutable</span> dir_behavior : <a href="#type-dir_behavior">dir_behavior</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Behavior when serving a directory and not a file</p><span class="comment-delim">*)</span></div></li><li id="type-config.delete" class="def record field anchored"><a href="#type-config.delete" class="anchor"></a><code><span><span class="keyword">mutable</span> delete : bool;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Is deleting a file allowed? (with method DELETE)</p><span class="comment-delim">*)</span></div></li><li id="type-config.upload" class="def record field anchored"><a href="#type-config.upload" class="anchor"></a><code><span><span class="keyword">mutable</span> upload : bool;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Is uploading a file allowed? (with method PUT)</p><span class="comment-delim">*)</span></div></li><li id="type-config.max_upload_size" class="def record field anchored"><a href="#type-config.max_upload_size" class="anchor"></a><code><span><span class="keyword">mutable</span> max_upload_size : int;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>If <a href="#type-config.upload"><code>upload</code></a> is true, this is the maximum size in bytes for uploaded files.</p><span class="comment-delim">*)</span></div></li><li id="type-config._rest" class="def record field anchored"><a href="#type-config._rest" class="anchor"></a><code><span>_rest : <a href="#type-hidden">hidden</a>;</span></code><div class="def-doc"><span class="comment-delim">(*</span><p>Just ignore this field.</p><span class="comment-delim">*)</span></div></li></ol><code><span>}</span></code></div><div class="spec-doc"><p>configuration for static file handlers. This might get more fields over time.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-default_config"><a href="#val-default_config" class="anchor"></a><code><span><span class="keyword">val</span> default_config : <span>unit <span class="arrow">&#45;&gt;</span></span> <a href="#type-config">config</a></span></code></div><div class="spec-doc"><p>default configuration: <code> { download=true ; dir_behavior=Forbidden ; delete=false ; upload=false ; max_upload_size = 10 * 1024 * 1024 }</code></p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-config"><a href="#val-config" class="anchor"></a><code><span><span class="keyword">val</span> config :
<span><span class="optlabel">?download</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?dir_behavior</span>:<a href="#type-dir_behavior">dir_behavior</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?delete</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?upload</span>:bool <span class="arrow">&#45;&gt;</span></span>
<span><span class="optlabel">?max_upload_size</span>:int <span class="arrow">&#45;&gt;</span></span>
<span>unit <span class="arrow">&#45;&gt;</span></span>
<a href="#type-config">config</a></span></code></div><div class="spec-doc"><p>Build a config from <a href="#val-default_config"><code>default_config</code></a>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.12</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_dir_path"><a href="#val-add_dir_path" class="anchor"></a><code><span><span class="keyword">val</span> add_dir_path :
<span><span class="label">config</span>:<a href="#type-config">config</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">dir</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">prefix</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Tiny_httpd_core/Server/index.html#type-t">Tiny_httpd_core.Server.t</a> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p><code>add_dirpath ~config ~dir ~prefix server</code> adds route handle to the <code>server</code> to serve static files in <code>dir</code> when url starts with <code>prefix</code>, using the given configuration <code>config</code>.</p></div></div><div class="odoc-spec"><div class="spec module-type anchored" id="module-type-VFS"><a href="#module-type-VFS" class="anchor"></a><code><span><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-VFS/index.html">VFS</a></span><span> = <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Virtual file system.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-vfs_of_dir"><a href="#val-vfs_of_dir" class="anchor"></a><code><span><span class="keyword">val</span> vfs_of_dir : <span>string <span class="arrow">&#45;&gt;</span></span> <span>(<span class="keyword">module</span> <a href="module-type-VFS/index.html">VFS</a>)</span></span></code></div><div class="spec-doc"><p><code>vfs_of_dir dir</code> makes a virtual file system that reads from the disk.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.12</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-add_vfs"><a href="#val-add_vfs" class="anchor"></a><code><span><span class="keyword">val</span> add_vfs :
<span><span class="label">config</span>:<a href="#type-config">config</a> <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">vfs</span>:<span>(<span class="keyword">module</span> <a href="module-type-VFS/index.html">VFS</a>)</span> <span class="arrow">&#45;&gt;</span></span>
<span><span class="label">prefix</span>:string <span class="arrow">&#45;&gt;</span></span>
<span><a href="../../Tiny_httpd_core/Server/index.html#type-t">Tiny_httpd_core.Server.t</a> <span class="arrow">&#45;&gt;</span></span>
unit</span></code></div><div class="spec-doc"><p>Similar to <a href="#val-add_dir_path"><code>add_dir_path</code></a> but using a virtual file system instead.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.12</li></ul></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Embedded_fs"><a href="#module-Embedded_fs" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Embedded_fs/index.html">Embedded_fs</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>An embedded file system, as a list of files with (relative) paths. This is useful in combination with the &quot;tiny-httpd-mkfs&quot; tool, which embeds the files it's given into a OCaml module.</p></div></div></div></body></html>