diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml new file mode 100644 index 0000000..06dc50f --- /dev/null +++ b/.github/workflows/elixir.yml @@ -0,0 +1,27 @@ +on: push + +jobs: + test: + runs-on: ubuntu-latest + + services: + db: + image: postgres:11 + ports: ['5432:5432'] + env: + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-elixir@v1 + with: + otp-version: '25' + elixir-version: '1.14.0' + - run: mix deps.get + - run: mix deps.compile + - run: mix test \ No newline at end of file diff --git a/.gitignore b/.gitignore index 16acc84..84a9880 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,3 @@ server-*.tar # Temporary files, for example, from tests. /tmp/ - -# Private files, like configuration secrets or keys. -/priv/ \ No newline at end of file diff --git a/README.md b/README.md index e4aaab9..967c4dc 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,2 @@ -# Server - -**TODO: Add description** - -## Installation - -If [available in Hex](https://hex.pm/docs/publish), the package can be installed -by adding `server` to your list of dependencies in `mix.exs`: - -```elixir -def deps do - [ - {:server, "~> 0.1.0"} - ] -end -``` - -Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc) -and published on [HexDocs](https://hexdocs.pm). Once published, the docs can -be found at . +# CheSSH diff --git a/config/test.exs b/config/test.exs index 8ab016e..6ade5f8 100644 --- a/config/test.exs +++ b/config/test.exs @@ -6,3 +6,6 @@ config :chessh, Chessh.Repo, password: "postgres", hostname: "localhost", pool: Ecto.Adapters.SQL.Sandbox + +config :esshd, + priv_dir: Path.join(Path.dirname(__DIR__), "priv/test_keys") diff --git a/priv/.gitignore b/priv/.gitignore new file mode 100644 index 0000000..2744c99 --- /dev/null +++ b/priv/.gitignore @@ -0,0 +1 @@ +keys/ \ No newline at end of file diff --git a/priv/repo/migrations/20221219082326_create_player.exs b/priv/repo/migrations/20221219082326_create_player.exs new file mode 100644 index 0000000..b99bb5e --- /dev/null +++ b/priv/repo/migrations/20221219082326_create_player.exs @@ -0,0 +1,15 @@ +defmodule Chessh.Repo.Migrations.CreatePlayer do + use Ecto.Migration + + def change do + execute "CREATE EXTENSION IF NOT EXISTS citext", "" + + create table(:players) do + add :username, :citext, null: false + add :hashed_password, :string, null: false + timestamps() + end + + create unique_index(:players, [:username]) + end +end diff --git a/priv/repo/migrations/20221219215005_add_keys.exs b/priv/repo/migrations/20221219215005_add_keys.exs new file mode 100644 index 0000000..15163dc --- /dev/null +++ b/priv/repo/migrations/20221219215005_add_keys.exs @@ -0,0 +1,14 @@ +defmodule Chessh.Repo.Migrations.AddKeys do + use Ecto.Migration + + def change do + create table(:keys) do + add :key, :string, null: false + add :name, :string, null: false + + add :player_id, references(:players) + + timestamps() + end + end +end diff --git a/priv/test_keys/authorized_keys b/priv/test_keys/authorized_keys new file mode 100644 index 0000000..e69de29 diff --git a/priv/test_keys/known_hosts b/priv/test_keys/known_hosts new file mode 100644 index 0000000..5416c18 --- /dev/null +++ b/priv/test_keys/known_hosts @@ -0,0 +1 @@ +127.0.0.1,127.0.0.1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC7Mpf2QIL32MmKxcrXAoZM3l7/hBy+8d+WqTRMun+tC/XYNiXSIDuZv01an3D1d22fmSpZiprFQzjB4yEz23qw= logan@yagami diff --git a/priv/test_keys/ssh_host_dsa_key b/priv/test_keys/ssh_host_dsa_key new file mode 100644 index 0000000..fdc9fa5 --- /dev/null +++ b/priv/test_keys/ssh_host_dsa_key @@ -0,0 +1,21 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH +NzAAAAgQCpKTDuhGwm9AXQPZuWSdHxraaiUV4cgu4uFlgHahV8Qzy9MGpDpp9lbt3uGe1F +MI0jQeIx0Bc3KxSiwLl0ggjF+f5100eZBRdw+3km/BQKaZYdPgSiZ9QdOAN2rRKl653uqA +85fnhm1UwS+q37RSvdJotBTh8mJk/PILGwRCoEhwAAABUA6hwmQu2jkb2KhfL/TjVTlwJF +Gk0AAACAMd1xLqW/iXVzWpNUxMUNeevDOwhY+RqgZUripwZhKuoNuFiLu79UkNpd/mKTkL +99PuxnM6RdaWjx54rTqw3DLsFjNR6mx5HOlDyIyIaGlXqIDiiGMNoFTCECJnYEupMtxwA1 +a5jj742pDyKAspO9MwVrsHPNkAuAXOsnefFLtRkAAACBAIHWLyhaO8us6vzxlX5xH0bcbL +RNh8XcTXu5/xRB7kX1mBITZKBKm1RhBYPTrADlzC/P+gu4hF14KjvAU+pRCYOE2x2VT036 +glcMQxa40id2g5v9tiIwoZF/UE0w8yargNd4kzVpWO2ecq8VYQ/j8o895Fy9Rr2qYbQlaf +iuT/hlAAAB6FkytPhZMrT4AAAAB3NzaC1kc3MAAACBAKkpMO6EbCb0BdA9m5ZJ0fGtpqJR +XhyC7i4WWAdqFXxDPL0wakOmn2Vu3e4Z7UUwjSNB4jHQFzcrFKLAuXSCCMX5/nXTR5kFF3 +D7eSb8FApplh0+BKJn1B04A3atEqXrne6oDzl+eGbVTBL6rftFK90mi0FOHyYmT88gsbBE +KgSHAAAAFQDqHCZC7aORvYqF8v9ONVOXAkUaTQAAAIAx3XEupb+JdXNak1TExQ1568M7CF +j5GqBlSuKnBmEq6g24WIu7v1SQ2l3+YpOQv30+7GczpF1paPHnitOrDcMuwWM1HqbHkc6U +PIjIhoaVeogOKIYw2gVMIQImdgS6ky3HADVrmOPvjakPIoCyk70zBWuwc82QC4Bc6yd58U +u1GQAAAIEAgdYvKFo7y6zq/PGVfnEfRtxstE2HxdxNe7n/FEHuRfWYEhNkoEqbVGEFg9Os +AOXML8/6C7iEXXgqO8BT6lEJg4TbHZVPTfqCVwxDFrjSJ3aDm/22IjChkX9QTTDzJquA13 +iTNWlY7Z5yrxVhD+Pyjz3kXL1GvaphtCVp+K5P+GUAAAAUGpvtb1Jl3ZVhjiiCc8adUik2 +21IAAAAMbG9nYW5AeWFnYW1pAQIDBAUG +-----END OPENSSH PRIVATE KEY----- diff --git a/priv/test_keys/ssh_host_dsa_key.pub b/priv/test_keys/ssh_host_dsa_key.pub new file mode 100644 index 0000000..d49bd6b --- /dev/null +++ b/priv/test_keys/ssh_host_dsa_key.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAKkpMO6EbCb0BdA9m5ZJ0fGtpqJRXhyC7i4WWAdqFXxDPL0wakOmn2Vu3e4Z7UUwjSNB4jHQFzcrFKLAuXSCCMX5/nXTR5kFF3D7eSb8FApplh0+BKJn1B04A3atEqXrne6oDzl+eGbVTBL6rftFK90mi0FOHyYmT88gsbBEKgSHAAAAFQDqHCZC7aORvYqF8v9ONVOXAkUaTQAAAIAx3XEupb+JdXNak1TExQ1568M7CFj5GqBlSuKnBmEq6g24WIu7v1SQ2l3+YpOQv30+7GczpF1paPHnitOrDcMuwWM1HqbHkc6UPIjIhoaVeogOKIYw2gVMIQImdgS6ky3HADVrmOPvjakPIoCyk70zBWuwc82QC4Bc6yd58Uu1GQAAAIEAgdYvKFo7y6zq/PGVfnEfRtxstE2HxdxNe7n/FEHuRfWYEhNkoEqbVGEFg9OsAOXML8/6C7iEXXgqO8BT6lEJg4TbHZVPTfqCVwxDFrjSJ3aDm/22IjChkX9QTTDzJquA13iTNWlY7Z5yrxVhD+Pyjz3kXL1GvaphtCVp+K5P+GU= logan@yagami diff --git a/priv/test_keys/ssh_host_ecdsa_key b/priv/test_keys/ssh_host_ecdsa_key new file mode 100644 index 0000000..d6df963 --- /dev/null +++ b/priv/test_keys/ssh_host_ecdsa_key @@ -0,0 +1,9 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS +1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQQuzKX9kCC99jJisXK1wKGTN5e/4Qcv +vHflqk0TLp/rQv12DYl0iA7mb9NWp9w9Xdtn5kqWYqaxUM4weMhM9t6sAAAAqFwD00xcA9 +NMAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC7Mpf2QIL32MmKx +crXAoZM3l7/hBy+8d+WqTRMun+tC/XYNiXSIDuZv01an3D1d22fmSpZiprFQzjB4yEz23q +wAAAAgCA9MOKEi7uU/lhsow6WOv+uAfp3u3t0KE1qP7IWIYpAAAAAMbG9nYW5AeWFnYW1p +AQIDBA== +-----END OPENSSH PRIVATE KEY----- diff --git a/priv/test_keys/ssh_host_ecdsa_key.pub b/priv/test_keys/ssh_host_ecdsa_key.pub new file mode 100644 index 0000000..bb976ee --- /dev/null +++ b/priv/test_keys/ssh_host_ecdsa_key.pub @@ -0,0 +1 @@ +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC7Mpf2QIL32MmKxcrXAoZM3l7/hBy+8d+WqTRMun+tC/XYNiXSIDuZv01an3D1d22fmSpZiprFQzjB4yEz23qw= logan@yagami diff --git a/priv/test_keys/ssh_host_rsa_key b/priv/test_keys/ssh_host_rsa_key new file mode 100644 index 0000000..4a2bb58 --- /dev/null +++ b/priv/test_keys/ssh_host_rsa_key @@ -0,0 +1,27 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAQEAijpwz+A646qB9EoDy8kXGJBRTlsSmTc8hzHoj2VhjeFOrrKrQxAl +tIJ8v0mDlOP+kBvhfUeg5bPUdAofQjAJMm1RJXlqPcLFojYZF23AJ3F7qsdWaelJmCBvXw +B5xtA+dM8r7sxC5Him0DuFfx4s63lERH3H1e8do4GA7bo7Z/ovQDdPPzZ4ZZL8jhwA4NI8 +1SZqCcqNbYuv+uD/OcogXDVf/LaKXcqCGnewmBVBydHuTF5rBfVwllWFFlfz/KRYi/BLuj +Vp/Q5b99EF2UZ3Pe0v4t3I/hxmFB8eVp/alC4hhUtXTEx3xpIwBpc6MESB2w0YOtg0K2+3 +Cyp+zXWRLQAAA8jVqqSo1aqkqAAAAAdzc2gtcnNhAAABAQCKOnDP4DrjqoH0SgPLyRcYkF +FOWxKZNzyHMeiPZWGN4U6usqtDECW0gny/SYOU4/6QG+F9R6Dls9R0Ch9CMAkybVEleWo9 +wsWiNhkXbcAncXuqx1Zp6UmYIG9fAHnG0D50zyvuzELkeKbQO4V/HizreUREfcfV7x2jgY +Dtujtn+i9AN08/NnhlkvyOHADg0jzVJmoJyo1ti6/64P85yiBcNV/8topdyoIad7CYFUHJ +0e5MXmsF9XCWVYUWV/P8pFiL8Eu6NWn9Dlv30QXZRnc97S/i3cj+HGYUHx5Wn9qULiGFS1 +dMTHfGkjAGlzowRIHbDRg62DQrb7cLKn7NdZEtAAAAAwEAAQAAAQAFkJo+PYZUEucl8lKK +TPzIIUvrVg50NXgomjQFDTK6+fKHZSEwyJDis5Z5mKhP4XORZ39HDPqXh3XwEQCWqHqU+Y +0uL3U9P3Q3llV2xGqbZpMbuj2KndjNDiXlrXjO7fnMYpMfy0CN1E9PlqHbzwIbHcKc6PJs +tLJyWhzvv9MImcej3d41OQJL1icKpByy7w1Dc0SbPaqlwxg1ikVMIhxtj8mWUSryqsc6U9 +Ho5bKpaRmqZ/0MAV01N3ynLrUTWQdTlF+9F9PUVsTjBsfo3jyWr/lXR4WHeWx81Pgc0SrK +WptOuIoWNxUhj2gp+DBgiaCKjkjLNqPk/PxeFJMNCE8hAAAAgHfkuSwteenOqOJGt3fKB6 +rRdBoMTyhAFzt04SlunTJjNTZFiFZjsRSRDMOSTxc3se+Edd+EcBAgoljXtBfYoxTKIgAp +rUpfEoKFsBbd3raXr2CnqMPy5lybCs8o5WrSjKJOh2rttxfvMErGvMwisMU+64twR1NCs3 +xwJfFyrR99AAAAgQDDOPK5m/mruNfLlb4v1+ET4vHq7flIDUgTEqVPrNuncR8KsYYbEeoj +ryPwJYqIOLVUQI+3JHgoe/1yWxsITqG/C2MQp6iqdbNxIrM1E73c28siz4KDxzRWxSff/G +8zxkGrCHhPrNg4taBIiQy8WQGhTUaknDgklOxfuB2gMLI2DQAAAIEAtUMb7C+ROmVbIy4O +dpenYBcQhJcCIJXKvDGUgZvqQPcIeeEWtnt8svPfg3oG39mZNeNx7rA7a2GA0DG7DEq7gG +8n+bxHCogERhUx+J6UMapOvu98V9YNjoLvvtaFM3G7oEAl82A9ex7lqDESsXQyAsuEndv8 +UNvsglNa5kyuH6EAAAAMbG9nYW5AeWFnYW1pAQIDBAUGBw== +-----END OPENSSH PRIVATE KEY----- diff --git a/priv/test_keys/ssh_host_rsa_key.pub b/priv/test_keys/ssh_host_rsa_key.pub new file mode 100644 index 0000000..545d65e --- /dev/null +++ b/priv/test_keys/ssh_host_rsa_key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCKOnDP4DrjqoH0SgPLyRcYkFFOWxKZNzyHMeiPZWGN4U6usqtDECW0gny/SYOU4/6QG+F9R6Dls9R0Ch9CMAkybVEleWo9wsWiNhkXbcAncXuqx1Zp6UmYIG9fAHnG0D50zyvuzELkeKbQO4V/HizreUREfcfV7x2jgYDtujtn+i9AN08/NnhlkvyOHADg0jzVJmoJyo1ti6/64P85yiBcNV/8topdyoIad7CYFUHJ0e5MXmsF9XCWVYUWV/P8pFiL8Eu6NWn9Dlv30QXZRnc97S/i3cj+HGYUHx5Wn9qULiGFS1dMTHfGkjAGlzowRIHbDRg62DQrb7cLKn7NdZEt logan@yagami