@@ -18,9 +18,7 @@ defmodule Livebook.ZTA.LivebookTeams do
1818 id = Keyword . fetch! ( opts , :identity_key )
1919 team = Livebook.Hubs . fetch_hub! ( id )
2020
21- if :ets . whereis ( __MODULE__ ) == :undefined do
22- :ets . new ( __MODULE__ , [ :named_table , :public , :set , read_concurrency: true ] )
23- end
21+ :ets . new ( name , [ :named_table , :public , :set , read_concurrency: true ] )
2422
2523 NimbleZTA . put ( name , team )
2624 :ignore
@@ -31,7 +29,7 @@ defmodule Livebook.ZTA.LivebookTeams do
3129 team = NimbleZTA . get ( name )
3230
3331 if Livebook.Hubs.TeamClient . identity_enabled? ( team . id ) do
34- handle_request ( conn , team , conn . params )
32+ handle_request ( name , conn , team , conn . params )
3533 else
3634 { conn , % { } }
3735 end
@@ -55,14 +53,16 @@ defmodule Livebook.ZTA.LivebookTeams do
5553 |> redirect ( external: url )
5654 end
5755
58- defp handle_request ( conn , team , % { "teams_identity" => _ , "code" => code } ) do
56+ defp handle_request ( name , conn , team , % { "teams_identity" => _ , "code" => code } ) do
5957 with { :ok , access_token } <- retrieve_access_token ( team , code ) ,
6058 { :ok , payload } <- Teams.Requests . get_user_info ( team , access_token ) do
6159 metadata = build_metadata ( team . id , payload )
62- :ets . insert ( __MODULE__ , { access_token , { System . os_time ( :second ) + 3 * 3600 , metadata } } )
60+ exp = System . os_time ( :second ) + 3 * 3600
61+ :ets . insert ( name , { access_token , { exp , metadata } } )
6362
6463 { conn
6564 |> put_session ( :livebook_teams_access_token , access_token )
65+ |> put_session ( :livebook_teams_metadata_node , node ( ) )
6666 |> redirect ( to: conn . request_path )
6767 |> halt ( ) , metadata }
6868 else
@@ -74,14 +74,14 @@ defmodule Livebook.ZTA.LivebookTeams do
7474 end
7575 end
7676
77- defp handle_request ( conn , _team , % { "teams_identity" => _ , "failed_reason" => reason } ) do
77+ defp handle_request ( _name , conn , _team , % { "teams_identity" => _ , "failed_reason" => reason } ) do
7878 { conn
7979 |> put_session ( :teams_failed_reason , reason )
8080 |> redirect ( to: conn . request_path )
8181 |> halt ( ) , nil }
8282 end
8383
84- defp handle_request ( conn , team , % { "teams_redirect" => _ , "redirect_to" => redirect_to } ) do
84+ defp handle_request ( _name , conn , team , % { "teams_redirect" => _ , "redirect_to" => redirect_to } ) do
8585 case Teams.Requests . create_auth_request ( team ) do
8686 { :ok , % { "authorize_uri" => authorize_uri } } ->
8787 uri =
@@ -101,10 +101,10 @@ defmodule Livebook.ZTA.LivebookTeams do
101101 end
102102 end
103103
104- defp handle_request ( conn , team , _params ) do
104+ defp handle_request ( name , conn , team , _params ) do
105105 case get_session ( conn ) do
106106 % { "livebook_teams_access_token" => access_token } ->
107- validate_access_token ( conn , team , access_token )
107+ validate_access_token ( name , conn , team , access_token )
108108
109109 % { "teams_error" => true } ->
110110 { conn
@@ -166,20 +166,27 @@ defmodule Livebook.ZTA.LivebookTeams do
166166 { conn |> html ( html_document ) |> halt ( ) , nil }
167167 end
168168
169- defp validate_access_token ( conn , team , access_token ) do
169+ defp validate_access_token ( name , conn , team , access_token ) do
170+ node = get_session ( conn , :livebook_teams_metadata_node )
171+
170172 case Teams.Requests . get_user_info ( team , access_token ) do
171173 { :ok , payload } ->
172174 { conn , build_metadata ( team . id , payload ) }
173175
174176 :econnrefused ->
175- data = :ets . lookup_element ( __MODULE__ , access_token , 2 , nil )
177+ data =
178+ try do
179+ :erpc . call ( node , :ets , :lookup_element , [ name , access_token , 2 , nil ] )
180+ catch
181+ _ , _ -> nil
182+ end
176183
177184 case { System . os_time ( :second ) , data } do
178185 { current_timestamp , { exp , metadata } } when current_timestamp <= exp ->
179186 { conn , metadata }
180187
181188 { _ , entry } ->
182- entry && :ets . delete ( __MODULE__ , access_token )
189+ entry && :erpc . call ( node , :ets , :delete , [ name , access_token ] )
183190
184191 { conn
185192 |> put_status ( :service_unavailable )
0 commit comments