summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-08-10 16:46:05 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-08-10 16:46:05 +0200 |
commit | d1ab7e7cfe14f2cad9774db47f4f1dd995e5b40c (patch) | |
tree | b4833d2114cb12b2997d33549427a204140c134c /src/login | |
parent | cbae439196de8382d5218f11e7a3afd812a5ae52 (diff) |
Adds some progress on user registration.
Diffstat (limited to 'src/login')
-rw-r--r-- | src/login/lgn_handler.erl | 19 | ||||
-rw-r--r-- | src/login/query/lgn_sign_up.erl | 130 |
2 files changed, 146 insertions, 3 deletions
diff --git a/src/login/lgn_handler.erl b/src/login/lgn_handler.erl index dc154b0..fe87bc6 100644 --- a/src/login/lgn_handler.erl +++ b/src/login/lgn_handler.erl @@ -17,7 +17,7 @@ ensure_player_exists (ID, Username, Password, Email) -> case shr_database:fetch(player_db, ID, admin) of {ok, _} -> ok; not_found -> - shr_database:insert + shr_database:insert_at ( player_db, ID, @@ -27,10 +27,10 @@ ensure_player_exists (ID, Username, Password, Email) -> ) end, - case shr_database:fetch(login_db, ID, admin) of + case shr_database:fetch(login_db, Username, admin) of {ok, _} -> ok; not_found -> - shr_database:insert + shr_database:insert_at ( login_db, Username, @@ -40,6 +40,19 @@ ensure_player_exists (ID, Username, Password, Email) -> ) end, + case shr_database:fetch(login_db, Email, admin) of + {ok, _} -> ok; + not_found -> + shr_database:insert_at + ( + login_db, + Email, + any, + any, + ID + ) + end, + ok. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/login/query/lgn_sign_up.erl b/src/login/query/lgn_sign_up.erl new file mode 100644 index 0000000..ce35557 --- /dev/null +++ b/src/login/query/lgn_sign_up.erl @@ -0,0 +1,130 @@ +-module(lgn_sign_up). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("../../../include/yaws_api.hrl"). + +-record +( + input, + { + username :: binary(), + password :: binary(), + email :: binary() + } +). + +-record +( + query_state, + { + player :: shr_player:type() + } +). + +-type input() :: #input{}. +-type query_state() :: #query_state{}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([out/1]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec parse_input (binary()) -> input(). +parse_input (Req) -> + JSONReqMap = jiffy:decode(Req, [return_maps]), + Username = maps:get(<<"usr">>, JSONReqMap), + Password = maps:get(<<"pwd">>, JSONReqMap), + Email = maps:get(<<"eml">>, JSONReqMap), + + #input + { + username = Username, + password = Password, + email = Email + }. + +-spec register_user (input()) -> query_state(). +register_user (Input) -> + Username = Input#input.username, + Password = Input#input.password, + Email = Input#input.email, + + shr_janitor:new(login_db, Username), + shr_janitor:new(login_db, Email), + + ok = shr_database:reserve(login_db, Username, janitor), + ok = shr_database:reserve(login_db, Email, janitor), + + Player = shr_player:new(<<"">>, Username, Password, Email), + + {ok, PlayerID} = shr_database:insert(player_db, janitor, janitor, Player), + + shr_janitor:new(player_db, PlayerID), + + LoginUpdateQueryOps = + [ + shr_db_query:set_value(PlayerID), + shr_db_query:set_read_permission(any), + shr_db_query:set_write_permission([{user, PlayerID}]) + ], + + PlayerUpdateQueryOps = + [ + shr_db_query:set_field(shr_player:get_id_field(), PlayerID), + shr_db_query:set_read_permission(any), + shr_db_query:set_write_permission([{user, PlayerID}]) + ], + + ok = + shr_database:commit + ( + shr_db_query:new(login_db, Username, janitor, LoginUpdateQueryOps) + ), + + ok = + shr_database:commit + ( + shr_db_query:new(login_db, Email, janitor, LoginUpdateQueryOps) + ), + + ok = + shr_database:commit + ( + shr_db_query:new(player_db, PlayerID, janitor, PlayerUpdateQueryOps) + ), + + #query_state + { + player = shr_player:set_id(PlayerID, Player) + }. + +-spec generate_reply(query_state()) -> binary(). +generate_reply (QueryState) -> + Player = QueryState#query_state.player, + + SetSession = lgn_set_session:generate(Player), + Output = jiffy:encode([SetSession]), + + Output. + +-spec handle (binary()) -> binary(). +handle (Req) -> + Input = parse_input(Req), + %% TODO: validate input + QueryState = register_user(Input), + generate_reply(QueryState). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +out(A) -> + { + content, + "application/json; charset=UTF-8", + handle(A#arg.clidata) + }. |