| summaryrefslogtreecommitdiff | 
diff options
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) +   }. | 


