Usernames, logging in, validations, etc.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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: </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: </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
|
||||
|
||||
Reference in New Issue
Block a user