Skip to content

Instantly share code, notes, and snippets.

@srp
Last active January 2, 2017 19:14
Show Gist options
  • Save srp/d42fad048fd797b04b568dcca0e21115 to your computer and use it in GitHub Desktop.
Save srp/d42fad048fd797b04b568dcca0e21115 to your computer and use it in GitHub Desktop.
login(_DbConn, req#{body = <<>>}) ->
{error, "No body provided"};
login(DbConn, req#{body = ReqJsonStr}) ->
parse_json(DbConn, ReqJsonStr).
parse_json(DbConn, ReqJsonStr) ->
case json:parse(ReqJsonStr) of
{error, Reason} -> {error, Reason};
{ok, ReqJson} -> decode_json(DbConn, ReqJson)
end
decode_json(DbConn, ReqJson) ->
case validate_and_decode_login_request(ReqJson) of
{ok, #login_request{username = Username, password = Password}}) ->
db_find_user(DbConn, Username, Password)
end.
db_find_user(DbConn, Username, Password) ->
case db.find_user(DbConn, Username, Password) of
{:error, Reason} -> {:error, Reason};
{:ok, #user_details{hashed_password = HashedPassword}} ->
check_password(Username, Password, HashedPassword)
end.
check_password(Username, Password, HashedPassword) ->
case does_password_match(HashedPassword, Password) of
{error, Reason} ->
{error, Reason};
{ok, false} ->
{error, "Invalid username or password"}
{ok, true} ->
generate_jwt_token(Username)
end.
generate_jwt_token(Username) ->
case jwt.generate_token(Username) of
{error, Reason} ->
{error, Reason};
{ok, jwtToken} ->
{ok, 200, json:encode([{"token", jwtToken}])}
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment