summaryrefslogtreecommitdiff
path: root/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl
diff options
context:
space:
mode:
Diffstat (limited to 'deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl')
-rw-r--r--deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl65
1 files changed, 65 insertions, 0 deletions
diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl
new file mode 100644
index 0000000000..4a7f608a8a
--- /dev/null
+++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_static.erl
@@ -0,0 +1,65 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2010-2020 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+%% Alias for cowboy_static that accepts a list of directories
+%% where static files can be found.
+
+-module(rabbit_mgmt_wm_static).
+
+-include_lib("kernel/include/file.hrl").
+
+-export([init/2]).
+-export([malformed_request/2]).
+-export([forbidden/2]).
+-export([content_types_provided/2]).
+-export([resource_exists/2]).
+-export([last_modified/2]).
+-export([generate_etag/2]).
+-export([get_file/2]).
+
+
+init(Req0, {priv_file, _App, _Path}=Opts) ->
+ Req1 = rabbit_mgmt_headers:set_common_permission_headers(Req0, ?MODULE),
+ cowboy_static:init(Req1, Opts);
+init(Req0, [{App, Path}]) ->
+ Req1 = rabbit_mgmt_headers:set_common_permission_headers(Req0, ?MODULE),
+ do_init(Req1, App, Path);
+init(Req0, [{App, Path}|Tail]) ->
+ Req1 = rabbit_mgmt_headers:set_common_permission_headers(Req0, ?MODULE),
+ PathInfo = cowboy_req:path_info(Req1),
+ Filepath = filename:join([code:priv_dir(App), Path|PathInfo]),
+ %% We use erl_prim_loader because the file may be inside an .ez archive.
+ FileInfo = erl_prim_loader:read_file_info(binary_to_list(Filepath)),
+ case FileInfo of
+ {ok, #file_info{type = regular}} -> do_init(Req1, App, Path);
+ {ok, #file_info{type = symlink}} -> do_init(Req1, App, Path);
+ _ -> init(Req0, Tail)
+ end.
+
+do_init(Req, App, Path) ->
+ cowboy_static:init(Req, {priv_dir, App, Path}).
+
+malformed_request(Req, State) ->
+ cowboy_static:malformed_request(Req, State).
+
+forbidden(Req, State) ->
+ cowboy_static:forbidden(Req, State).
+
+content_types_provided(Req, State) ->
+ cowboy_static:content_types_provided(Req, State).
+
+resource_exists(Req, State) ->
+ cowboy_static:resource_exists(Req, State).
+
+last_modified(Req, State) ->
+ cowboy_static:last_modified(Req, State).
+
+generate_etag(Req, State) ->
+ cowboy_static:generate_etag(Req, State).
+
+get_file(Req, State) ->
+ cowboy_static:get_file(Req, State).