making the snippet private to the logged in user

This commit is contained in:
Thelonius Kort
2020-07-30 17:29:01 +02:00
parent 77a89e2682
commit f47f6150cb
3 changed files with 19 additions and 21 deletions

View File

@ -39,10 +39,10 @@ defmodule Clip.Accounts.User do
defp validate_password(changeset) do defp validate_password(changeset) do
changeset changeset
|> validate_required([:password]) |> validate_required([:password])
|> validate_length(:password, min: 12, max: 80) |> validate_length(:password, min: 8, max: 80)
# |> validate_format(:password, ~r/[a-z]/, message: "at least one lower case character") |> validate_format(:password, ~r/[a-z]/, message: "at least one lower case character")
# |> validate_format(:password, ~r/[A-Z]/, message: "at least one upper case character") |> validate_format(:password, ~r/[A-Z]/, message: "at least one upper case character")
# |> validate_format(:password, ~r/[!?@#$%^&*_0-9]/, message: "at least one digit or punctuation character") |> validate_format(:password, ~r/[-..:;!?@#$%^&*_0-9]/, message: "at least one digit or punctuation character (one of . . : ; ! ? @ # $ % ^ & * _ -)")
|> prepare_changes(&hash_password/1) |> prepare_changes(&hash_password/1)
end end

View File

@ -1,21 +1,24 @@
defmodule ClipWeb.BoardLive do defmodule ClipWeb.BoardLive do
use ClipWeb, :live_view use ClipWeb, :live_view
alias Clip.Accounts
@impl true @impl true
def render(assigns) do def render(assigns) do
~L""" ~L"""
<form phx-change="paste"> <form phx-change="paste">
<input type="text" name="snippet" value="<%= @snippet %>" data-updated-val="<%= @snippet %>" phx-hook="SnippetInput" autocomplete="off"/> <textarea type="text" name="snippet" data-updated-val="<%= @snippet %>" phx-hook="SnippetInput" autocomplete="off"><%= @snippet %></textarea>
</form> </form>
Current content: <%= @snippet %> Current content: <%= @snippet %><br>
<button phx-click="normalize"> <button phx-click="normalize">-> 004930112</button>
""" """
end end
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, session, socket) do
Phoenix.PubSub.subscribe(Clip.PubSub, "everybody") # actually only for single user user = Accounts.get_user_by_session_token(session |> Map.get("user_token"))
{:ok, assign(socket, snippet: "")} Phoenix.PubSub.subscribe(Clip.PubSub, user.email)
{:ok, assign(socket, snippet: "", current_user: user)}
end end
defp normalize(pnumber, local_pref \\ "0351", country_pref \\ "0049") do defp normalize(pnumber, local_pref \\ "0351", country_pref \\ "0049") do
@ -28,15 +31,15 @@ defmodule ClipWeb.BoardLive do
end end
@impl true @impl true
def handle_event("normalize", _, %{assigns: %{snippet: snippet}} = socket) do def handle_event("normalize", _, %{assigns: %{snippet: snippet, current_user: user}} = socket) do
norm_snipp = normalize(snippet) norm_snipp = normalize(snippet)
Phoenix.PubSub.broadcast(Clip.PubSub, "everybody", {:snippet_pasted, %{snippet: norm_snipp}}) Phoenix.PubSub.broadcast(Clip.PubSub, user.email, {:snippet_pasted, %{snippet: norm_snipp}})
{:noreply, assign(socket, snippet: snippet)} {:noreply, assign(socket, snippet: snippet)}
end end
@impl true @impl true
def handle_event("paste", %{"snippet" => snippet}, socket) do def handle_event("paste", %{"snippet" => snippet}, %{assigns: %{current_user: user}} = socket) do
Phoenix.PubSub.broadcast(Clip.PubSub, "everybody", {:snippet_pasted, %{snippet: snippet}}) Phoenix.PubSub.broadcast(Clip.PubSub, user.email, {:snippet_pasted, %{snippet: snippet}})
{:noreply, assign(socket, snippet: snippet)} {:noreply, assign(socket, snippet: snippet)}
end end

View File

@ -17,13 +17,6 @@ defmodule ClipWeb.Router do
plug :accepts, ["json"] plug :accepts, ["json"]
end end
scope "/", ClipWeb do
pipe_through :browser
# live "/", PageLive, :index
live "/", BoardLive, :index
end
# Other scopes may use custom stacks. # Other scopes may use custom stacks.
# scope "/api", ClipWeb do # scope "/api", ClipWeb do
# pipe_through :api # pipe_through :api
@ -63,6 +56,8 @@ defmodule ClipWeb.Router do
scope "/", ClipWeb do scope "/", ClipWeb do
pipe_through [:browser, :require_authenticated_user] pipe_through [:browser, :require_authenticated_user]
live "/", BoardLive, :index
get "/users/settings", UserSettingsController, :edit get "/users/settings", UserSettingsController, :edit
put "/users/settings/update_password", UserSettingsController, :update_password put "/users/settings/update_password", UserSettingsController, :update_password
put "/users/settings/update_email", UserSettingsController, :update_email put "/users/settings/update_email", UserSettingsController, :update_email