mirror of
https://github.com/internetee/epp_proxy.git
synced 2025-08-15 12:03:47 +02:00
Add router
This commit is contained in:
parent
e87ac6cf2e
commit
cd21f70da5
9 changed files with 180 additions and 5 deletions
1
apps/epp_proxy/src/certs.erl
Normal file
1
apps/epp_proxy/src/certs.erl
Normal file
|
@ -0,0 +1 @@
|
|||
-module(certs).
|
|
@ -1,9 +1,17 @@
|
|||
-module(epp_xml).
|
||||
|
||||
-export([find_cltrid/1, parse/1]).
|
||||
-export([find_cltrid/1, get_command/1, parse/1]).
|
||||
|
||||
-include_lib("xmerl/include/xmerl.hrl").
|
||||
|
||||
%% Get command from an xmlElement. Otherwise return undefined.
|
||||
get_command(Record) when is_record(Record, xmlElement) ->
|
||||
case xmerl_xpath:string("name(/epp/command/*[1])", Record) of
|
||||
{xmlObj, string, []} -> undefined;
|
||||
{xmlObj, string, Command} -> Command
|
||||
end;
|
||||
get_command(_) -> undefined.
|
||||
|
||||
%% xml_erl expects a list of characters, so let's give it to it.
|
||||
%% Otherwise return an error tuple.
|
||||
parse(Text) when is_list(Text) -> parse_list(Text);
|
||||
|
|
57
apps/epp_proxy/src/router.erl
Normal file
57
apps/epp_proxy/src/router.erl
Normal file
|
@ -0,0 +1,57 @@
|
|||
-module(router).
|
||||
|
||||
-export([route_request/1, is_valid_epp_command/1]).
|
||||
|
||||
-define(validCommands, ["hello", "login", "logout", "check", "info", "poll",
|
||||
"create", "delete", "renew", "update", "transfer"]).
|
||||
|
||||
%% By default, return test values. This might cause issues in production.
|
||||
-define(baseSessionUrl,
|
||||
case application:get_env(epp_proxy, epp_session_url) of
|
||||
undefined -> "https://registry.test/epp/session/";
|
||||
{ok, Value} -> Value
|
||||
end).
|
||||
|
||||
-define(baseCommandUrl,
|
||||
case application:get_env(epp_proxy, epp_command_url) of
|
||||
undefined -> "https://registry.test/epp/command/";
|
||||
{ok, Value} -> Value
|
||||
end).
|
||||
|
||||
%% Save yourself some checking beforehand.
|
||||
is_valid_epp_command(Command) ->
|
||||
lists:member(Command, ?validCommands).
|
||||
|
||||
%% Base router
|
||||
route_request(Command) when is_binary(Command) ->
|
||||
List = binary_to_list(Command),
|
||||
url_map(List);
|
||||
route_request(Command) when is_list(Command) -> url_map(Command).
|
||||
|
||||
%% Actually route to places
|
||||
url_map(Command) when is_list(Command) ->
|
||||
case Command of
|
||||
%% Session commands
|
||||
"hello" -> string:concat(base_session_url(), Command);
|
||||
"login" -> string:concat(base_session_url(), Command);
|
||||
"logout" -> string:concat(base_session_url(), Command);
|
||||
%% Poll commands
|
||||
"check" -> string:concat(base_command_url(), Command);
|
||||
"info" -> string:concat(base_command_url(), Command);
|
||||
"poll" -> string:concat(base_command_url(), Command);
|
||||
%% Transform commands
|
||||
"create" -> string:concat(base_command_url(), Command);
|
||||
"delete" -> string:concat(base_command_url(), Command);
|
||||
"renew" -> string:concat(base_command_url(), Command);
|
||||
"update" -> string:concat(base_command_url(), Command);
|
||||
% Transfer is both poll and query
|
||||
"transfer" -> string:concat(base_command_url(), Command)
|
||||
% Anything else should fail.
|
||||
end.
|
||||
|
||||
%% Just return the macros as defined
|
||||
base_session_url() ->
|
||||
?baseSessionUrl.
|
||||
|
||||
base_command_url() ->
|
||||
?baseCommandUrl.
|
12
apps/epp_proxy/test/epp_xml_SUITE.erl
Normal file
12
apps/epp_proxy/test/epp_xml_SUITE.erl
Normal file
|
@ -0,0 +1,12 @@
|
|||
-module(epp_xml_SUITE).
|
||||
|
||||
-include_lib("common_test/include/ct.hrl").
|
||||
|
||||
-export([all/0]).
|
||||
-export([run_eunit/1]).
|
||||
|
||||
all() -> [run_eunit].
|
||||
|
||||
%% Run Unit tests
|
||||
run_eunit(_Config) ->
|
||||
ok = eunit:test(epp_xml_tests).
|
|
@ -15,6 +15,12 @@
|
|||
</command>
|
||||
</epp>").
|
||||
|
||||
-define(validXMLNotEPPList,
|
||||
"<user>
|
||||
<name>test</name>
|
||||
<email>test@test.com</email>
|
||||
</user>").
|
||||
|
||||
%% parse
|
||||
parse_not_a_list_or_binary_test() ->
|
||||
Input = 1234,
|
||||
|
@ -33,11 +39,11 @@ parse_sample_valid_xml_binary_test() ->
|
|||
|
||||
parse_sample_invalid_xml_list_test() ->
|
||||
Input = "Some text",
|
||||
{error, Error} = epp_xml:parse(Input).
|
||||
{error, {fatal, _Details}} = epp_xml:parse(Input).
|
||||
|
||||
parse_sample_invalid_xml_binary_test() ->
|
||||
Input = list_to_binary("Some text"),
|
||||
{error, Error} = epp_xml:parse(Input).
|
||||
{error, {fatal, _Details}} = epp_xml:parse(Input).
|
||||
|
||||
%% find_cltrid
|
||||
find_cltrid_empty_list_test() ->
|
||||
|
@ -56,5 +62,19 @@ find_cltrid_binary_test() ->
|
|||
Input = ?sampleCommandList,
|
||||
?assertEqual(<<"sample1trid">>, epp_xml:find_cltrid(Input)).
|
||||
|
||||
|
||||
%% get_command
|
||||
get_command_success_test() ->
|
||||
%% We require an existing xlmElement record to pass around.
|
||||
{ok, XMLElement} = epp_xml:parse(?sampleCommandList),
|
||||
Command = epp_xml:get_command(XMLElement),
|
||||
?assertEqual("login", Command).
|
||||
|
||||
get_command_xml_not_epp_failure_test() ->
|
||||
{ok, XMLElement} = epp_xml:parse(?validXMLNotEPPList),
|
||||
Command = epp_xml:get_command(XMLElement),
|
||||
?assertEqual(undefined, Command).
|
||||
|
||||
get_command_failure_test() ->
|
||||
%% Can pass any garbage, should get back undefined.,
|
||||
Command = epp_xml:get_command("Some random string"),
|
||||
?assertEqual(undefined, Command).
|
||||
|
|
12
apps/epp_proxy/test/router_SUITE.erl
Normal file
12
apps/epp_proxy/test/router_SUITE.erl
Normal file
|
@ -0,0 +1,12 @@
|
|||
-module(router_SUITE).
|
||||
|
||||
-include_lib("common_test/include/ct.hrl").
|
||||
|
||||
-export([all/0]).
|
||||
-export([run_eunit/1]).
|
||||
|
||||
all() -> [run_eunit].
|
||||
|
||||
%% Run Unit tests
|
||||
run_eunit(_Config) ->
|
||||
ok = eunit:test(router_tests).
|
56
apps/epp_proxy/test/router_tests.erl
Normal file
56
apps/epp_proxy/test/router_tests.erl
Normal file
|
@ -0,0 +1,56 @@
|
|||
-module(router_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
is_valid_epp_command_test() ->
|
||||
Commands = ["hello", "login", "logout", "check", "info", "poll",
|
||||
"create", "delete", "renew", "update", "transfer"],
|
||||
lists:foreach(fun (N) ->
|
||||
?assert(router:is_valid_epp_command(N))
|
||||
end,
|
||||
Commands).
|
||||
|
||||
%% TODO: Make less verbose and repetitive
|
||||
hello_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/session/hello", router:route_request("hello")),
|
||||
?assertEqual("https://registry.test/epp/session/hello", router:route_request(<<"hello">>)).
|
||||
|
||||
login_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/session/login", router:route_request("login")),
|
||||
?assertEqual("https://registry.test/epp/session/login", router:route_request(<<"login">>)).
|
||||
|
||||
logout_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/session/logout", router:route_request("logout")),
|
||||
?assertEqual("https://registry.test/epp/session/logout", router:route_request(<<"logout">>)).
|
||||
|
||||
check_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/check", router:route_request("check")),
|
||||
?assertEqual("https://registry.test/epp/command/check", router:route_request(<<"check">>)).
|
||||
|
||||
info_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/info", router:route_request("info")),
|
||||
?assertEqual("https://registry.test/epp/command/info", router:route_request(<<"info">>)).
|
||||
|
||||
poll_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/poll", router:route_request("poll")),
|
||||
?assertEqual("https://registry.test/epp/command/poll", router:route_request(<<"poll">>)).
|
||||
|
||||
create_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/create", router:route_request("create")),
|
||||
?assertEqual("https://registry.test/epp/command/create", router:route_request(<<"create">>)).
|
||||
|
||||
delete_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/delete", router:route_request("delete")),
|
||||
?assertEqual("https://registry.test/epp/command/delete", router:route_request(<<"delete">>)).
|
||||
|
||||
renew_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/renew", router:route_request("renew")),
|
||||
?assertEqual("https://registry.test/epp/command/renew", router:route_request(<<"renew">>)).
|
||||
|
||||
update_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/update", router:route_request("update")),
|
||||
?assertEqual("https://registry.test/epp/command/update", router:route_request(<<"update">>)).
|
||||
|
||||
transfer_url_test() ->
|
||||
?assertEqual("https://registry.test/epp/command/transfer", router:route_request("transfer")),
|
||||
?assertEqual("https://registry.test/epp/command/transfer", router:route_request(<<"transfer">>)).
|
|
@ -1,3 +1,6 @@
|
|||
[
|
||||
{epp_proxy, []}
|
||||
{epp_proxy, [{tcp_port, 3333},
|
||||
{tls_port, 4444},
|
||||
{epp_session_url, "https://registry.test/epp/session/"},
|
||||
{epp_command_url, "https://registry.test/epp/command/"}]}
|
||||
].
|
||||
|
|
6
config/test.config
Normal file
6
config/test.config
Normal file
|
@ -0,0 +1,6 @@
|
|||
[
|
||||
{epp_proxy, [{tcp_port, 1133},
|
||||
{tls_port, 4444},
|
||||
{epp_session_url, "https://registry.test/epp/session/"},
|
||||
{epp_command_url, "https://registry.test/epp/command/"}]}
|
||||
].
|
Loading…
Add table
Add a link
Reference in a new issue