summaryrefslogtreecommitdiff
path: root/lib/chessh
diff options
context:
space:
mode:
authorLogan Hunt <loganhunt@simponic.xyz>2023-01-13 21:18:34 -0700
committerSimponic <loganhunt@simponic.xyz>2023-01-13 21:23:46 -0700
commit53be77e2c57bac6b861d7c3d1d2d6355816a823b (patch)
treebf2db793a3e0f416b411283547e7f58411f80d9e /lib/chessh
parent87e42b29f004f67df2512c133de626c2b0804477 (diff)
parent2b06f5bf47ec5f8f084dae8f015ca3677d753a7d (diff)
downloadchessh-53be77e2c57bac6b861d7c3d1d2d6355816a823b.tar.gz
chessh-53be77e2c57bac6b861d7c3d1d2d6355816a823b.zip
Merge pull request #4 from Simponic/fix_pubkey
Fix pubkey
Diffstat (limited to 'lib/chessh')
-rw-r--r--lib/chessh/schema/player_session.ex19
-rw-r--r--lib/chessh/ssh/daemon.ex5
-rw-r--r--lib/chessh/ssh/server_key.ex2
3 files changed, 17 insertions, 9 deletions
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)
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