feat(auth): list/revoke sessions with device_name and client_type. Fixes EventHub/EventHubBack#74
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
%% @doc Add device_name and user_agent to auth_session (Back#74).
|
||||
-module('20260816180000_auth_session_device').
|
||||
|
||||
-export([up/0, down/0]).
|
||||
|
||||
-include("records.hrl").
|
||||
|
||||
up() ->
|
||||
case table_exists(auth_session) of
|
||||
false ->
|
||||
ok;
|
||||
true ->
|
||||
ensure_device_fields(),
|
||||
ok
|
||||
end.
|
||||
|
||||
down() ->
|
||||
ok.
|
||||
|
||||
table_exists(Table) ->
|
||||
try lists:member(Table, mnesia:system_info(tables))
|
||||
catch
|
||||
_:_ -> false
|
||||
end.
|
||||
|
||||
ensure_device_fields() ->
|
||||
Attrs = mnesia:table_info(auth_session, attributes),
|
||||
case lists:member(device_name, Attrs) andalso lists:member(user_agent, Attrs) of
|
||||
true ->
|
||||
ok;
|
||||
false ->
|
||||
Fun = fun(Rec) ->
|
||||
case tuple_size(Rec) of
|
||||
%% auth_session atom + 10 fields (pre-device)
|
||||
11 ->
|
||||
list_to_tuple(tuple_to_list(Rec) ++ [<<>>, <<>>]);
|
||||
_ ->
|
||||
Rec
|
||||
end
|
||||
end,
|
||||
case mnesia:transform_table(auth_session, Fun, record_info(fields, auth_session)) of
|
||||
{atomic, ok} -> ok;
|
||||
{aborted, Reason} -> error({transform_auth_session_failed, Reason})
|
||||
end
|
||||
end.
|
||||
Reference in New Issue
Block a user