|
| 1 | +defmodule PlatformWeb.PlayerAuthController do |
| 2 | + import Plug.Conn |
| 3 | + |
| 4 | + alias Platform.Accounts.Player |
| 5 | + |
| 6 | + def init(opts) do |
| 7 | + Keyword.fetch!(opts, :repo) |
| 8 | + end |
| 9 | + |
| 10 | + def call(conn, repo) do |
| 11 | + player_id = get_session(conn, :player_id) |
| 12 | + player = player_id && repo.get(Player, player_id) |
| 13 | + assign(conn, :current_user, player) |
| 14 | + end |
| 15 | + |
| 16 | + def sign_in(conn, player) do |
| 17 | + conn |
| 18 | + |> assign(:current_user, player) |
| 19 | + |> put_session(:player_id, player.id) |
| 20 | + |> configure_session(renew: true) |
| 21 | + end |
| 22 | + |
| 23 | + def sign_in_with_username_and_password(conn, username, given_pass, opts) do |
| 24 | + repo = Keyword.fetch!(opts, :repo) |
| 25 | + player = repo.get_by(Player, username: username) |
| 26 | + |
| 27 | + cond do |
| 28 | + player && Comeonin.Bcrypt.checkpw(given_pass, player.password_digest) -> |
| 29 | + {:ok, sign_in(conn, player)} |
| 30 | + |
| 31 | + player -> |
| 32 | + {:error, :unauthorized, conn} |
| 33 | + |
| 34 | + true -> |
| 35 | + Comeonin.Bcrypt.dummy_checkpw() |
| 36 | + {:error, :not_found, conn} |
| 37 | + end |
| 38 | + end |
| 39 | + |
| 40 | + def sign_out(conn) do |
| 41 | + configure_session(conn, drop: true) |
| 42 | + end |
| 43 | +end |
0 commit comments