Skip to content

Instantly share code, notes, and snippets.

@iporsut
Created September 2, 2019 03:39
Show Gist options
  • Save iporsut/73273e4757dc68145e92e4f32bf1b26c to your computer and use it in GitHub Desktop.
Save iporsut/73273e4757dc68145e92e4f32bf1b26c to your computer and use it in GitHub Desktop.
Port Elixir to Erlang
-module(reset_password_controller).
-export([do_reset/2]).
do_reset(Conn, #{"email" := Email, "reset_password_url" := Url, "forward_url" := ForwardUrl}) ->
try
validate_url(Url, "reset_password_url"),
validate_url(ForwardUrl, "forward_url"),
Request = reset_password_request(Email),
send_request_email(Request, Url, ForwardUrl),
render(Conn, empty, #{success => true})
catch
throw:Err -> case Err of
{error, user_email_not_found} ->
render(Conn, empty, #{success => true});
{error, Code, Meta} ->
handle_error(Conn, Code, Meta);
{error, Code} ->
handle_error(Conn, Code)
end
end.
reset_password_request(Email) ->
case reset_password_gate:request(Email) of
{ok, Request} ->
Request;
Error ->
throw(Error)
end.
send_request_email(Request, RedirectUrl, ForwardUrl) ->
mailer:deliver_now(forget_password_email:create(Request, RedirectUrl, ForwardUrl)).
validate_url(Url, ParamName) ->
case url_validator:allowed_redirect_url(Url) of
true ->
ok;
_ ->
throw({error, prohibited_url, [{param_name, ParamName}, {url, Url}]})
end.
render(_,_,_) ->
ok.
handle_error(_,_,_) ->
ok.
handle_error(_,_) ->
ok.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment