%%%-------------------------------------------------------------------
%% @doc Minimal Cowboy HTTP listener for vpn administration endpoints.
%%%-------------------------------------------------------------------
-module(vpn_http).
-export([start_link/0,
stop/0]).
-define(LISTENER, ?MODULE).
-define(DEFAULT_PORT, 8080).
start_link() ->
Port = application:get_env(vpn, http_port, ?DEFAULT_PORT),
Dispatch = cowboy_router:compile([
{'_', [
{"/", vpn_dashboard_http, []},
{"/admin", vpn_dashboard_http, []},
{"/admin/n2o", vpn_n2o_admin, []},
{"/ws/[...]", n2o_cowboy, []},
{"/n2o/[...]", cowboy_static, {dir, code:priv_dir(n2o), [{mimetypes, cow_mimetypes, all}]}},
{"/nitro/[...]", cowboy_static, {dir, code:priv_dir(nitro), [{mimetypes, cow_mimetypes, all}]}},
{"/admin/peer/:id/start", vpn_peer_action_http, #{action => start}},
{"/admin/peer/:id/stop", vpn_peer_action_http, #{action => stop}},
{"/admin/reload", vpn_reload_http, []},
{"/api/admin/summary", vpn_admin_http, []}
]}
]),
cowboy:start_clear(?LISTENER,
[{port, Port}],
#{env => #{dispatch => Dispatch}}).
stop() ->
cowboy:stop_listener(?LISTENER).