Function rouille_maint_in::match_assets[][src]

pub fn match_assets<P: ?Sized>(request: &Request, path: &P) -> Response where
    P: AsRef<Path>, 

Searches inside path for a file that matches the given request. If a file is found, returns a Response that would serve this file if returned. If no file is found, a 404 response is returned instead.

The value of the Content-Type header of the response is guessed based on the file’s extension. If you wish so, you can modify that Content-Type by modifying the Response object returned by this function.

Example

In this example, a request made for example to /test.txt will return the file public/test.txt (relative to the current working directory, which is usually the location of the Cargo.toml) if it exists.

rouille::start_server("localhost:8000", move |request| {
    let response = rouille::match_assets(&request, "public");
    if response.is_success() {
        return response;
    }

    // ...
});

Security

Everything inside the directory that you pass as path is potentially accessible by any client. Do not use assume that client won’t be able to guess the URL of a sensitive file. All sensitive files should require a login/password to be accessed.

If you want to serve sensitive files, you are encouraged to put them in a different directory than public files, and call match_assets once for public files and once for private files after you checked the user’s credentials. Only call match_assets after you know that the user can have access to all the files that can be served.

If you manage the user’s accesses per-file, use a white list of authorized files instead of a black list of forbidden files. Files can potentially be accessed from multiple different URLs and a black list may not cover everything.

Example with prefix

Sometimes you want to add a prefix to the URL of your static files. To do that, you can use the remove_prefix method on Request.

rouille::start_server("localhost:8000", move |request| {
    if let Some(request) = request.remove_prefix("/static") {
        return rouille::match_assets(&request, "public");
    }

    // ...
});

In this example, a request made to /static/test.txt will return the file public/test.txt if it exists.