summaryrefslogtreecommitdiff
path: root/test/auth/pubkey_test.exs
blob: da2518b6eabb34a27622c3c6c125d9ea8dc8e8f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
defmodule Chessh.Auth.PublicKeyAuthenticatorTest do
  use ExUnit.Case
  alias Chessh.{Key, Repo, Player}

  @valid_user %{username: "logan", password: "password"}
  @valid_key %{
    name: "The Gamer Machine",
    key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/2LOJGGEd/dhFgRxJ5MMv0jJw4s4pA8qmMbZyulN44"
  }

  setup_all do
    Ecto.Adapters.SQL.Sandbox.checkout(Repo)
    Ecto.Adapters.SQL.Sandbox.mode(Repo, {:shared, self()})

    {:ok, player} = Repo.insert(Player.registration_changeset(%Player{}, @valid_user))

    {:ok, _key} =
      Repo.insert(
        Key.changeset(%Key{}, @valid_key)
        |> Ecto.Changeset.put_assoc(:player, player)
      )

    :ok
  end

  test "User can sign in with their ssh key from raw string" do
    assert Chessh.Auth.KeyAuthenticator.authenticate(@valid_user.username, @valid_key.key)
  end

  test "User can sign in with erlang decoded ssh key" do
    [key] = :ssh_file.decode(@valid_key.key, :openssh_key)
    assert Chessh.Auth.KeyAuthenticator.authenticate(@valid_user.username, key)
  end
end