diff options
Diffstat (limited to 'lib/chessh/shell.ex')
-rw-r--r-- | lib/chessh/shell.ex | 51 |
1 files changed, 42 insertions, 9 deletions
diff --git a/lib/chessh/shell.ex b/lib/chessh/shell.ex index f9f475d..cf65ad4 100644 --- a/lib/chessh/shell.ex +++ b/lib/chessh/shell.ex @@ -1,18 +1,51 @@ defmodule Chessh.Shell do use Sshd.ShellHandler - def on_shell(_username, _public_key, _ip, _port) do - :ok = - IO.puts( - "Interactive example SSH shell - type exit ENTER to quit and it is running on #{inspect(self())}" - ) + def on_shell(_username, _pubkey, _ip, _port) do + IO.puts("Looks like you're on #{inspect(self())}") + loop() end - def on_connect(_username, _ip, _port, _method) do - Logger.debug("Connection established") + def on_connect(username, ip, port, method) do + Logger.debug(fn -> + """ + Incoming SSH shell #{inspect(self())} requested for #{username} from #{inspect(ip)}:#{inspect(port)} using #{inspect(method)} + """ + end) end - def on_disconnect(_username, _ip, _port) do - Logger.debug("Connection disestablished") + def on_disconnect(username, ip, port) do + Logger.debug(fn -> + "Disconnecting SSH shell for #{username} from #{inspect(ip)}:#{inspect(port)}" + end) + end + + defp loop() do + self_pid = self() + IO.write([IO.ANSI.home(), IO.ANSI.clear()]) + IO.puts("#{inspect(:io.columns())}") + IO.puts("#{inspect(:io.rows())}") + input = spawn(fn -> io_get(self_pid) end) + wait_input(input) + end + + defp wait_input(input) do + receive do + {:hello, message} -> + IO.puts(message) + loop() + + {:input, ^input, x} -> + IO.puts(x) + loop() + + x -> + Logger.debug(inspect(x)) + loop() + end + end + + defp io_get(pid) do + send(pid, {:input, self(), IO.gets("")}) end end |