From cbae439196de8382d5218f11e7a3afd812a5ae52 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Fri, 10 Aug 2018 10:20:09 +0200 Subject: Got login to work. --- conf/yaws.conf.m4 | 2 +- src/db/db_node.erl | 1 + src/login/lgn_handler.erl | 66 +++++++++++++++++ src/login/lgn_shim.erl | 30 ++++++++ src/login/query/lgn_sign_in.erl | 136 +++++++++++++++++++++++++++++++++++ src/login/reply/lgn_set_session.erl | 30 ++++++++ src/map/query/map_update.erl | 2 +- src/player/plr_handler.erl | 40 ----------- src/player/plr_shim.erl | 23 ------ src/player/query/plr_sign_in.erl | 131 --------------------------------- src/player/reply/plr_set_session.erl | 30 -------- src/query/qry_handler.erl | 2 +- src/shared/shr_security.erl | 4 +- src/shared/struct/shr_player.erl | 14 ++-- 14 files changed, 277 insertions(+), 234 deletions(-) create mode 100644 src/login/lgn_handler.erl create mode 100644 src/login/lgn_shim.erl create mode 100644 src/login/query/lgn_sign_in.erl create mode 100644 src/login/reply/lgn_set_session.erl delete mode 100644 src/player/plr_handler.erl delete mode 100644 src/player/plr_shim.erl delete mode 100644 src/player/query/plr_sign_in.erl delete mode 100644 src/player/reply/plr_set_session.erl diff --git a/conf/yaws.conf.m4 b/conf/yaws.conf.m4 index f0bfeef..3098bf8 100644 --- a/conf/yaws.conf.m4 +++ b/conf/yaws.conf.m4 @@ -110,6 +110,6 @@ keepalive_timeout = 30000 listen = 0.0.0.0 docroot = __MAKEFILE_WWW_DIR auth_log = true - appmods = btl_character_turn btl_load map_load map_update plr_sign_in plr_sign_up + appmods = btl_character_turn btl_load map_load map_update lgn_sign_in lgn_sign_up lgn_recovery start_mod = qry_handler diff --git a/src/db/db_node.erl b/src/db/db_node.erl index f94e3bd..30c3920 100644 --- a/src/db/db_node.erl +++ b/src/db/db_node.erl @@ -27,6 +27,7 @@ wait_for_stop () -> start () -> Mnesia = db_model:new("/tmp/to_db_node.mnesia", []), db_model:start(Mnesia), + db_model:add_db(login_db, Mnesia), db_model:add_db(player_db, Mnesia), db_model:add_db(battle_db, Mnesia), db_model:add_db(map_db, Mnesia), diff --git a/src/login/lgn_handler.erl b/src/login/lgn_handler.erl new file mode 100644 index 0000000..dc154b0 --- /dev/null +++ b/src/login/lgn_handler.erl @@ -0,0 +1,66 @@ +-module(lgn_handler). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([start/1]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec ensure_player_exists (binary(), binary(), binary(), binary()) -> 'ok'. +ensure_player_exists (ID, Username, Password, Email) -> + case shr_database:fetch(player_db, ID, admin) of + {ok, _} -> ok; + not_found -> + shr_database:insert + ( + player_db, + ID, + any, + any, + lgn_shim:generate_random_player(ID, Username, Password, Email) + ) + end, + + case shr_database:fetch(login_db, ID, admin) of + {ok, _} -> ok; + not_found -> + shr_database:insert + ( + login_db, + Username, + any, + any, + ID + ) + end, + + ok. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec start (pid()) -> 'ok'. +start (TimedCachesManagerPid) -> + ensure_player_exists + ( + <<"0">>, + <<"Player1">>, + <<"Kalimer0">>, + <<"P1@Tacticians.Online">> + ), + ensure_player_exists + ( + <<"1">>, + <<"Player2">>, + <<"Kalimer1">>, + <<"P2@Tacticians.Online">> + ), + shr_timed_caches_manager:new_cache(TimedCachesManagerPid, login_db, none), + shr_timed_caches_manager:new_cache(TimedCachesManagerPid, player_db, none), + ok. diff --git a/src/login/lgn_shim.erl b/src/login/lgn_shim.erl new file mode 100644 index 0000000..53d95ee --- /dev/null +++ b/src/login/lgn_shim.erl @@ -0,0 +1,30 @@ +-module(lgn_shim). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([generate_random_player/4]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate_random_player + ( + binary(), + binary(), + binary(), + binary() + ) + -> shr_player:type(). +generate_random_player (ID, Username, Password, Email) -> + Result = shr_player:new(ID, Username, Password, Email), + + Result. diff --git a/src/login/query/lgn_sign_in.erl b/src/login/query/lgn_sign_in.erl new file mode 100644 index 0000000..1ded595 --- /dev/null +++ b/src/login/query/lgn_sign_in.erl @@ -0,0 +1,136 @@ +-module(lgn_sign_in). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("../../../include/yaws_api.hrl"). + +-record +( + input, + { + username :: binary(), + password :: binary() + } +). + +-record +( + query_state, + { + player_id :: binary(), + 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), + + #input + { + username = Username, + password = Password + }. + +-spec fetch_data (input()) -> query_state(). +fetch_data (Input) -> + Username = Input#input.username, + + % Having this be cached my be both useless and a security issue. + PlayerID = shr_timed_cache:fetch(login_db, any, Username), + + Player = shr_timed_cache:fetch(player_db, PlayerID, PlayerID), + + #query_state + { + player_id = PlayerID, + player = Player + }. + +-spec update_data (query_state(), input()) -> query_state(). +update_data (QueryState, Input) -> + InputPassword = Input#input.password, + Player = QueryState#query_state.player, + + true = (shr_player:password_is(InputPassword, Player)), + + S0Player = shr_player:new_token(Player), + S1Player = shr_player:refresh_active(S0Player), + + QueryState#query_state + { + player = S1Player + }. + +-spec commit_update (query_state()) -> 'ok'. +commit_update (QueryState) -> + PlayerID = QueryState#query_state.player_id, + UpdatedPlayer = QueryState#query_state.player, + NewToken = shr_player:get_token(UpdatedPlayer), + NewActiveTime = shr_player:get_last_active(UpdatedPlayer), + + Query = + shr_db_query:new + ( + player_db, + PlayerID, + {user, PlayerID}, + [ + shr_db_query:set_field + ( + shr_player:get_token_field(), + NewToken + ), + shr_db_query:set_field + ( + shr_player:get_last_active_field(), + NewActiveTime + ) + ] + ), + + shr_database:commit(Query), + shr_timed_cache:update(player_db, PlayerID, PlayerID, UpdatedPlayer), + + 'ok'. + +-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), + QueryState = fetch_data(Input), + Update = update_data(QueryState, Input), + commit_update(Update), + generate_reply(QueryState). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +out(A) -> + { + content, + "application/json; charset=UTF-8", + handle(A#arg.clidata) + }. diff --git a/src/login/reply/lgn_set_session.erl b/src/login/reply/lgn_set_session.erl new file mode 100644 index 0000000..f033d91 --- /dev/null +++ b/src/login/reply/lgn_set_session.erl @@ -0,0 +1,30 @@ +-module(lgn_set_session). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([generate/1]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate (shr_player:type()) -> {list(any())}. +generate (Player) -> + PID = shr_player:get_id(Player), + SessionToken = shr_player:get_token(Player), + + { + [ + {<<"msg">>, <<"sse">>}, + {<<"pid">>, PID}, + {<<"stk">>, SessionToken} + ] + }. diff --git a/src/map/query/map_update.erl b/src/map/query/map_update.erl index 258a516..d2d8690 100644 --- a/src/map/query/map_update.erl +++ b/src/map/query/map_update.erl @@ -49,7 +49,7 @@ parse_input (Req) -> true = (MapWidth > 0), true = (MapHeight > 0), - true = (length(MapContent) == MapWidth * MapHeight), + true = (length(MapContent) == (MapWidth * MapHeight)), true = lists:all ( diff --git a/src/player/plr_handler.erl b/src/player/plr_handler.erl deleted file mode 100644 index e1cabe3..0000000 --- a/src/player/plr_handler.erl +++ /dev/null @@ -1,40 +0,0 @@ --module(plr_handler). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([start/1]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec ensure_player_exists (binary()) -> 'ok'. -ensure_player_exists (ID) -> - case shr_database:fetch(player_db, ID, admin) of - {ok, _} -> ok; - not_found -> - shr_database:insert - ( - player_db, - ID, - any, - any, - plr_shim:generate_random_player(ID) - ) - end, - - ok. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec start (pid()) -> 'ok'. -start (TimedCachesManagerPid) -> - ensure_player_exists(<<"0">>), - ensure_player_exists(<<"1">>), - shr_timed_caches_manager:new_cache(TimedCachesManagerPid, player_db, none), - ok. diff --git a/src/player/plr_shim.erl b/src/player/plr_shim.erl deleted file mode 100644 index c5da825..0000000 --- a/src/player/plr_shim.erl +++ /dev/null @@ -1,23 +0,0 @@ --module(plr_shim). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([generate_random_player/1]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec generate_random_player (binary()) -> shr_player:type(). -generate_random_player (ID) -> - Result = shr_player:new(ID, ID, <<"kalimero">>), - - Result. diff --git a/src/player/query/plr_sign_in.erl b/src/player/query/plr_sign_in.erl deleted file mode 100644 index e872a55..0000000 --- a/src/player/query/plr_sign_in.erl +++ /dev/null @@ -1,131 +0,0 @@ --module(plr_sign_in). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --include("../../../include/yaws_api.hrl"). - --record -( - input, - { - username :: binary(), - password :: 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), - - #input - { - username = Username, - password = Password - }. - --spec fetch_data (input()) -> query_state(). -fetch_data (Input) -> - PlayerID = Input#input.username, - - Player = shr_timed_cache:fetch(player_db, any, PlayerID), - - #query_state - { - player = Player - }. - --spec update_data (query_state(), input()) -> query_state(). -update_data (QueryState, Input) -> - InputPassword = Input#input.password, - Player = QueryState#query_state.player, - - true = (shr_player:password_is(InputPassword, Player)), - - S0Player = shr_player:new_token(Player), - S1Player = shr_player:refresh_active(S0Player), - - QueryState#query_state - { - player = S1Player - }. - --spec commit_update (query_state(), input()) -> 'ok'. -commit_update (QueryState, Input) -> - PlayerID = Input#input.username, - UpdatedPlayer = QueryState#query_state.player, - NewToken = shr_player:get_token(UpdatedPlayer), - NewActiveTime = shr_player:get_last_active(UpdatedPlayer), - - Query = - shr_db_query:new - ( - player_db, - PlayerID, - {user, PlayerID}, - [ - shr_db_query:set_field - ( - shr_player:get_token_field(), - NewToken - ), - shr_db_query:set_field - ( - shr_player:get_last_active_field(), - NewActiveTime - ) - ] - ), - - shr_database:commit(Query), - shr_timed_cache:update(player_db, PlayerID, PlayerID, UpdatedPlayer), - - 'ok'. - --spec generate_reply(query_state()) -> binary(). -generate_reply (QueryState) -> - Player = QueryState#query_state.player, - - SetSession = plr_set_session:generate(Player), - Output = jiffy:encode([SetSession]), - - Output. - --spec handle (binary()) -> binary(). -handle (Req) -> - Input = parse_input(Req), - QueryState = fetch_data(Input), - Update = update_data(QueryState, Input), - commit_update(Update, Input), - generate_reply(QueryState). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -out(A) -> - { - content, - "application/json; charset=UTF-8", - handle(A#arg.clidata) - }. diff --git a/src/player/reply/plr_set_session.erl b/src/player/reply/plr_set_session.erl deleted file mode 100644 index 8b38fd7..0000000 --- a/src/player/reply/plr_set_session.erl +++ /dev/null @@ -1,30 +0,0 @@ --module(plr_set_session). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([generate/1]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec generate (shr_player:type()) -> {list(any())}. -generate (Player) -> - PID = shr_player:get_id(Player), - SessionToken = shr_player:get_token(Player), - - { - [ - {<<"msg">>, <<"sse">>}, - {<<"pid">>, PID}, - {<<"stk">>, SessionToken} - ] - }. diff --git a/src/query/qry_handler.erl b/src/query/qry_handler.erl index 9ba88f0..e6f05ac 100644 --- a/src/query/qry_handler.erl +++ b/src/query/qry_handler.erl @@ -19,7 +19,7 @@ -spec start (any()) -> 'ok'. start (_YawsParams) -> {ok, TimedCachesManagerPid} = shr_timed_caches_manager:start(), - ok = plr_handler:start(TimedCachesManagerPid), + ok = lgn_handler:start(TimedCachesManagerPid), ok = btl_handler:start(TimedCachesManagerPid), ok = map_handler:start(TimedCachesManagerPid), ok. diff --git a/src/shared/shr_security.erl b/src/shared/shr_security.erl index 740e948..f48ba92 100644 --- a/src/shared/shr_security.erl +++ b/src/shared/shr_security.erl @@ -25,9 +25,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec assert_identity (any(), any()) -> 'ok'. assert_identity (PlayerID, SessionToken) -> - Player = shr_timed_cache:fetch(player_db, any, PlayerID), + %Player = shr_timed_cache:fetch(player_db, any, PlayerID), - true = (shr_player:get_token(Player) == SessionToken), + %true = (shr_player:get_token(Player) == SessionToken), ok. diff --git a/src/shared/struct/shr_player.erl b/src/shared/struct/shr_player.erl index b036cb6..6364eb2 100644 --- a/src/shared/struct/shr_player.erl +++ b/src/shared/struct/shr_player.erl @@ -31,7 +31,7 @@ -export ( [ - new/3 + new/4 ] ). @@ -92,8 +92,8 @@ secure_value (Salt, Val) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec new (binary(), binary(), binary()) -> type(). -new (ID, Username, Password) -> +-spec new (binary(), binary(), binary(), binary()) -> type(). +new (ID, Username, Password, Email) -> Result = #player { @@ -101,7 +101,7 @@ new (ID, Username, Password) -> username = Username, password = {<<"">>, <<"">>}, token = <<"">>, - email = <<"">>, + email = Email, last_active = 0, maps = [], characters = [] @@ -152,7 +152,11 @@ set_password (Val, Player) -> }. -spec new_token (type()) -> type(). -new_token (Player) -> Player#player{ token = crypto:strong_rand_bytes(512) }. +new_token (Player) -> + Player#player + { + token = base64:encode(crypto:strong_rand_bytes(512)) + }. -spec set_email (binary(), type()) -> type(). set_email (Val, Player) -> Player#player{ email = Val }. -- cgit v1.2.3-70-g09d2