001package jmri.server.web.spi;
002
003import java.util.List;
004import java.util.Map;
005import javax.annotation.CheckReturnValue;
006import javax.annotation.Nonnull;
007
008/**
009 * Provide additional configurations not encapsulated by a servlet for the
010 * {@link jmri.web.server.WebServer}.
011 *
012 * @author Randall Wood
013 */
014public interface WebServerConfiguration {
015
016    /**
017     * Get paths that are to be returned by the web server as individual files
018     * or directory listings. Note that all files or directories listed must be
019     * in the {@link jmri.util.FileUtil#PREFERENCES},
020     * {@link jmri.util.FileUtil#PROFILE}, {@link jmri.util.FileUtil#SETTINGS},
021     * or {@link jmri.util.FileUtil#PROGRAM} JMRI portable path.
022     *
023     * @return a map containing the web path as the key, and the path on disk as
024     *         the value; return an empty map if none
025     */
026    @CheckReturnValue
027    @Nonnull
028    Map<String, String> getFilePaths();
029
030    /**
031     * Get paths that are to redirected by the web server.
032     *
033     * @return a map containing the request path as the key and the path to
034     *         redirect to as the value; return an empty map if none
035     */
036    @CheckReturnValue
037    @Nonnull
038    Map<String, String> getRedirectedPaths();
039
040    /**
041     * Get paths that are not to be returned. Requests for paths listed here
042     * will be denied a
043     * {@link javax.servlet.http.HttpServletResponse#SC_FORBIDDEN} response.
044     *
045     * @return a list containing the request path to be denied access to; return
046     *         an empty list if none
047     */
048    @CheckReturnValue
049    @Nonnull
050    List<String> getForbiddenPaths();
051
052}