Usernames, logging in, validations, etc.

This commit is contained in:
2020-12-29 00:06:44 -08:00
parent bddf7ff040
commit 2a288e2507
9 changed files with 136 additions and 17 deletions
@@ -3,16 +3,33 @@ defmodule BwcWeb.SessionController do
def new(conn, _params) do
player = Bwc.new_player()
render conn, "new.html", player: player
render(conn, "new.html", player: player)
end
def create(conn, params) do
require Logger
Logger.debug(params)
def set_name(conn, params) do
import Logger
case Map.get(params, "username") |> Bwc.get_or_create_player() do
{:ok, player} ->
conn |> put_session(:username, player.username) |> render("set_name.json", username: player.username)
{:error, username} ->
conn |> render("error.json", username: username)
end
end
def create(conn, %{"player" => %{"username" => username, "picture" => picture}}) do
cards = Bwc.list_cards()
case Bwc.create_player(Map.get(params, "player")) do
{:ok, username} -> conn |> put_session(:username, username) |> redirect(to: Routes.card_path(conn, :index, cards))
{:error, player} -> render(conn, "new.html", player: player)
case Bwc.get_or_create_player(username) do
{:ok, player} ->
conn
|> put_session(:username, username)
|> put_flash(:info, "Welcome to the game, #{player.username}.")
|> redirect(to: Routes.card_path(conn, :index, cards))
{:error, player} ->
conn |> put_flash(:error, "Something's wrong.") |> render("new.html", player: player)
end
end
end
+17
View File
@@ -0,0 +1,17 @@
defmodule BwcWeb.Roster do
import Plug.Conn
def init(opts), do: opts
def call(conn, _opts) do
player =
conn
|> get_session(:username)
|> case do
nil -> Bwc.new_player()
username -> Bwc.get_player_by(%{username: username})
end
assign(conn, :player, player)
end
end
+5
View File
@@ -7,10 +7,12 @@ defmodule BwcWeb.Router do
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
plug BwcWeb.Roster
end
pipeline :api do
plug :accepts, ["json"]
plug :fetch_session
end
scope "/", BwcWeb do
@@ -32,6 +34,9 @@ defmodule BwcWeb.Router do
pipe_through :api
resources "/cards", CardController, only: [:delete]
post "/join", SessionController, :set_name
end
# Enables LiveDashboard only for development
@@ -19,9 +19,16 @@
</a>
</h1>
<div class='auth uk-flex uk-flex-column uk-flex-center'>
<span class='uk-icon' uk-icon="icon:user"></span>
<small><b>You are:&nbsp;</b>
Nobody</small>
<div>
<span class='uk-icon' uk-icon="icon:user" style="width:150px;"></span>
</div>
<div id="top-bar-username" class='uk-flex uk-flex-row uk-flex-center uk-margin-small-top'>
<b>You are:&nbsp;</b>
<a style='width:100px;' href="javascript:show_login_box()">
<%= @player.username %>
</a>
<input id="top-bar-login-box"/>
</div>
</div>
</div>
@@ -1,3 +1,13 @@
defmodule BwcWeb.SessionView do
use BwcWeb, :view
def render("set_name.json", params) do
username = Map.get(params,:username)
%{
data: "You are now known as '#{username}'.",
username: username
}
end
end