From ea51b89dc611bd747044d4773865fa1f6c15fcd8 Mon Sep 17 00:00:00 2001 From: Simponic Date: Fri, 13 Jan 2023 19:49:33 -0700 Subject: [PATCH 1/3] handle_info instead of cast, @impl in serverkey --- lib/chessh/ssh/daemon.ex | 5 +++-- lib/chessh/ssh/server_key.ex | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/chessh/ssh/daemon.ex b/lib/chessh/ssh/daemon.ex index 1748e9e..e122f9a 100644 --- a/lib/chessh/ssh/daemon.ex +++ b/lib/chessh/ssh/daemon.ex @@ -15,7 +15,8 @@ defmodule Chessh.SSH.Daemon do end def init(state) do - GenServer.cast(self(), :start) + send(self(), :start) + {:ok, state} end @@ -58,7 +59,7 @@ defmodule Chessh.SSH.Daemon do def pwd_authenticate(username, password, inet, _state), do: pwd_authenticate(username, password, inet) - def handle_cast(:start, state) do + def handle_info(:start, state) do port = Application.fetch_env!(:chessh, :port) key_dir = String.to_charlist(Application.fetch_env!(:chessh, :key_dir)) max_sessions = Application.fetch_env!(:chessh, :max_sessions) diff --git a/lib/chessh/ssh/server_key.ex b/lib/chessh/ssh/server_key.ex index eae9577..71b6997 100644 --- a/lib/chessh/ssh/server_key.ex +++ b/lib/chessh/ssh/server_key.ex @@ -4,6 +4,7 @@ defmodule Chessh.SSH.ServerKey do @behaviour :ssh_server_key_api + @impl true def is_auth_key(key, username, _daemon_options) do PlayerSession.update_sessions_and_player_satisfies( username, @@ -11,6 +12,7 @@ defmodule Chessh.SSH.ServerKey do ) end + @impl true def host_key(algorithm, daemon_options) do :ssh_file.host_key(algorithm, daemon_options) end From a607da7918f1611a503d1e0e566883bc352c406e Mon Sep 17 00:00:00 2001 From: Simponic Date: Fri, 13 Jan 2023 21:07:00 -0700 Subject: [PATCH 2/3] Decrease burst ms again, fix insertion error with player session when using public key --- config/config.exs | 2 +- lib/chessh/schema/player_session.ex | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/config/config.exs b/config/config.exs index 2e20647..ad54ebf 100644 --- a/config/config.exs +++ b/config/config.exs @@ -15,7 +15,7 @@ config :chessh, RateLimits, jail_timeout_ms: 5 * 60 * 1000, jail_attempt_threshold: 15, max_concurrent_user_sessions: 5, - player_session_message_burst_ms: 1_000, + player_session_message_burst_ms: 500, player_session_message_burst_rate: 8 import_config "#{config_env()}.exs" diff --git a/lib/chessh/schema/player_session.ex b/lib/chessh/schema/player_session.ex index 8ca338c..b16519f 100644 --- a/lib/chessh/schema/player_session.ex +++ b/lib/chessh/schema/player_session.ex @@ -14,7 +14,7 @@ defmodule Chessh.PlayerSession do def changeset(player_session, attrs) do player_session - |> cast(attrs, [:login]) + |> cast(attrs, [:login, :node_id, :process]) end def concurrent_sessions(player) do @@ -58,12 +58,17 @@ defmodule Chessh.PlayerSession do "Creating session for player #{username} on node #{System.fetch_env!("NODE_ID")} with process #{inspect(self())}" ) - Repo.insert(%PlayerSession{ - login: DateTime.utc_now(), - node_id: System.fetch_env!("NODE_ID"), - player: player, - process: Utils.pid_to_str(self()) - }) + now = DateTime.utc_now() + + Repo.insert!( + %PlayerSession{ + login: now, + node_id: System.fetch_env!("NODE_ID"), + player: player, + process: Utils.pid_to_str(self()) + }, + on_conflict: :nothing + ) concurrent_sessions = PlayerSession.concurrent_sessions(player) From 2b06f5bf47ec5f8f084dae8f015ca3677d753a7d Mon Sep 17 00:00:00 2001 From: Simponic Date: Fri, 13 Jan 2023 21:08:44 -0700 Subject: [PATCH 3/3] Move port on test --- config/test.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/config/test.exs b/config/test.exs index 3605f1e..3319f9b 100644 --- a/config/test.exs +++ b/config/test.exs @@ -12,4 +12,5 @@ config :chessh, Chessh.Repo, pool: Ecto.Adapters.SQL.Sandbox config :chessh, + port: 34_355, key_dir: Path.join(Path.dirname(__DIR__), "priv/test_keys")